【问题标题】:Find nearby locations in a given region在给定区域中查找附近的位置
【发布时间】:2012-03-19 21:09:44
【问题描述】:

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

首先我尝试使用 Haversine 公式,但我所做的只是对最靠近地图中心的位置进行排序。但我想要位于地图某个区域的地点。还是我错了?

提前致谢。

【问题讨论】:

    标签: iphone ios geolocation mkmapview coordinates


    【解决方案1】:

    您可以通过访问区域属性从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;
    

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

    这是您的 MKMapViewMKCoordinateRegion 的文档。

    【讨论】:

      【解决方案2】:

      您是否要查找矩形区域中的所有地点?

      只需像这样设置您的查询:

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

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

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

      【讨论】:

      • 没错,我想要一个矩形区域中的所有地方。根据您的代码,如何从地图中获取最大最小值?
      【解决方案3】:

      我完全不知道这是否能解决您的问题,但SpatialLite 是一个第三方库,上面写着:

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

      查看函数列表有一个名为SQL functions that implement spatial operators的整个部分

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-28
        • 1970-01-01
        • 1970-01-01
        • 2011-04-24
        • 1970-01-01
        • 1970-01-01
        • 2018-08-13
        • 1970-01-01
        相关资源
        最近更新 更多