我关注了精彩的帖子How to Catch ST_MAKEPOLYGON Error in BigQuery这消除了大多数问题,但是我仍然遇到一种边缘情况,其中ST_MAKEPOLYGONS()失败,原因是:
无效的多边形循环。
我的问题是双重的。
我遵循了所引用文章中的建议,并介绍了另一种预防措施,但仍然遇到问题。
-- remove invalid ratio
SELECT *
FROM(SELECT *,
SAFE_DIVIDE(ST_DISTANCE(centroid, anchor) , ST_DISTANCE(centroid, location)) AS ratio
FROM X4)
WHERE ratio BETWEEN -1 AND 1
即POLYGON((0 0, 1 1, 2 0, 2 2, 1 1, 0 2, 0 0))
不正确,但是MULTIPOLYGON(((0 0, 1 1, 0 2, 0 0)), ((1 1, 2 0, 2 2, 1 1)))
是正确的,即使某些工具可能会显示它们相同。在实践中,如何修复此输入取决于数据来自何处以及如何生成。如果只想检测并绕过几行错误,请使用
SAFE.ST_MakePolygon
-它返回NULL而不是失败,因此至少其他行是可以的。