MySQL-查看半径是否与多边形相交



我有一个"areas"表,该表中有一个名为polygon的字段,用于定义该区域。以下是多边形中的数据示例

(51.562537549259275, -0.18651649218749844),(51.56518165749251, -0.1497333723210481),(51.55111270638887, -0.10924630850248862),(51.568708395618486, -0.12155901469758534),(51.51636175962405, -0.07797281013359303),(51.46339366897244, -0.1081939612190741),(51.45202948056895, -0.13394078643432783),(51.44657087249458, -0.14909693896627108),(51.43333085349518, -0.18476873548843198),(51.42143028245271, -0.16866370898437344),(51.42048689213698, -0.2246564608006274),(51.410609105933894, -0.2541484477524758),(51.38180048734274, -0.31050333075316905),(51.38632646897756, -0.3486097751090478),(51.4462317250533, -0.39531041838200887),(51.482412594272446, -0.33524472163053654),(51.49386310130167, -0.31459844345063326),(51.57115695855739, -0.25625859642894877),

这个多边形是在谷歌地图中创建的,如果将这些数据更改为不同的数据会有所帮助,我可以做到,我不会拘泥于这种数据格式。

在前端,客户端通过选择要搜索的位置(给出纬度和经度(和半径来进行搜索。

MySQL中有没有办法查看这两件事是否相交?非常感谢您的帮助。

对于任何有此问题的人,我都找到了解决方案。

正如在最初的帖子中提到的,我有一个名为polygon的字段,它以同样显示的格式保存了多边形。我创建了一个名为enc_polygon的polygon类型的新字段,并编写了PHP在插入和更新时将多边形转换为enc_poligon。我不会显示这个,因为人们不太可能以我使用的相同格式保存!

值得一提的是,POLYGON数据库字段要想工作,第一个和最后一个坐标必须相同,才能关闭它,而对于谷歌地图来说,则不然。

现在我在数据库中有了多边形,我可以做这个

SELECT *
FROM   AREAS
WHERE ......
AND   ST_Within(ST_PointFromText('POINT($latitude $longitude)'), ST_Buffer(enc_polygon, 0.008983157 * $distance )) = 1

纬度和经度不在数据库中,所以我需要将它们转换为一个点,这是使用ST_PointFromText。

页面上还输入了用户愿意行驶的距离,单位为公里。因此,我使用ST_Buffer函数在整个多边形周围放置一个输入距离的缓冲区。

ST_Wwithin是非常明显的,但如果点在缓冲多边形内,它基本上返回1。

最新更新