Google bigquery BigQuery-ST_MAKEPOLYGON()失败,多边形循环无效

Google bigquery BigQuery-ST_MAKEPOLYGON()失败,多边形循环无效,google-bigquery,gis,Google Bigquery,Gis,我跟随了这篇精彩的帖子 这消除了大部分问题,但我仍然遇到了一个边缘情况,即ST_MAKEPOLYGONS()失败,原因是: 无效的多边形循环 我的问题有两方面 错误消息的含义是什么 如何检测这种情况以避免此类错误 我遵循了参考帖子中的建议,还介绍了另一种预防措施,但仍然遇到了问题 -- remove invalid ratio SELECT * FROM(SELECT *, SAFE_DIVIDE(ST_DISTANCE(centroid, anchor

我跟随了这篇精彩的帖子
这消除了大部分问题,但我仍然遇到了一个边缘情况,即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
错误消息的含义是什么

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

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

也就是说,
多边形((0,1,2 0,2 2,1,1,0 2,0 0))
是不正确的,但是
多多边形((0,1,1,0 2,0 0)),((1,2 0,2,1 1))
是正确的,即使某些工具可能会以相同的方式显示它们


在实践中如何修复此输入取决于数据的来源和生成方式。如果只想检测并绕过几行中的错误,请使用
SAFE.ST_MakePolygon
-它返回NULL而不是失败,因此至少其他行可以

谢谢,安全电话确实有帮助。我想知道你是否能想出一种方法来检测这些“8”形多边形,然后再尝试制作它们。