我正在尝试使用Google Map
应用iPhone
进行地理围栏。
可以找到MKMapView的很多教程。但无法找到GMSMapView。
基本的是如何将屏幕坐标(x,y)转换为MapCoordinate lat / lng。
对于该转换,API
中的Google地图是否有iOS
可用?
感谢
答案 0 :(得分:2)
您可以使用以下内容:
GMSMapView* mapView = ...;
CGPoint point = ...;
...
CLLocationCoordinate2D coordinate =
[mapView.projection coordinateForPoint: point];
<强>更新强>
projection
中GMSMapView.h
媒体资源的评论为:
/**
* The GMSProjection currently used by this GMSMapView. This is a snapshot of
* the current projection, and will not automatically update when the camera
* moves. The projection may be nil while the render is not running (if the map
* is not yet part of your UI, or is part of a hidden UIViewController, or you
* have called stopRendering).
*/
@property (nonatomic, readonly) GMSProjection *projection;
因此,您只能在渲染地图后访问.projection
属性。如果您尝试在loadView
或viewDidLoad
期间访问它,则为零。
我不知道是否有更好的方法来判断地图是否已经渲染,但我注意到在首次显示地图视图后调用mapView:didChangeCameraPosition:
方法,并且地图的{ {1}}属性在那里有效。
因此,在视图控制器的标题中,添加projection
:
GMSMapViewDelegate
分配地图视图时,请指定委托:
@interface ViewController : UIViewController <GMSMapViewDelegate>
然后添加委托方法:
_map = [GMSMapView mapWithFrame: CGRectMake(0, 0, width, height) camera: camera];
_map.delegate = self;
[self.view addSubview: _map];
请注意,每次用户更改相机时都会调用- (void)mapView: (GMSMapView*)mapView
didChangeCameraPosition: (GMSCameraPosition*)position
{
CGPoint point = CGPointMake(x, y);
CLLocationCoordinate2D coordinate =
[_map.projection coordinateForPoint: point];
}
,因此您可能需要使用标记,这样您才能在第一次调用mapView:didChangeCameraPosition:
时进行计算。 / p>
答案 1 :(得分:0)
<强> No need to convert x,y to lat,long.
强>
GMSCircle *fence = [GMSCircle circleWithPosition:locationCord radius:fenceRadius];
[fence setFillColor:[UIColor colorWithRed:102.0/255 green:178.0/255 blue:255.0/255 alpha:0.3]];
[fence setZIndex:100];
[fence setMap: _map];
在制作GMSMapView时添加此代码,地理围栏将与您的位置标记一起显示。