我见过这个问题:See if lat / long falls within a polygon using mysql
其中说明mysql GIS扩展尚未完全实现。有人可以为我清除这个 - 这是否意味着如果我存储了一个多边形并想要检测一个点是否落在某个多边形内,它将不会100%准确?如果是这样,它会有多准确?
此外,我所需要的SQL,在我的头脑中,它将是:
SELECT * WHERE WITHIN(POINT(_LAT_ _LONG_), `polygon`)
(其中,多边形是一个表格列,点是根据给定的纬度和长值构建的。)
如果准确度足够,您如何找到接近给定Lat和Long的点?关于使用COS / SQRT或内置DISTANCE功能有不同的意见,这是最好的和/或最好的方法吗?
本质:
答案 0 :(得分:3)
根据docs,除Distance()和Related()之外的所有函数仅测试MBR关系。
目前,MySQL没有根据规范实现这些功能。实现的那些返回与相应的基于MBR的函数相同的结果。这包括除Distance()和Related()之外的以下列表中的函数。
不可能说MBR测试的准确性是否足够,因为这很大程度上取决于多边形的形状。
“mySQL GIS扩展是否可用于检测点是否在多边形内(必须相当准确,多边形不是定义的形状或大小)?”
否强>
如果可以,请使用PostGIS。
另一种方法是实施Ray Casting algorithm for the Point-in-Polygon problem。
答案 1 :(得分:0)
似乎它已在MySQL5.6.1及更高版本(Docs)中完全实现。
MySQL最初实现了这些功能,以便他们使用 对象边界矩形并返回与结果相同的结果 相应的基于MBR的功能。 从MySQL 5.6.1开始,对应 可以使用精确对象形状的版本。这些版本 以ST_前缀命名。例如,Contains()使用object 边界矩形,而ST_Contains()使用对象形状。