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

Gre*_*ren 7 mysql point distance polygon

有没有人知道在一个点的给定距离内获取MySQL数据库中的所有多边形的方法?实际距离并不重要,因为它是为以后找到的每个多边形计算的,但对于"接近"的多边形进行计算将是一个巨大的优化.

我看过MBR并且包含函数,但问题是一些多边形不包含在点周围绘制的边界框内,因为它们非常大,但是它们的一些顶点仍然很接近.

有什么建议?

Qua*_*noi 4

慢速版本(没有空间索引):

SELECT  *
FROM    mytable
WHERE   MBRIntersects(mypolygon, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))
Run Code Online (Sandbox Code Playgroud)

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

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

SELECT  DISTINCT polygon_id
FROM    vertices
WHERE   MBRContains(vertex, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))
Run Code Online (Sandbox Code Playgroud)

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

  • @ShaishavJogani:“@distance”是一个变量,它保存您正在搜索的距离。它可以以英里、公里或米为单位,或任何其他距离单位,前提是您以相同的单位存储坐标。 (2认同)