在iPhone中使用Google Map进行地理围栏

时间:2013-03-02 03:51:34

标签: ios google-maps google-maps-api-3 google-maps-sdk-ios

我正在尝试使用Google Map应用iPhone进行地理围栏。 可以找到MKMapView的很多教程。但无法找到GMSMapView。 基本的是如何将屏幕坐标(x,y)转换为MapCoordinate lat / lng。 对于该转换,API中的Google地图是否有iOS可用? 感谢

2 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

GMSMapView* mapView = ...;
CGPoint point = ...;
...
CLLocationCoordinate2D coordinate = 
    [mapView.projection coordinateForPoint: point];

<强>更新

projectionGMSMapView.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属性。如果您尝试在loadViewviewDidLoad期间访问它,则为零。

我不知道是否有更好的方法来判断地图是否已经渲染,但我注意到在首次显示地图视图后调用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时添加此代码,地理围栏将与您的位置标记一起显示。