使用MySQL Spatial Extension检查点是否在线串附近(不可信)

时间:2013-07-11 16:14:19

标签: mysql gis qgis

我必须发现给定点是否距离使用MySQL Spatial记录的数据库中存在的路线至少500米(ou其他距离)。

我发现在MySQL Spatial中没有类似的功能,并找到一个对我不起作用的先前答案,因为线路太大(超过300公里)要逐点检查这个解决方案: Find N Nearest LineString From A Point Using MySQL Spatial Extensions

我甚至无法创建缓冲区(具有给定半径的圆/多边形)来检查是否触摸均匀。


更新 - 12/7 我做到了,但MySQL Spatial它的接缝不可靠。 我创建了一个createBuffer函数,在给定Point周围创建一个20磅的Polygon,并给出半径为米的给定距离:http://pastebin.com/xEFb8ZXi

我正在使用QGis测试来自此缓冲区的给定结果,并且该函数的一切都很好(除了米到小数点数值生成的小于预期,但现在不是问题)。

并进行了一些相交检查,即使结果多边形不与线相交,也会返回true。 我只用中心点重新制作了相同的测试,结果是一样的。 我现在发现INTERSECT不会检查带有Point或Polygon的LineString,而是检查LineString的Bounding Box,当a指示在Linestring BBox外面的一个点时。

相交QUERY其中“rota”是Linestring数据:

 SELECT Intersects(rota, createBuffer(GeomFromText('POINT(-19.7736 -43.7255)'),500)) 
 FROM log_viagem WHERE rota IS NOT NULL;

我现在如何信任MySQL Spatial? 或者我关于INTERSECTS的概念是错误的?


解决: 我没有阅读5.5版MySQL的重要说明:

  

请注意   目前,MySQL没有根据规范实现这些功能。实现的那些返回与相应的基于MBR的函数相同的结果。

解决方案正在服务器管理员更新到5.6.1,注释中有升级

  

请注意   MySQL最初实现了这些功能,以便他们使用   对象边界矩形并返回与结果相同的结果   相应的基于MBR的功能。截至MySQL 5.6.1,对应   可以使用精确对象形状的版本。这些版本   以ST_前缀命名。例如,Contains()使用object   边界矩形,而ST_Contains()使用对象形状。

     

从MySQL 5.6.1开始,现有空间也有ST_别名   已经准确的功能。例如,ST_IsEmpty()是一个   IsEmpty()的别名

0 个答案:

没有答案