如何快速确定哪个经度和纬度范围一个点在

时间:2013-11-12 10:12:57

标签: algorithm sorting graph-algorithm

假设我有一些(lng,lat)坐标。我还有一个很大的范围列表,

[{northeast:{lng,lat},西南:{lng,lat}} ...]

如何最有效地确定(lng,lat)点进入哪个桶?

另外,从设计角度来看。对于某些数据库(例如mysql,monodb)或像memcached,redis这样的数据库,“范围列表”会更有意义吗?

谢谢。

3 个答案:

答案 0 :(得分:1)

您需要细分范围列表。你可以看一个四核。它类似于四叉树。它使用莫顿曲线。您可以非常快速地计算范围和点的四元组。但你也可以尝试一个矩形树。您也可以使用intervall树。

答案 1 :(得分:1)

SQL数据库可能是一个很好的答案。如果您想象一个像(bucketId, latNe, longNe, latSw, longSw)这样的表,并且在所有纬度/长列上都有索引,那么您可以通过使用所需的纬度/经度坐标准备和执行SELECT bucketId FROM bucketTable WHERE latNe > ? AND longNe < ? AND latSe < ? AND longSe > ?之类的查询来非常有效地获得答案。

答案 2 :(得分:0)

R-Tree是为此类事物设计的数据结构。 Boost包含它的实现。和CGAL一样。大多数现代databases本身也支持这种事情。