MySQL:简单的地理/空间查询

时间:2012-02-02 00:33:45

标签: mysql geocoding

我一直在研究如何最好地从MySQL数据库中检索位置数据的子集。这个答案与许多希望引导的文章有关,但没有一个提供任何具体的,简单的例子:

Database: Best performance way to query geo location data?


假设我有一个带有表PLACES的数据库。地方可能有数​​百万条款。每行都有列类型LAT,LON和NAME。

我想从以下半伪代码中形成一个函数语句:

Select * from PLACES where distance((LAT, LON), (givenLat, givenLon)) < 100 meters;
return *[NAME];

这很简单,但是虽然我已广泛使用MySQL,但我以前从未使用过空间扩展。我愿意与他们合作但我也愿意编写自定义函数,如果这样会更快。上面的查询实际上是我需要生成的。除了文档之外的任何指示都会非常有用,谢谢。

2 个答案:

答案 0 :(得分:0)

虽然我不掌握mysql地理空间扩展,但我建议你阅读这个演示文稿http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL,因为它包含了一个有趣的地理距离函数提议,我一直使用得非常令人满意。

SELECT destination.*,
3956 * 2 * ASIN(SQRT( POWER(SIN((orig.lat - dest.lat) *  pi()/180 / 2), 2) +COS(orig.lat * pi()/180) * COS(dest.lat * pi()/180) * POWER(SIN((orig.lon -dest.lon) * pi()/180 / 2), 2) ))
asdistanceFROM users destination, users originWHERE origin.id=userid
and destination.longitudebetween lon1 and lon2 and destination.latitudebetween lat1 and lat2 

答案 1 :(得分:0)

谢尔盖·本纳(Sergey Benner)对此答案表示赞赏(我只是想结束这个问题)。他的上述评论链接到该主题的几个杰出的和功能资源。如果你在iOS上工作,我也发现这个资源非常有用:

http://www.thismuchiknow.co.uk/?p=71