查找特定地区的附近位置

时间:2012-03-19 21:09:44

标签: iphone ios geolocation mkmapview coordinates

我在SQLite数据库中有一个包含4,000个位置的表,包括纬度和经度。根据 MKCoordinateRegion 类提供的地区信息,如何从地图中获取位于此区域的地点?可能吗?

首先我尝试使用 Haversine公式,但我所做的只是对距离地图中心最近的地方进行排序。但我想要位于地图区域的地方。或者我错了吗?

提前致谢。

3 个答案:

答案 0 :(得分:4)

您可以通过访问区域属性从MKMapView获取纬度和经度的最大/最小值:

MKCoordinateRegion *mapRegion = myMap.region;

然后,您可以按如下方式访问最大值和最小值:

maxLatitude = mapRegion.center.latitude + mapRegion.span.latitudeDelta/2;
minLatitude = mapRegion.center.latitude - mapRegion.span.latitudeDelta/2;

maxLongitude = mapRegion.center.longitude+ mapRegion.span.longitudeDelta/2;
minLongitude = mapRegion.center.longitude- mapRegion.span.longitudeDelta/2;

希望这有帮助!如果您将数据存储在核心数据,NSSetNSArray中,则可以使用NSPredicate过滤掉符合上述条件的结果。

以下是MKMapViewMKCoordinateRegion的文档。

答案 1 :(得分:1)

您是否试图找到矩形区域中的所有位置?

只需设置您的查询:

find all locations where latitude > mapMinLat
                     and latitude < mapMaxLat
                     and longitude > mapMinLon
                     and longitude < mapMaxLon

地图的边缘是mapMinLat,mapMaxLat,mapMinLon,mapMaxLon。

如果您正在寻找多边形区域,则需要使用更高级的算法。

答案 2 :(得分:0)

我完全不知道这是否能解决您的问题,但SpatialLite是第三方图书馆说:

  

SpatiaLite是一个用于扩展SQLite的开源库   核心,以支持完全成熟的Spatial SQL功能。

查看函数列表,有一个名为SQL functions that implement spatial operators

的整个部分

滚动自己的sqlite代码已在SO上多次回答,例如Compiling custom SQLite for an iPhone app