我正在构建一个Google地图搜索项,据此可以指定位置和“半径”。然后,我试图获取半径搜索相交的定义区域(在我的数据库中定义为多边形)的结果。
我当前正在使用以下查询(为清晰起见,使用PHP代码):
$km = ($miles * 1.852) * 1000;
$sql = "SELECT * FROM Regions WHERE ST_Intersects(poly, ST_BUFFER(ST_GeomFromText('POINT({$lat} {$lng})'), {$km}))"
“区域”数据库由一个“多边形”多边形字段设置,该字段保存纬度和经度值的多边形数据。但是,从5英里半径内搜索时,我收到了数据库中的所有多边形。
我已经基于发现的其他一些松散的答案来查询,但是现在我可能在做错什么了。我在网上发现的大多数问题是在多边形或半径内找到特定的位置,但是在这里,我需要知道半径搜索是否与我创建的多边形相交。
任何帮助将不胜感激!谢谢。
答案 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方法可能仍然有效,但是现在我可以使用它了,我不再打算将其弄乱了:)