2013-01-16 53 views
8

我正在開發iOS應用程序,包括GoogleMaps。 GoogleMaps SDK for iOS的實現過程尚未完成。如何計算GMSCamera縮放

但我想知道如何計算GMSCamera zoom 在Map上顯示整個路線。

在蘋果地圖,我們使用跨度,也許。 但GoogleMaps SDK沒有跨度。

請給我建議。

回答

3

這裏是一個函數,它可以幫助,因爲這從一個的MKMapView是「谷歌兼容」

- (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; 
} 

如果你可以抓住的座標,並把它們放到相反,你應該確定計算個zoomLevel。

+0

非常感謝您! 明天我會試試這個! – AlfaromeoCorse

+0

這幫忙嗎? –

+0

計算縮放比例的數學是正確的嗎?爲什麼我在谷歌地圖上縮小比例,與MapKit地圖相同,經度相同... – Jing

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

靜,你的數學是正確的經度,但緯度它必須是比較麻煩一些。墨卡託投影處理緯度和經度的方式不同。我已經發布了正確的代碼在這裏:https://stackoverflow.com/a/16217785/2291425

18

其實你可以使用fitBounds SDK的最新版本:

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

這樣,你讓數學谷歌,我敢肯定他們是真的很擅長。

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)