3

アプリにジオフェンスを使用しようとしてGoogle MapiPhoneます。MKMapViewのチュートリアルはたくさんあります。しかし、GMSMapViewが見つかりません。基本的なことは、画面座標(x、y)をMapCoordinate lat/lngに変換する方法です。その変換のAPIためにGoogleマップで利用できるものはありますか?iOSありがとう

4

2 に答える 2

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またはの間にアクセスしようとすると、nilになりますviewDidLoad

マップがレンダリングされたかどうかを確認するためのより良い方法があるかどうかはわかりませんがmapView:didChangeCameraPosition:、マップビューが最初に表示された後にメソッドが一度呼び出され、マップのprojectionプロパティがそこで有効であることに気付きました。

したがって、View Controllerのヘッダーに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:は、ユーザーがカメラを変更するたびに呼び出されるため、フラグを使用する必要があります。これにより、最初mapView:didChangeCameraPosition:に呼び出されたときにのみ計算を実行できます。

于 2013-03-02T03:58:06.087 に答える
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 を作成しているときにこのコードを追加すると、ロケーション マーカーとともにジオ フェンスが表示されます。

于 2013-11-19T12:57:02.737 に答える