GoogleMapsを含むiOSアプリケーションを開発しています。 iOS向けGoogleMaps SDKの実装プロセスはまだ完了していません。GMSCameraズームの計算方法
しかし、GMSCamera zoom を計算する方法を知りたいので、マップ上の全ルートを表示してください。
アップルマップでは、spanを使用しています。 しかし、GoogleMaps SDKにはスパンがありません。
私に助言してください。ここで
GoogleMapsを含むiOSアプリケーションを開発しています。 iOS向けGoogleMaps SDKの実装プロセスはまだ完了していません。GMSCameraズームの計算方法
しかし、GMSCamera zoom を計算する方法を知りたいので、マップ上の全ルートを表示してください。
アップルマップでは、spanを使用しています。 しかし、GoogleMaps SDKにはスパンがありません。
私に助言してください。ここで
が、これは「Googleは互換」であるMKMapViewからzoomLevelを計算して、あなたが座標を取得し、[OK]をする必要があります代わりのものを渡すことができる場合
- (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;
}
を助けるかもしれない機能です。
私はここに同様の質問への答えを投稿:
How to setRegion with google maps sdk for iOS?
をそれはリーの答えに似たアプローチ使用しています:ズームレベル、その後、規模を計算し、各画素に緯度/経度に変換します。
リーの方法は右ですが、数学がグーグルに基づいて、適切ではないが 画面上に1つのダブルスで世界の幅をズームレベルを上げるズーム
のIOS SDKのドキュメントをマップします。従って、ズームレベルNでは、世界の幅は約 256 * 2^Nであり、すなわちズームレベル2では、全世界は約1024 ポイント幅である。ズームレベルは整数である必要はないことに注意してください。マップで許可されている のズームレベルの範囲は、位置、地図の種類、画面のサイズなど、さまざまな要因によって異なります( )。
ズームが
zoom = log2(360 * mapView.bounds.size.width/ longitudeDelta) - 8;
逆問題解決はここにあります: 'longitudeDelta = 360 * mapView.bounds.size.width /(1 <<(zoom + 8) ) ' – k06a
ジンであるべき計算する数学、あなたの数学は、経度のために正しいですが、緯度のために、それは少しトリッキーにする必要があります。メルカトル投影法は緯度と経度を別々に扱います。あなたがfitBoundsを使用することができますSDKの現在のバージョンでは実際にhttps://stackoverflow.com/a/16217785/2291425
:
GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] initWithPath:yourPath];
//There are several useful init methods for the GMSCoordinateBounds!
GMSCameraUpdate *update = [GMSCameraUpdate fitBounds:bounds];
[mapView_ moveCamera:update];
Googleに数学をしましょう。この道を、私は彼らがかなり確信している私はここで正しいコードを掲載していますそれは本当に良いです。
GMSCoordinateBoundsを使用します。あなたは、cooodinates、境界などのような異なるパラメータを使用してマップに合わせることができます
GMSCoordinateBounds * bounds = [[GMSCoordinateBounds alloc] initWithPath:path];
スウィフト:
//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)
ありがとうございました! 明日これを試してみます! – AlfaromeoCorse
これはまったく役に立ちましたか? –
zoomscaleの計算の計算は正しいですか?なぜ私は同じlongitudeDeltaを持つMapKitマップと比較して、Googleマップの小さなズームを得たのですか? – Jing