如何使用MySQL空间查询来查找所有X半径内的记录?

5

我在MySQL数据库中有一个带有空间几何列(类型为POINT)的表。 我想能够获取地图中心处的点,并找出距离它X英里(或其他距离)以内的所有记录。我似乎找不到一个好的示例或解释如何做到这一点,而不会涉及复杂的几何数学。我很乐意采用这种方法,但首先想尝试使用真正的空间数据库来解决问题。


只是想指出,目前我正在尝试使用一个带有数据点的多边形技术(虽然不太精确,但现在只是尝试)来解决这个问题。我的查询看起来像这样。SELECT * from business WHERE MBRContains(GeomFromText('Polygon((30 -100, 30 -90, 25 -90, 25 -100, 30 -100))'), geolocation)我在表格中有一条纬度为39、经度为-94的记录。据我了解,这应该出现在结果集中,但实际上没有。所以这是问题的另一个角度。 - Preston Crawford
你做错了(或者只是太复杂了)。使用 https://github.com/anthonymartin/GeoLocation.php 在 PHP 中计算边界框,然后像这样查询 WHERE lat BETWEEN minL AND maxL AND lon BETWEEN minO AND maxO。这是一个正方形区域搜索,而不是圆形的,但是你的 Web 地图本来就是矩形的,不是吗? - Slawa
1个回答

4

3
自 MySQL 5.6.1 起,这已不再是事实:http://dev.mysql.com/doc/refman/5.6/en/functions-for-testing-spatial-relations-between-geometric-objects.html#function_st-contains。但我目前无法证明这些函数的性能如何。 - Ben Regenspan
同意 - MySQL 5.6.1 的情况已经发生了变化,但我也还没有测试过。 - TheSteve0
1
我在那个资源中看到了大量的函数列表。你能澄清一下吗? - Travis Webb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接