MariaDB:查找经纬度点的圆半径是否与多边形相交

时间:2018-10-25 16:53:21

标签: mariadb geo

我正在构建一个Google地图搜索项,据此可以指定位置和“半径”。然后,我试图获取半径搜索相交的定义区域(在我的数据库中定义为多边形)的结果。

我当前正在使用以下查询(为清晰起见,使用PHP代码):

$km = ($miles * 1.852) * 1000;
$sql = "SELECT * FROM Regions WHERE ST_Intersects(poly, ST_BUFFER(ST_GeomFromText('POINT({$lat} {$lng})'), {$km}))"

“区域”数据库由一个“多边形”多边形字段设置,该字段保存纬度和经度值的多边形数据。但是,从5英里半径内搜索时,我收到了数据库中的所有多边形。

我已经基于发现的其他一些松散的答案来查询,但是现在我可能在做错什么了。我在网上发现的大多数问题是在多边形或半径内找到特定的位置,但是在这里,我需要知道半径搜索是否与我创建的多边形相交。

任何帮助将不胜感激!谢谢。

1 个答案:

答案 0 :(得分:0)

对于遇到类似问题的任何人,我都会发现自己遇到的问题。

在数据库中存储“多边形”值时,必须提供“经度纬度”值,而我将其存储为另一种方式。我认为这是因为lng / lat是x / y格式。

然后我还使用了https://github.com/bcalik/php-circle-to-polygon处的类中的方法来生成圆形多边形。然后像这样使用它:

SELECT id FROM Regions WHERE ST_Intersects(poly, GEOMFROMTEXT('POLYGON((" . implode(",", $circle) . "))', 0))

$circle$longitude $latitude字符串值的数组。

ST_BUFFER方法可能仍然有效,但是现在我可以使用它了,我不再打算将其弄乱了:)