GoogleMapsを含むiOSアプリケーションを開発しています。そして、iOS用のGoogleMapsSDKの実装プロセスはまだ完了しています。
しかし、地図上にルート全体を表示するためのGMSCameraズームの計算方法を知りたいです。
Apple Mapでは、おそらくスパンを使用します。しかし、GoogleMapsSDKにはスパンがありません。
アドバイスをお願いします。
GoogleMapsを含むiOSアプリケーションを開発しています。そして、iOS用のGoogleMapsSDKの実装プロセスはまだ完了しています。
しかし、地図上にルート全体を表示するためのGMSCameraズームの計算方法を知りたいです。
Apple Mapでは、おそらくスパンを使用します。しかし、GoogleMapsSDKにはスパンがありません。
アドバイスをお願いします。
リーの方法は正しいが、数学は正しくない、ズームの Google マップ ios SDK ドキュメントに基づく
ズーム レベルを 1 上げると、画面上の世界の幅が 2 倍になります。したがって、ズーム レベル N では、ワールドの幅は約 256 * 2^N です。つまり、ズーム レベル 2 では、ワールド全体の幅は約 1024 ポイントです。ズーム レベルは整数である必要はないことに注意してください。マップで許可されるズーム レベルの範囲は、場所、マップの種類、画面サイズなど、さまざまな要因によって異なります。
ズームを計算するための計算は、
zoom = log2(360 * mapView.bounds.size.width/ longitudeDelta) - 8;
これは、「Google 互換」である MKMapView から zoomLevel を計算するときに役立つ関数です。
- (NSInteger)getZoomLevel
{
MKMapView *map = (MKMapView *)self.mapView;
CLLocationDegrees longitudeDelta = map.region.span.longitudeDelta;
CGFloat mapWidthInPixels = map.bounds.size.width;
double zoomScale = longitudeDelta * 85445659.44705395 * M_PI / (180.0 * mapWidthInPixels);
double zoomer = 20 - log2(zoomScale);
if ( zoomer < 0 ) zoomer = 0;
return (NSInteger)zoomer;
}
代わりに座標を取得して渡すことができれば、問題ありません。
私はここに同様の質問への回答を投稿しました:
iOS用のグーグルマップSDKでRegionを設定する方法は?
Leeの答えと同様のアプローチを使用します。緯度/経度をピクセルに変換し、スケールを計算してから、ズームレベルを計算します。
迅速:
//Create a path
let path = GMSMutablePath()
//for each point you need, add it to your path
let position = CLLocationCoordinate2DMake(latitude, longitude)
path.add(position)
//Update your mapView with path
let mapBounds = GMSCoordinateBounds(path: path)
let cameraUpdate = GMSCameraUpdate.fit(mapBounds)
mapView.moveCamera(cameraUpdate)
GMSCoordinateBounds を使用します。座標、境界などのさまざまなパラメーターを使用して、マップを適合させることができます。
GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] initWithPath:path];
ジンさん、あなたの計算は経度については正しいのですが、緯度についてはもう少しトリッキーである必要があります。メルカトル図法では、緯度と経度の扱いが異なります。ここに正しいコードを投稿しました: https://stackoverflow.com/a/16217785/2291425