gpt4 book ai didi

MySQL 8.0 ST_CONTAINS 返回多边形外的记录,并错过多边形内的记录

转载 作者:行者123 更新时间:2023-11-29 09:32:04 28 4
gpt4 key购买 nike

我在使用 mysql 的 st_contains 时遇到了差异。我有一个区域表,其中包含纬度和经度列,我只想查询位于多边形内的所有记录。

当我这样做时,mysql返回多边形之外的记录,并且错过了肯定在多边形内的记录。我能够使用 mysql 结果的谷歌地图创建一个视觉效果来帮助我调试。

Here is the visual of the records I was able to create using google maps

下面是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

从视觉上看,它显示了所提供的多边形之外的记录,并且缺少应该位于多边形内的记录。

例如,我有一个澳大利亚黑斯廷斯的区域记录,其纬度:-38.3 和经度:145.216667 显然位于多边形中,但 mysql 永远不会返回此记录记录。新西兰境内也有多项记录。

边界是使用谷歌地图绘图插件生成的。

这是一个 mysql 错误,还是我做错了什么?

最佳答案

我将你的多边形定义粘贴到WKT可视化工具中,它看起来很奇怪,一点也不像你在这里画的那样。

我认为这是由这些段以及缺少 SRID 引起的。

-25.802453489204527 171.74554563498816, -36.08590711168321 -175.3694333408895, -51.731473033051614 172.21043060460465

如果没有显式的 SRID 参数,MySQL 使用 SRID 0 - 抽象、无单位、无限、笛卡尔平面。 https://mysqlserverteam.com/spatial-reference-systems-in-mysql-8-0/

在这一段中,经度从 171 度跳到 -175 度,然后再跳回来,穿过反子午线。但是当 SRID = 0 时,MySQL 对反子午线一无所知,这变成了一条跨越约 346 度经度并穿过大部分图片的长线,而不是免费的跨越约 14 度并穿过反子午线的短线。

你需要提供SRID(我猜你需要4326)来告诉MySQL地球上正在发生的事情。或者,如果您不需要精确的多边形,则可以采用简单的解决方法 - 将 -175.3694333408895 替换为 179.9 以避免跨越反子午线。

关于MySQL 8.0 ST_CONTAINS 返回多边形外的记录,并错过多边形内的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58497057/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com