(根据评论修改的问题:)
好的,我会尝试以其他方式询问……如何获得此圆形叠加的边框坐标:
(原始问题:)
我的iPhone应用程序遇到了奇怪的问题.我有MKCoordinateRegion,中心坐标纬度:51.509980,经度:-0.133700.我使用方法MKCoordinateRegionMakeWithDistance并将距离设置为16,093.44米(10英里).
我想得到这个区域的边界点因此我有这个代码:
MKCoordinateRegion region2 = self.myMapView.region;
float minLat = region2.center.latitude - (region2.span.latitudeDelta / 2.0);
float maxLat = region2.center.latitude + (region2.span.latitudeDelta / 2.0);
float minLong = region2.center.longitude - (region2.span.longitudeDelta / 2.0);
float maxLong = region2.center.longitude + (region2.span.longitudeDelta / 2.0);
我找到了这个网站,我的测试http://boulter.com/gps/distance/计算了两个坐标之间的距离.当我作为FROM坐标输入时:51.509980和经度:-0.133700(伦敦)和TO坐标:
2011-11-26 01:15:42.830 NearMeTest[3911:11603] MinLAT 51.334381 and MaxLAT 51.684814
2011-11-26 01:15:42.830 NearMeTest[3911:11603] MinLONG -0.352936 and MaxLONG 0.086517
我知道这两个坐标之间的距离是15.40英里而不是预期的10英里.
截图:
为何如此不同?当我尝试从不同的中心坐标(东京,纽约)做同样的事情时,结果是正确的10英里.
谢谢你的答复
最佳答案 (根据评论修改的答案:)
如果您的意思是想要该圆形覆盖的边界矩形的坐标,请使用overlay的boundingMapRect属性:
//"theCircle" is the MKCircle overlay object
CLLocationCoordinate2D topLeftCoord =
MKCoordinateForMapPoint(theCircle.boundingMapRect.origin);
MKMapPoint bottomRightMapPoint = MKMapPointMake (
MKMapRectGetMaxX(theCircle.boundingMapRect),
MKMapRectGetMaxY(theCircle.boundingMapRect));
CLLocationCoordinate2D bottomRightCoord =
MKCoordinateForMapPoint(bottomRightMapPoint);
(原始答案:)
首先,当您在地图视图上调用setRegion时,地图视图几乎总是会修改您请求的区域,以使其适合地图视图.此调整基于地图视图的形状以及是否可以在其固定缩放级别之一正确显示请求的范围.
例如,如果您的地图视图不是正方形,并且您要求两个方向的跨度为10英里,则至少有一个跨度肯定会被调整.即使您要求根据视图的比例设置的跨度,如果地图视图无法在该缩放级别显示切片(或者如果您没有采用地球的考虑到曲率).
接下来,latitudeDelta和longitudeDelta定义区域的整个高度和宽度(不是距中心坐标的距离).
因此,屏幕截图中的测试无法与跨度增量进行比较.在屏幕截图中,您正在计算从中心坐标到最小纬度和经度(左下角)的距离,但是跨度增量从右到左,从下到上一直进行. (因此,你认为从中心到角落的距离应该小于增量 – 而不是更多.由于上述原因,它更短但是增量也增加到10以上.)
最后,要获得角坐标(左下角和右上角),这可能是一种更准确的方法:
CLLocationCoordinate2D bottomLeftCoord =
[myMapView convertPoint:CGPointMake(0, myMapView.frame.size.height)
toCoordinateFromView:myMapView];
CLLocationCoordinate2D topRightCoord =
[myMapView convertPoint:CGPointMake(myMapView.frame.size.width, 0)
toCoordinateFromView:myMapView];