【问题标题】:MySQL: simple geo/spacial queryMySQL:简单的地理/空间查询
【发布时间】:2012-02-24 16:57:21
【问题描述】:

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

Database: Best performance way to query geo location data?


假设我有一个带有 PLACES 表的数据库。 PLACES 中可能有数百万个条目。每行都有列类型 LAT、LON 和 NAME。

我想用下面的半伪代码组成一个函数式语句:

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

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

【问题讨论】:

标签: mysql geocoding


【解决方案1】:

虽然我不精通 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 

【讨论】:

    【解决方案2】:

    Sergey Benner 的回答值得称赞(我只是想结束这个问题)。他在上面的评论链接到关于该主题的几个优秀和功能资源。如果你在 iOS 上工作,我还发现这个资源非常有用:

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

    【讨论】:

      猜你喜欢
      • 2018-04-06
      • 2015-06-07
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 2019-09-23
      • 1970-01-01
      相关资源
      最近更新 更多