我在使用 mysql 时遇到了差异st_contains
。我有一个区域表,其中包含它们的latitude
和longitude
列,我只想查询落在多边形内的所有记录。
当我这样做时,mysql返回多边形外的记录,并错过肯定在多边形内的记录。我能够使用 mysql 结果的谷歌地图创建视觉效果来帮助我调试。
下面是 SQL 查询
SELECT *
FROM `zones`
WHERE (ST_CONTAINS(ST_GEOMFROMTEXT('POLYGON((22.43079687220491 89.14206562499999, 33.72385081452048 96.70065937499999, 22.917381576171614 107.77487812499999, 20.796651975524764 108.12644062499999, 17.643461922028166 107.42331562499999, 7.361883956935348 117.26706562499999, 2.1060545562538273 148.54242063498816, -7.365289419995424 171.21820188498816, -25.802453489204527 171.74554563498816, -36.08590711168321 -175.3694333408895, -51.731473033051614 172.21043060460465, -44.34469762328107 138.81199310460465, -34.74750931376504 107.87449310460465, -12.04633897054804 98.73386810460465, 2.804203457833971 93.76073834567285, 16.292162960708847 90.77245709567285, 22.43079687220491 89.14206562499999, 22.43079687220491 89.14206562499999))'), POINT(latitude, longitude))) AND `zones`.`deleted_at` IS NULL
从视觉上看,它显示了所提供的多边形之外的记录,并且缺少应该在多边形内的记录。
例如,我有一个澳大利亚黑斯廷斯的区域记录,latitude:-38.3
它longitude:145.216667
显然在多边形中,但 mysql 从不返回此记录。新西兰境内也有多项记录。
边界是使用谷歌地图绘图插件生成的。
这是一个mysql错误,还是我做错了什么?