每当用户放大或缩小地图时,我都需要知道地图上当前表示了多少米(宽度或高度).
我需要的是MKCoordinateRegionMakeWithDistance的反函数来计算当前地图范围所代表的距离.
我尝试了以下代码但是我得到了错误的结果:
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {
MKMapRect mRect = self.map.visibleMapRect;
MKMapPoint northMapPoint = MKMapPointMake(MKMapRectGetMidX(mRect), MKMapRectGetMinY(mRect));
MKMapPoint southMapPoint = MKMapPointMake(MKMapRectGetMidX(mRect), MKMapRectGetMaxY(mRect));
self.currentDist = MKMetersBetweenMapPoints(northMapPoint, southMapPoint);
}
Run Code Online (Sandbox Code Playgroud)
如果我将地图区域设置为1500米,那么我得到1800这样的结果.
谢谢你的帮助,文森特
vda*_*bry 41
实际上这是一个非常愚蠢的错误,如果我沿X轴进行相同的操作,那么我得到正确的值:
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {
MKMapRect mRect = self.map.visibleMapRect;
MKMapPoint eastMapPoint = MKMapPointMake(MKMapRectGetMinX(mRect), MKMapRectGetMidY(mRect));
MKMapPoint westMapPoint = MKMapPointMake(MKMapRectGetMaxX(mRect), MKMapRectGetMidY(mRect));
self.currentDist = MKMetersBetweenMapPoints(eastMapPoint, westMapPoint);
}
Run Code Online (Sandbox Code Playgroud)
joh*_*ope 17
- (void)mapView:(MKMapView *)map regionDidChangeAnimated:(BOOL)animated {
MKCoordinateSpan span = mapView.region.span;
NSLog(@" 1 = ~111 km -> %f = ~ %f km ",span.latitudeDelta,span.latitudeDelta*111);
}
Run Code Online (Sandbox Code Playgroud)
latitudeDelta
要在地图上显示的南北距离(以度为单位)的数量.与纵向距离不同,纵向距离根据纬度而变化,一个纬度总是大约111公里(69英里).