我试着测试一条线是否与一个点在一定距离上相遇。St_distance正好给了我想要的。然而,我对st_intersects + st_buffer:
很好奇$ mysql --version
mysql Ver 14.14 Distrib 5.6.24, for Linux (x86_64) using EditLine wrapper
mysql> set @l4=st_geomfromtext('LINESTRING(50 50, 52 45)');
mysql> set @g4=st_geomfromtext('POINT(50 49)');
mysql> select st_distance(@l4, @g4);
--------------
select st_distance(@l4, @g4)
--------------
+-----------------------+
| st_distance(@l4, @g4) |
+-----------------------+
| 0.3713906763541037 |
+-----------------------+
1 row in set (0.00 sec)
我认为这一点非常接近底线,但显然MySQL不同意:
mysql> select st_intersects(st_buffer(@g4, 1), @l4);
--------------
select st_intersects(st_buffer(@g4, 1), @l4)
--------------
+---------------------------------------+
| st_intersects(st_buffer(@g4, 1), @l4) |
+---------------------------------------+
| 0 |
+---------------------------------------+
1 row in set (0.00 sec)
为什么?我错过什么了吗?
注:我在H2GIS中尝试了上面的命令,它说这确实是真的!
ST_Intersects应该返回true。
这似乎是这里报告的错误:https://bugs.mysql.com/bug.php?id=71076,并在MySQL 5.7.6中修复,根据发布说明这里:http://forums.mysql.com/read.php?3,629183,629183
"这项工作还纠正了[…]],而且ST_Intersects()有时会错误地计算LineString和Polygon相交的结果。"