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 而不是失败,因此至少其他行是可以的。
我关注了辉煌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 而不是失败,因此至少其他行是可以的。