【发布时间】:2015-01-08 08:49:31
【问题描述】:
我正在寻找一种快速的方法来搜索距另一个给定点一定距离内的点。我有一个 MyISAM 表,其中点空间索引表示地理位置(纬度、经度)。
如果 MySQL 支持它,我认为 ST_DWithin 会完成这项工作。但事实并非如此,所以我得到了以下表达式,它使用缓冲区生成一个圆圈,然后查找落在这个圆圈内的点:
ST_Within(geopoint, ST_Buffer(Point(@lat, @lng), @radius))
它似乎工作正常,我相信它使用索引。但这是一个足够好的解决方案吗?出于地理目的,ST_Within 和 ST_Buffer 的精确度如何?
更新: 我的结论是 MySQL 不提供对地理坐标的支持,并且所有操作都在欧几里得平面上完成(即使您指定了 SRID)。根据位置的不同,这最终会导致很大的不精确性。所以在使用 MySQL Spatial 函数之前需要对坐标进行转换。
【问题讨论】:
-
如果您正在做很多空间/地理方面的工作,从长远来看升级到 Postgres/PostGIS 可能是一个更好的选择(而不是每次发现缺少的功能时都创建一个解决方法)。跨度>