有谁知道一种从点到给定距离内获取MySQL数据库中所有多边形的方法?实际距离不是那么重要,因为它是稍后为找到的每个多边形计算的,但是对“接近”的多边形进行该计算将是一个巨大的优化。
我已经看过MBR并包含函数,但是问题是某些多边形不包含在围绕该点绘制的边界框中,因为它们很大,但是它们的某些顶点仍然很接近。
有什么建议么?
慢速版本(无空间索引):
SELECT * FROM mytable WHERE MBRIntersects(mypolygon, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))
要使用空间索引,您需要对表格进行非规范化,以便将每个多边形顶点存储在其自己的记录中。
然后SPATIAL INDEX在包含顶点坐标的字段上创建,然后发出以下查询:
SPATIAL INDEX
SELECT DISTINCT polygon_id FROM vertices WHERE MBRContains(vertex, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))
如果您将UTM坐标存储在数据库中而不是纬度和经度,那么事情会容易得多。
UTM