在边界框中查询 lon/lat 的数据库/文件?谷歌地图
Posted
技术标签:
【中文标题】在边界框中查询 lon/lat 的数据库/文件?谷歌地图【英文标题】:Query a database/file for lon/lat within a bounding box? Google Maps 【发布时间】:2018-07-07 09:47:32 【问题描述】:我有一个 JSON 文件,其中包含 30k+ 个具有 lon/lat 的对象。
我可以通过以下方式获得可见框架的四个角:
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
每次用户的地图停止时,我通过 30k JSON 对象进行查询并拉回范围内的对象,这真的合理吗?有没有一种有效的方法来实现这一点,这是正确的逻辑吗?
【问题讨论】:
【参考方案1】:我建议您将 30k+ 数据分成代表特定区域的小块(json 文件)。例如,将 30k 数据分成 30 个段,每个段平均包含 1000 个位置,每个段代表一个矩形区域。
每次用户地图停止时,您只需要检查哪些段与可见区域重叠并仅搜索这些段的经纬度。
最初,您可以将所有片段存储到云服务器/数据库中,并根据需要将它们下载到本地文件系统。
PS:如果用户缩小到最低级别,您的所有片段都将在可见区域内,您必须下载所有片段。这将是最坏的情况,并且与暴力破解 30k+ 数据具有相同的复杂性,对于所有其他情况,这种方法将节省一些时间。
【讨论】:
以上是关于在边界框中查询 lon/lat 的数据库/文件?谷歌地图的主要内容,如果未能解决你的问题,请参考以下文章
如何从 terra SpatRaster 构建 lon、lat、值数据框