我想知道iPhone編程中MKMapView
的當前縮放級別,我該怎麼做? 其實我有一個應用程序,這是幾個參數(從中心到角落的半徑爲MKMapView
)正在返回商店的詳細信息,當我在MKMapView
上時,半徑非常高,並且它在半徑較小時發生變化,所以我想知道縮放級別並根據此設置我的webservice,如何獲取當前MKMapView
可見區域的縮放級別?如何找到MKMapView的當前縮放級別?
21
A
回答
13
您可以在MKMapView
的region
屬性內使用span
。它是這樣定義的:
typedef struct {
CLLocationDegrees latitudeDelta;
CLLocationDegrees longitudeDelta;
} MKCoordinateSpan;
看看documentation。那裏有很好的解釋。
46
我創造了非常簡單的輔助子吧:
#define MERCATOR_RADIUS 85445659.44705395
#define MAX_GOOGLE_LEVELS 20
@interface MKMapView (ZoomLevel)
- (double)getZoomLevel;
@end
@implementation MKMapView (ZoomLevel)
- (double)getZoomLevel
{
CLLocationDegrees longitudeDelta = self.region.span.longitudeDelta;
CGFloat mapWidthInPixels = self.bounds.size.width;
double zoomScale = longitudeDelta * MERCATOR_RADIUS * M_PI/(180.0 * mapWidthInPixels);
double zoomer = MAX_GOOGLE_LEVELS - log2(zoomScale);
if (zoomer < 0) zoomer = 0;
// zoomer = round(zoomer);
return zoomer;
}
@end
3
以前所有的答案,不考慮當前地圖的旋轉。 MKMapView的經緯度因非旋轉地圖和旋轉地圖而異。 這裏是直的地圖縮放計算一個很大的功能:https://stackoverflow.com/a/15020534/4923516
這裏是我在斯威夫特的改進,即考慮到地圖旋轉,並返回當前的縮放級別:
class MyMapView : MKMapView {
func getZoom() -> Double {
// function returns current zoom of the map
var angleCamera = self.camera.heading
if angleCamera > 270 {
angleCamera = 360 - angleCamera
} else if angleCamera > 90 {
angleCamera = fabs(angleCamera - 180)
}
let angleRad = M_PI * angleCamera/180 // camera heading in radians
let width = Double(self.frame.size.width)
let height = Double(self.frame.size.height)
let heightOffset : Double = 20 // the offset (status bar height) which is taken by MapKit into consideration to calculate visible area height
// calculating Longitude span corresponding to normal (non-rotated) width
let spanStraight = width * self.region.span.longitudeDelta/(width * cos(angleRad) + (height - heightOffset) * sin(angleRad))
return log2(360 * ((width/256)/spanStraight)) + 1;
}
}
您可以下載樣本項目我的回購:https://github.com/d-babych/mapkit-wrap
5
獲取當前縮放級別整數的最簡單方法是使用MapView函數:regionDidChangeAnimated。此功能可識別變焦中的每個變化,併爲您提供變焦係數計算的基礎。
只需插入此功能到您的MapView類(作品雨燕3.0):
var mapView: MKMapView! = nil
...
func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
let zoomWidth = mapView.visibleMapRect.size.width
let zoomFactor = Int(log2(zoomWidth)) - 9
print("...REGION DID CHANGE: ZOOM FACTOR \(zoomFactor)")
}
,你會得到一個zoomFactor值出來,其中0表示最近點,你可以放大地圖和每一個更高的價值是一個很遠很遠變焦... :-)
相關問題
- 1. MkMapView縮放級別
- 2. MKMapView的縮放級別
- 3. 如何在Google Map中查找當前縮放級別?
- 4. 實現MKMapView的縮放級別
- 5. MKMapView的縮放級別有上限嗎?
- 6. 如何使用註解縮小MKMapview的縮放級別?
- 7. IOS6 MKMapView最大縮放級別
- 8. 如何知道D3.js中的當前縮放級別
- 9. 如何獲得當前的縮放級別
- 10. 如何讀取Mapbox的當前縮放級別?
- 11. 如何獲取當前的Google地圖縮放級別?
- 12. MKMapView setRegion「捕捉」到預定義的縮放級別?
- 13. 如何在iOS上獲得最大縮放級別MKMapView
- 14. MKMapView:縮放到默認「國家級」
- 15. 如何在Arcgis Map View Android中獲取當前縮放級別?
- 16. 如何使用gmaps.js獲取當前縮放級別?
- 17. 當我縮小時,MKMapView自動放大到當前位置
- 18. MkMapView縮放框查找。
- 19. 預測this.map.fitBounds之前的縮放級別
- 20. 不能設置縮放級別上的MKMapView
- 21. iOS - MKMapView僅顯示某個縮放級別的註釋
- 22. 打開MKMapView到用戶當前位置,沒有在美國縮放級別開始
- 23. Angular 2獲取地圖的當前縮放級別
- 24. 是否有任何方式編程縮放MKMapView而不捕捉到其預定義的縮放級別之一?
- 25. iOS6 MKMapView縮放
- 26. UIWebView縮放級別
- 27. MKMapView縮放到註解 - annotationVisibleRect
- 28. MKMapView不縮放到區域
- 29. 將MKMapView縮放到CLRegion
- 30. 在MKMapView上增加最大縮放級別
剛剛從 –
Minakshi