具有 allowInvalid 的 Snowflake to_geometry不起作用

Snowflake to_geometry with allowInvalid is not working

提问人:bogdan.rusu 提问时间:11/14/2023 最后编辑:bogdan.rusu 更新时间:11/16/2023 访问量:22

问:

我有一堆有效的几何对象进行了验证,我尝试使用 UDF 将它们组合在一起,然后调用以将结果作为几何体返回。st_isvalidto_geometry

法典:

select to_geometry(st_asgeojson(combine_geoms(ARRAY_AGG(st_asgeojson(geom_simplified)))), TRUE) as geom_1 from tbl where condition;

UDF相关代码(在很多其他地方使用):

mapping(unary_union([shape(i) for i in geoms]))

同一几何图形有 2 个版本,均有效:原始版本和简化版本(由于 16MB 大小限制,能够存储在单元格中)。st_simplifygeometry

使用原始版本,我可以将它们组合在一起,但我不能将它们全部组合在一起,因为点太多了 - 16mb 限制。

使用简化版本,我得到:.Geography validation failed: Loop 0: Edge X crosses edge Y

我以为使用标志会忽略这种交叉点。allowInvalidto_geometry

值得一提的是,我之前在将几何体作为 varchar 从另一个数据库加载到 SF 作为几何体时成功使用了该标志。很多无效的,但最终可以存储在 SF 中。

相关文档:https://docs.snowflake.com/en/sql-reference/data-types-geospatial#allowing-conversion-functions-to-create-invalid-shapes

这是正确的行为,还是有人可以告诉我我还能尝试什么来避免该交叉问题?

提前致谢!

修复: 将函数更改为 return 而不是 UDF 并仅从 UDF 返回,而不是包含在 . 然后,在 SF 中,我使用 with the flag,它按预期工作。STRINGGEOGRAPHYunary_union([shape(i) for i in geoms])mappingto_geometryallowInvalid

snowflake-cloud-data-platform GIS geojson

评论

0赞 Greg Pavlik 11/15/2023
看起来好像不在支持以下选项的函数列表中:docs.snowflake.com/en/sql-reference/...。它确实表明支持它,但我想知道报告无效几何形状的函数是否可能在使用 ?sp_simplifyallowInvalidto_geometrysp_simplify
0赞 bogdan.rusu 11/15/2023
我正在申请创建,所以它发生在这一步之前。我想说这不是从那里来的。我可以肯定的是,该标志是一个非常新的 SF 功能,大约有 6 个月的历史。st_simplifygeom_simplifiedgeomallowInvalid
0赞 Greg Pavlik 11/16/2023
这似乎绝对值得打开支持案例。如果您有一个示例无效几何图形,可以在最小的样本中重现这一点,如果您愿意,我可以打开内部票证。
0赞 bogdan.rusu 11/16/2023
发现问题:本来应该多注意异常。.所以问题是 UDF 返回一个 GEOGRAPHY 类型,该类型无法表示,因为它是无效的,因此它甚至没有到达函数。Geography validation failedto_geometry

答: 暂无答案