在BigQuery中用ST_GEOGFROMTEXT解析WKT多边形为何返回几何集合?
问题:ST_GEOGFROMTEXT解析多边形返回GeometryCollection而非单一多边形
执行以下SQL加载多边形:
SELECT ST_GEOGFROMTEXT( 'POLYGON((-92.16479270559259 29.799188342837592,-92.1632862782261 29.8019483054684,-92.16115322688664 29.805828745544027,-92.16115613148023 29.80582346174626,-92.16540974352982 29.80586983686883,-92.16504927134031 29.801966532667507,-92.16479270559259 29.799188342837592))')
返回结果为:
[{ "f0_": "GEOMETRYCOLLECTION(LINESTRING(-92.1611561314802 29.8058234617463, -92.1611532268866 29.805828745544), POLYGON((-92.1647927055926 29.7991883428376, -92.1632862782261 29.8019483054684, -92.1611561314802 29.8058234617463, -92.1654097435298 29.8058698368688, -92.1650492713403 29.8019665326675, -92.1647927055926 29.7991883428376))) } ]
发现原多边形的一条侧边被重复解析为线串,询问原因及是否为原始数据问题。
解答
这是原始多边形数据的顶点顺序问题导致的:
- 观察WKT中的两个连续顶点:
-92.16115322688664 29.805828745544027和-92.16115613148023 29.80582346174626,这两个点坐标几乎重合,但顺序反向(相当于在多边形边上做了一个极小的回退操作)。 - 空间解析器(如ST_GEOGFROMTEXT)要求多边形顶点必须按顺时针或逆时针的连续闭合顺序排列,不能出现这种反向的重复顶点。这种异常的顶点顺序会让解析器无法识别为单一闭合多边形,而是将其拆分为线串和多边形的集合。
修正方法
去掉那个反向的重复顶点,让顶点保持连续的闭合顺序,修正后的SQL如下:
SELECT ST_GEOGFROMTEXT( 'POLYGON((-92.16479270559259 29.799188342837592,-92.1632862782261 29.8019483054684,-92.16115322688664 29.805828745544027,-92.16540974352982 29.80586983686883,-92.16504927134031 29.801966532667507,-92.16479270559259 29.799188342837592))')
执行后会返回单一的多边形对象,而非GeometryCollection。
内容的提问来源于stack exchange,提问作者Pierre Mercatoris
相关产品推荐
相关产品推荐

