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

问题描述 投票:-1回答:1

我有一个“区域”表,在该表中有一个称为多边形的字段,用于定义该区域。这是多边形中数据的示例

(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),

此多边形是在Google Maps中创建的,如果将此数据更改为其他内容会有所帮助,我可以做到,我不会被这种数据格式所困扰。

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

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

mysql google-maps polygon
1个回答
0
投票

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

如第一篇文章中提到的,我有一个称为多边形的字段,它以同样显示的格式保存多边形。我创建了一个名为POLYGON类型的名为enc_polygon的新字段,并编写了PHP以在插入和更新时将多边形转换为enc_polygon。我不会显示此信息,因为人们不太可能以我使用的相同格式进行保存!

值得一提的是,要使POLYGON数据库字段起作用,要关闭它,第一个和最后一个坐标必须相同,对于Google地图,它不需要。

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

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_Within很明显,但是如果该点在缓冲的多边形内,则基本上返回1。

© www.soinside.com 2019 - 2024. All rights reserved.