アプリにジオフェンスを使用しようとしてGoogle Map
いiPhone
ます。MKMapViewのチュートリアルはたくさんあります。しかし、GMSMapViewが見つかりません。基本的なことは、画面座標(x、y)をMapCoordinate lat/lngに変換する方法です。その変換のAPI
ためにGoogleマップで利用できるものはありますか?iOS
ありがとう
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:
に呼び出されたときにのみ計算を実行できます。
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 を作成しているときにこのコードを追加すると、ロケーション マーカーとともにジオ フェンスが表示されます。