6

就像标题一样,有谁知道如何计算每个区域的尺寸宽度到米,意味着在每个地方和任何缩放。

我找到了如何获得缩放比例。

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 对吗?

4

3 回答 3

8

您可以在此处找到公式的详细说明:将经度纬度转换为米

示例代码:

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

Mark Ransom的学分

于 2012-12-20T09:08:24.513 回答
7

这对我很有用。我的解决方案是在 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);
于 2015-04-14T18:16:06.607 回答
1

以经度米为单位的距离会随着纬度的增加而变化。当您离赤道越远时,相同的经度值会以米为单位变小。最好的方法可能是CLLocation在左中和右中创建两个 s,然后用于-distanceFromLocation:获取它们之间的距离(以米为单位)。

于 2012-12-20T11:56:54.730 回答