跨IDL或格林威治的ST_WITHIN或ST_CONTAINS和POLYGON

时间:2018-11-15 16:06:30

标签: mysql gis spatial

我对MySQL 8.0.13服务器的空间功能有疑问。 我尝试使用ST_Contains函数确定多边形是否包含点。 在我的测试中,两个球形对象(多边形和点)都使用SGID 4326(WGS84投影)定义。

  • 地球东北四分之一多边形:

    SELECT(ST_Contains(     ST_GeomFromText('POLYGON((0 0,0 180,90 180,90 0,0 0))',4326),     ST_GeomFromText('POINT(10 10)',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:确定,该点包含在多边形中。

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:确定,该点包含在多边形中。

  • 穿越国际日期变更线的太平洋中的多边形

    SELECT(ST_Contains(     ST_GeomFromText('POLYGON((-45 100,-45 -100,45 -100,45 100,-45 100))',4326),     ST_GeomFromText('POINT(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:确定,该点包含在多边形中。

  • 世界顺时针:SW,SE,NE,NW,SW

    SELECT(ST_Contains(     ST_GeomFromText('POLYGON((-90 -180,-90 180,90 180,90 -180,-90 -180))',4326),     ST_GeomFromText('POINT(0 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:确定,该点包含在多边形中。

我认为POLYGON((-90 -180,-90 180,90 180,90 -180,-90 -180))与空间WGS84坐标无关;该多边形中使用的所有点都是北极! 使用平面投影(SGID 0)时,效果很好。 我还尝试减少纬度以避免使用杆子。 89.99°而不是90°也可以。

然后我的问题是,是否有解决方法/其他解决方案来定义一个完整的地球“多边形”(使用90°纬度),所以我可以使用适用于每种情况的通用SQL查询。

克里斯托夫

0 个答案:

没有答案