我在SQLite数据库中有一个包含4,000个位置的表,包括纬度和经度。根据 MKCoordinateRegion 类提供的地区信息,如何从地图中获取位于此区域的地点?可能吗?
首先我尝试使用 Haversine公式,但我所做的只是对距离地图中心最近的地方进行排序。但我想要位于地图区域的地方。或者我错了吗?
提前致谢。
答案 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;
希望这有帮助!如果您将数据存储在核心数据,NSSet
或NSArray
中,则可以使用NSPredicate
过滤掉符合上述条件的结果。
以下是MKMapView
和MKCoordinateRegion
的文档。
答案 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