maps应用程序 - 在MongoDB中存储坐标的最佳方法

时间:2013-07-25 14:56:50

标签: mongodb google-maps geolocation

我正在制作地图应用程序。我有一堆地点的坐标。我想返回屏幕上可见区域内的所有点。这是通过google maps api完成的。它为您提供屏幕上可见的地图的东北和西南坐标。我正在使用MongoDb。

显而易见的方法是将ne-sw对角线的中点作为中心,将其与任一角的距离作为半径,并找到该半径内的所有点。

但是将它们存储在单个列表中将是O(n)操作 - 对于每个请求都不可扩展。什么是更好的存储方式,以便能够迅速获得积分?

我正在考虑将它们拆分为包含半径(r)内所有点的存储桶,并维护一个已排序的存储桶列表。由于屏幕最多可以在4个桶上(单独桶上的每个角落),我在O(1)中找到O(log n)中最接近的桶和接下来的3个桶(O)。现在我只需要为这4个桶进行计算。

但那仍然是很多桶! Google可以很快地在地图上渲染点数。而且他们有很多分。还有很多用户。他们如何管理?我不希望达到这种优化水平,但必须有一个更好的数据结构。

1 个答案:

答案 0 :(得分:0)

也许我不理解......你的解决方案听起来很复杂..

你有屏幕角落 - NE Long和Lat以及SW Long和Lat 因此你有SW_Lat,SW_long,NE_lat,SW_Lat

您想要选择此边界内的点数... 如果你有你的长期& lat存储为十进制使用伪代码:

Select * from points 
where point_lat > SW_lat 
and point_lat < NE_lat
and point_long > SW_long
and point_long < NE_long

这将填满可见屏幕。