繁体   English   中英

mysql GIS(多边形内点和点附近)

[英]mysql GIS (point within polygon and near by points)

我已经看到了这个问题: 看看lat / long是否属于使用mysql的多边形

这表明mysql GIS扩展尚未完全实现。 有人可以为我清除这个 - 这是否意味着如果我存储了一个多边形并想要检测一个点是否落在某个多边形内,它将不会100%准确? 如果是这样,它会有多准确?

此外,这需要的SQL,在我的头顶,它将是这样的东西:

SELECT * WHERE WITHIN(POINT(_LAT_ _LONG_), `polygon`)

(其中polygon是一个表列,并且该点是根据给定的lat和long值构造的。)

如果精度足够,你会如何找到接近给定Lat和Long的点? 关于使用COS / SQRT或内置DISTANCE功能有不同的意见,这是最好的和/或最好的方法吗?

实质上:

  • mySQL GIS扩展是否适用于检测点是否在多边形内(必须相当准确,多边形不是定义的形状或大小)。
  • 如果是,那么检测这个的最佳方法是什么,另外想要的是找到给定Lat和Long附近的点的最佳方法

根据文档 ,除Distance()和Related()之外的所有函数仅测试MBR关系。

目前,MySQL没有根据规范实现这些功能。 实现的那些返回与相应的基于MBR的函数相同的结果。 这包括除Distance()和Related()之外的以下列表中的函数。

不可能说MBR测试的准确性是否足够,因为这很大程度上取决于多边形的形状。

“mySQL GIS扩展是否适用于检测点是否在多边形内(必须相当准确,多边形不是定义的形状或大小)?”

没有。

如果可以,请使用PostGIS。

替代方案可以是针对多边形点问题实现Ray Casting算法

它似乎完全在MySQL5.6.1及更高版本( Docs )中实现。

MySQL最初实现了这些函数,使得它们使用对象边界矩形并返回与相应的基于MBR的函数相同的结果。 从MySQL 5.6.1开始,可以使用相应的版本来使用精确的对象形状。 这些版本以ST_前缀命名。 例如,Contains()使用对象边界矩形,而ST_Contains()使用对象形状。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM