如何在iOS中计算地理边界框?

8
我希望在iOS中进行地理边界框计算。
输入参数: 当前位置(示例:41.145495, −73.994901) 半径(示例:2000米)
需要输出的结果: 最小经度(示例:41.9995495) 最小纬度(示例:−74.004901) 最大经度(示例:41.0005495) 最大纬度(示例:−73.004901)
要求:无需进行网络调用。 有什么想法吗?Mapkit/CoreLocation似乎没有这种类型的功能? 是否有其他地理SDK可供使用? 谢谢。
2个回答

5
我认为您可以使用标准的MapKit函数:MKCoordinateRegionMakeWithDistance,它将返回一个MKCoordinateRegion,实际上只是一个中心点(纬度、经度)和纬度和经度方向上跨度的度数。从纬度和经度分别加/减跨度的一半,即可得到所需的值。
CLLocationCoordinate2D centerCoord = CLLocationCoordinate2DMake(41.145495, −73.994901);
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(centerCoord, 2000, 2000);

double latMin = region.center.latitude - .5 * startRegion.span.latitudeDelta;
double latMax = region.center.latitude + .5 * startRegion.span.latitudeDelta;
double lonMin = region.center.longitude - .5 * startRegion.span.longitudeDelta;
double lonMax = region.center.longitude + .5 * startRegion.span.longitudeDelta;

顺便说一下:这仅代表小跨度的经度,大约为几公里。关于引用苹果公司:

latitudeDelta
用于跨度的南北距离(以度为单位)。与经度距离不同,它基于纬度变化,一度纬度在任何时候都大约相当于111公里(69英里)。

longitudeDelta
用于跨度的东西距离(以度为单位)。经度范围所跨越的公里数取决于当前纬度。例如,一度经度在赤道处跨越大约111公里(69英里),但在极点处缩小至0公里。


当您的视口重叠0经度标记时,这可能会有些问题。 - James Billingham
2
以上计算中,startRegion 的值是多少? - Crazy Developer
@JamesBillingham 或 ±180 经度 ±90 纬度标记 - wyu
2
startRegion 声明在哪里? - Charlton Provatas

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接