gpt4 book ai didi

objective-c - MKCoordinateRegion 中心和边界之间的距离

转载 作者:搜寻专家 更新时间:2023-10-30 19:44:51 25 4
gpt4 key购买 nike

(根据评论修改问题:)

好的,我会尝试以其他方式询问......我怎样才能得到这个圆覆盖的边界坐标:

enter image description here


(原题:)

我的 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 英里。

截图:

enter image description here

为什么会有这样的差异?当我尝试做同样的事情但来自不同的中心坐标(东京,纽约)时,结果是正确的 10 英里。

谢谢回复

最佳答案

(根据评论修改答案:)

如果你的意思是你想要那个圆形叠加层的边界矩形的坐标,请使用叠加层的 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);


(原始答案:)

首先,当您在 map View 上调用 setRegion 时, map View 几乎总是会修改您请求的区域以使其适合 map View 。此调整基于 map View 的形状以及它是否可以在其固定缩放级别之一正确显示请求的跨度。

例如,如果您的 map View 不是方形的,并且您要求两个方向的跨度均为 10 英里,则至少有一个跨度肯定会被调整。即使您要求根据 View 的比例设置的跨度,如果 map View 无法在该缩放级别显示图 block (或者如果您没有采用地球的考虑曲率)。

接下来,latitudeDeltalongitudeDelta 定义区域的整个高度和宽度(不是到中心坐标的距离)。

因此您在屏幕截图中的测试无法与跨度增量进行比较。在屏幕截图中,您正在计算从中心坐标到最小纬度和经度(左下角)的距离,但跨度增量从右到左、从下到上一直延伸。 (正因为如此,你会认为从中心到角落的距离应该小于 delta——而不是更多。它更短,但由于上述原因,delta 也增加到 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];

关于objective-c - MKCoordinateRegion 中心和边界之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8275605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com