BigQuery - ST_MAKEPOLYGON() 因多边形循环无效而失败

BigQuery - ST_MAKEPOLYGON() fail with invalid polygon loop

我关注了辉煌post
这消除了大部分问题,但我仍然 运行 陷入 ST_MAKEPOLYGONS() 失败的边缘情况:

Invalid polygon loop.

我的问题是双重的。

我按照参考文献post中的建议,也引入了另一种预防措施,但还是运行出了问题。

-- 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

What is the meaning of the error message.

该错误表示函数的输入无效,如Simple Feature Access standards(ISO 或 OGC 版本)所定义。多边形应描述为 shell(没有自相交的循环)和可选的孔(同样,没有自相交的循环,孔不能相互交叉或 shell )。

你有重复的顶点,因此在循环中有自相交。这通常意味着一个数字 8 循环。这不是一个有效的多边形,这种形状应该用两个多边形来描述,用一个单独的多边形代表“8”中的每个圆。

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 - it returns NULL 而不是失败,因此至少其他行是可以的。