【问题标题】:How do you use MySQL spatial queries to find all records in X radius? [closed]如何使用 MySQL 空间查询查找 X 半径内的所有记录? [关闭]
【发布时间】:2011-03-13 15:39:42
【问题描述】:

我在 MySQL 数据库中有一个表,其中包含 POINT 类型的空间几何列。我希望能够在地图中心取一个点并找到它 X 英里(或任何距离)内的所有记录。我似乎找不到一个很好的例子或解释如何做到这一点,它不会深入到几何数学中。我很高兴走这条路,但首先想尝试使用真正的空间数据库来解决它。

【问题讨论】:

  • 只是想指出,不,我正在尝试使用具有数据点的多边形的技术(不那么精确,但现在只是尝试)来解决这个问题。我的查询看起来像这样。 SELECT * from business WHERE MBRContains(GeomFromText('Polygon((30 -100, 30 -90, 25 -90, 25 -100, 30 -100))'), geolocation) 我在表格中有一条记录,纬度为39 和 -94 的多头。据我了解,这应该出现在结果集中,但没有。所以这是问题的另一个角度。
  • 你做错了(或者只是复杂)。在 PHP 中使用github.com/anthonymartin/GeoLocation.php 计算边界框,然后像WHERE lat BETWEEN minL AND maxL AND lon BETWEEN minO AND maxO 一样查询。这是方形区域搜索而不是圆形,但您的网络地图无论如何都是矩形的,不是吗?

标签: mysql geospatial spatial-query


【解决方案1】:

它不会起作用,因为 MySQL 并没有真正实现代码来使它起作用。他们只使用边界框查询。

注意这里没有列出函数: http://dev.mysql.com/doc/refman/5.5/en/functions-for-testing-spatial-relations-between-geometric-objects.html

我会推荐使用 PostGIS 或 Spatialite。

【讨论】:

  • 从 MySQL 5.6.1 开始,这不再适用:dev.mysql.com/doc/refman/5.6/en/…。但我(还)不能证明这些功能的性能。
  • 同意 - MySQL 5.6.1 发生了变化,但我还没有测试过
  • 我看到该资源中列出了很多功能。你能澄清一下吗?
猜你喜欢
  • 2013-11-30
  • 2012-05-04
  • 1970-01-01
  • 2015-10-18
  • 2020-10-25
  • 2015-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多