ios - 在边界框内查询经/纬度的数据库/文件?谷歌地图

标签 ios arrays json swift google-maps

我有一个 JSON 文件,其中包含 30k+ 个带有经/纬度的对象。

我可以通过以下方式获取可见框架的四个角:

   let visibleRegion = mapView.projection.visibleRegion()
   let bounds = GMSCoordinateBounds(region: visibleRegion)
   var aNord   =   bounds.northEast.latitude
   var aEst    =   bounds.northEast.longitude
   var aSud    =   bounds.southWest.latitude
   var aOvest  =   bounds.southWest.longitude

本地图空闲时,我需要通过我的 JSON(当前存储在本地并最终将在数据库中)执行搜索并仅返回 lon/lat 值落在这些范围内的对象,所以我可以为他们创建标记。我不想一次加载所有 30k 标记,这是我的解决方案。

我意识到伪逻辑是:

   for post in JSON {

    if post.lat <= aNord && post.lat >= aSud && post.long >= aOvest && post.long <= aEst{
        //within the box
    }
}

每次用户 map 停止时,我通过30k JSON对象进行查询并拉回范围内的对象是否真的合理?有没有一种有效的方法来实现这一点,这是这样做的正确逻辑吗?

最佳答案

我建议您将 30k+ 数据分成代表特定区域的小块(json 文件)。例如,将30k数据分成30段,每段平均包含1000个位置,每段代表一个矩形区域。

每次用户 map 停止时,您只需要检查哪些段与可见区域重叠并仅搜索这些段的经纬度。

最初,您可以将所有片段存储到云服务器/数据库中,并根据需要将它们下载到本地文件系统。

PS:如果用户缩小到最低级别,您的所有片段都将在可见区域内,您必须下载所有片段。这将是最坏的情况,并且具有与暴力破解 30k+ 数据相同的复杂性,对于所有其他情况,这种方法将节省一些时间。

关于ios - 在边界框内查询经/纬度的数据库/文件?谷歌地图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51221931/

相关文章:

javascript - 为什么 Google Closure Compiler 重命名对象的属性名称?

ios - 滚动或重新加载表格 View 后查看位置变化

iphone - iPhone 应用程序中的 OAuth 集成

c - 如何在 C 中表示具有百万个顶点的图?

c++ - 使用顶点数组、四边形数组创建四边形网格

javascript - 如何高效地搜索 JSON 数组

ios - Xcode 5关闭图标光泽效果的方法

ios - 覆盖 UIView 的 Storyboard高度和宽度

android - 无法使用 Volley 显示两个自定义 ListView

json - 如何检查发布请求中的json.body中是否存在空值