地图应用程序 - 在 MongoDB 中存储坐标的最佳方式
Posted
技术标签:
【中文标题】地图应用程序 - 在 MongoDB 中存储坐标的最佳方式【英文标题】:maps application - best way to store co-ordinates in MongoDB 【发布时间】:2013-07-25 14:56:50 【问题描述】:我正在制作地图应用程序。我有一堆位置的坐标。我想返回屏幕上可见区域内的所有点。这是通过谷歌地图 api 完成的。它为您提供屏幕上可见的地图的东北和西南坐标。我正在使用 MongoDb。
明显的方法是以ne-sw对角线的中点为中心,到任意一个角的距离为半径,找到该半径内的所有点。
但是将它们存储在单个列表中将是一个 O(n) 操作 - 无法针对每个请求进行扩展。存储它们以便能够快速获得积分的更好方法是什么?
我正在考虑将它们拆分为包含半径(r)内所有点的存储桶,并改为维护存储桶的排序列表。由于屏幕最多可以在 4 个桶上(每个角落在一个单独的桶上),我在 O(log n) 中找到最近的桶,在 O(1) 中找到接下来的 3 个最近的桶。现在我只需要对这 4 个存储桶进行计算。
但这仍然是很多桶!谷歌能够非常快速地在地图上渲染点。他们有很多点。还有很多用户。他们是如何管理的?我不希望达到那种优化水平,但必须有更好的数据结构。
【问题讨论】:
docs.mongodb.org/manual/applications/geospatial-indexes 【参考方案1】:也许我不明白......你的解决方案听起来很复杂..
您有屏幕角 - NE Long 和 Lat 以及 SW Long 和 Lat 因此你有 SW_Lat, SW_long, NE_lat, SW_Lat
您要选择此边界内的点... 如果您将 long 和 lat 存储为十进制,请使用以下伪代码:
Select * from points
where point_lat > SW_lat
and point_lat < NE_lat
and point_long > SW_long
and point_long < NE_long
这将填满可见屏幕。
【讨论】:
以上是关于地图应用程序 - 在 MongoDB 中存储坐标的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章