我有一个关于MySQL8.0.13服务器的空间函数的问题。我试着确定一个多边形是否包含一个点,使用stu包含函数。在我的测试中,两个球形对象(多边形和点)都是用sgid4326(wgs84投影)定义的。
地球多边形的东北四分之一:
选择(st包含(st geomfromtext('多边形((0 0,0 180,90 180,90 0,0))',4326),st geomfromtext('点(10)”,4326)))
... 返回1:好的,点包含在多边形中。
法国的多边形绕着格林威治子午线旋转
选择(st包含(st geomfromtext('多边形((41-6,41 10.5,51.5 10.5,51.5-6,41-6))',4326),st geomfromtext('点(45 2)”,4326)))
... 返回1:好的,点包含在多边形中。
SELECT (ST_Contains(
ST_GeomFromText( 'POLYGON((41 -6,41 10.5,51.5 10.5,51.5 -6,41 -6))',4326),
ST_GeomFromText( 'POINT(45 -2)',4326 )
))
... 返回1:好的,点包含在多边形中。
太平洋中跨越国际日期线的多边形:
选择(st包含(st geomfromtext('多边形((-45 100,-45-100,45-100,45-100,45 100,-45 100))',4326),st geomfromtext('点(0 179)”,4326)))
... 返回1:好的,点包含在多边形中。
SELECT (ST_Contains(
ST_GeomFromText( 'POLYGON((-45 100,-45 -100,45 -100, 45 100, -45 100))',4326),
ST_GeomFromText( 'POINT(0 -179)',4326 )
))
... 返回1:好的,点包含在多边形中。
世界顺时针:西南、东南、东北、西北、西南
选择(st包含(st geomfromtext('多边形((-90-180,-90 180,90 180,90-180))',4326),st geomfromtext('点(0)”,4326)))
... 返回0。ko,则该点不被检测为多边形的一部分。
SELECT (ST_Contains(
ST_GeomFromText( 'POLYGON((-90 -180,-90 180,90 180,90 -180,-90 -180))',0),
ST_GeomFromText( 'POINT(0 0)',0)
))
... 返回1:好的,点包含在多边形中。
SELECT (ST_Contains(
ST_GeomFromText( 'POLYGON((-89.99 -180,-89.99 180,89.99 180,89.99 -180,-89.99 -180))',0),
ST_GeomFromText( 'POINT(0 0)',0)
))
... 返回1:好的,点包含在多边形中。
我认为多边形((-90-180,-90-180,90-180,90-180,-90-180))与空间wgs84坐标无关;此多边形中使用的所有点都是南北极!使用平面投影(sgid 0)时,效果很好。我还试图降低纬度,以避免使用极点;89.99分° 而不是90°, 它也起作用。
我的问题是,是否有一个解决方法/其他解决方案来定义一个完整的地球“多边形”(使用90° 纬度),所以我可以使用一个通用的sql查询来处理每种情况。
克里斯托夫
暂无答案!
目前还没有任何答案,快来回答吧!