小编典典

在MySQL中获取接近纬度的多边形

mysql

有谁知道一种从点到给定距离内获取MySQL数据库中所有多边形的方法?实际距离不是那么重要,因为它是稍后为找到的每个多边形计算的,但是对“接近”的多边形进行该计算将是一个巨大的优化。

我已经看过MBR并包含函数,但是问题是某些多边形不包含在围绕该点绘制的边界框中,因为它们很大,但是它们的某些顶点仍然很接近。

有什么建议么?


阅读 241

收藏
2020-05-17

共1个答案

小编典典

慢速版本(无空间索引):

SELECT  *
FROM    mytable
WHERE   MBRIntersects(mypolygon, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))

要使用空间索引,您需要对表格进行非规范化,以便将每个多边形顶点存储在其自己的记录中。

然后SPATIAL INDEX在包含顶点坐标的字段上创建,然后发出以下查询:

SELECT  DISTINCT polygon_id
FROM    vertices
WHERE   MBRContains(vertex, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))

如果您将UTM坐标存储在数据库中而不是纬度和经度,那么事情会容易得多。

2020-05-17