2013-01-16 19 views
8

GoogleMapsを含むiOSアプリケーションを開発しています。 iOS向けGoogleMaps SDKの実装プロセスはまだ完了していません。GMSCameraズームの計算方法

しかし、GMSCamera zoom を計算する方法を知りたいので、マップ上の全ルートを表示してください。

アップルマップでは、spanを使用しています。 しかし、GoogleMaps SDKにはスパンがありません。

私に助言してください。ここで

答えて

3

が、これは「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; 
} 

を助けるかもしれない機能です。

+0

ありがとうございました! 明日これを試してみます! – AlfaromeoCorse

+0

これはまったく役に立ちましたか? –

+0

zoomscaleの計算の計算は正しいですか?なぜ私は同じlongitudeDeltaを持つMapKitマップと比較して、Googleマップの小さなズームを得たのですか? – Jing

1

私はここに同様の質問への答えを投稿:

How to setRegion with google maps sdk for iOS?

をそれはリーの答えに似たアプローチ使用しています:ズームレベル、その後、規模を計算し、各画素に緯度/経度に変換します。

3

リーの方法は右ですが、数学がグーグルに基づいて、適切ではないが 画面上に1つのダブルスで世界の幅をズームレベルを上げるズーム

のIOS SDKのドキュメントをマップします。従って、ズームレベルNでは、世界の幅は約 256 * 2^Nであり、すなわちズームレベル2では、全世界は約1024 ポイント幅である。ズームレベルは整数である必要はないことに注意してください。マップで許可されている のズームレベルの範囲は、位置、地図の種類、画面のサイズなど、さまざまな要因によって異なります( )。

ズームが

zoom = log2(360 * mapView.bounds.size.width/ longitudeDelta) - 8; 
+1

逆問題解決はここにあります: 'longitudeDelta = 360 * mapView.bounds.size.width /(1 <<(zoom + 8) ) ' – k06a

0

ジンであるべき計算する数学、あなたの数学は、経度のために正しいですが、緯度のために、それは少しトリッキーにする必要があります。メルカトル投影法は緯度と経度を別々に扱います。あなたがfitBoundsを使用することができますSDKの現在のバージョンでは実際にhttps://stackoverflow.com/a/16217785/2291425

18

GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] initWithPath:yourPath]; 
//There are several useful init methods for the GMSCoordinateBounds! 
GMSCameraUpdate *update = [GMSCameraUpdate fitBounds:bounds]; 
[mapView_ moveCamera:update]; 

Googleに数学をしましょう。この道を、私は彼らがかなり確信している私はここで正しいコードを掲載していますそれは本当に良いです。

0

スウィフト:

//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)