我找到了如何获得zoomScale。
CLLocationDegrees longitudeDelta = myMapView.region.span.longitudeDelta;
CGFloat mapWidthInPixels = myMapView.bounds.size.width;
double zoomScale = longitudeDelta * MERCATOR_RADIUS * M_PI / (180.0 * mapWidthInPixels);
但是我不知道结果是什么意思,如果我想获得尺寸宽度的米或者是20f的线,我将 mapWidthInPixels 更改为20是否正确?
答案 0 :(得分:6)
您可以在此处找到有关公式的详细说明:transform longitude latitude into meters。
示例代码:
CLLocationDegrees deltaLatitude = self.mapView.region.span.latitudeDelta;
CLLocationDegrees deltaLongitude = self.mapView.region.span.longitudeDelta;
CGFloat latitudeCircumference = 40075160 * cos(self.mapView.region.center.latitude * M_PI / 180);
NSLog(@"x: %f; y: %f", deltaLongitude * latitudeCircumference / 360, deltaLatitude * 40008000 / 360);
的信用
答案 1 :(得分:5)
这对我很有用。 我的解决方案是在Swift中,但是Obj-C是类似的。
斯威夫特:let mRect: MKMapRect = self.mapView.visibleMapRect
let eastMapPoint = MKMapPointMake(MKMapRectGetMinX(mRect), MKMapRectGetMidY(mRect))
let westMapPoint = MKMapPointMake(MKMapRectGetMaxX(mRect), MKMapRectGetMidY(mRect))
let currentDistWideInMeters = MKMetersBetweenMapPoints(eastMapPoint, westMapPoint)
let milesWide = currentDistWideInMeters / 1609.34 // number of meters in a mile
println(milesWide)
Obj-C(赞美以下代码https://stackoverflow.com/a/5813609/3750109的原始撰稿人)
MKMapRect mRect = self.mapView.visibleMapRect;
MKMapPoint eastMapPoint = MKMapPointMake(MKMapRectGetMinX(mRect), MKMapRectGetMidY(mRect));
MKMapPoint westMapPoint = MKMapPointMake(MKMapRectGetMaxX(mRect), MKMapRectGetMidY(mRect));
self.currentDistWideInMeters = MKMetersBetweenMapPoints(eastMapPoint, westMapPoint);
答案 2 :(得分:1)
纵向米的距离将随着纬度的增加而变化。当您离赤道越远时,相同的经度值以米为单位变小。最好的方法可能是在中间左侧和中间右侧创建两个CLLocation
,然后使用-distanceFromLocation:
来获取它们之间的距离(以米为单位)。