You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Databricks Mosaic中创建含多个outer多边形的几何对象

处理Databricks Mosaic解析OSM PBF时多Outer多边形的转换问题
  • OSM里带多个Outer环的要素对应GIS中的MultiPolygon类型,st_makepolygon只能处理单个带内环的多边形,直接用它处理多Outer场景肯定行不通
  • 正确操作流程:
    1. 先把每个Outer环单独转成Polygon:如果该Outer环有对应的内环,就把内环数组传给st_makepolygon;没有内环的话只传Outer环即可
    2. 把所有生成的Polygon聚合到数组里,要么直接转成MultiPolygon,要么用st_union合并
  • 实际代码参考:
    from pyspark.sql import functions as F
    from mosaic import functions as mf
    
    # 假设数据中,outer_rings是所有Outer环的数组,inner_rings是按Outer环分组的内环数组
    df = df.withColumn("single_polygons", F.expr(
        "transform(outer_rings, (ring, idx) -> st_makepolygon(ring, inner_rings[idx]))"
    ))
    
    # 方式1:转成MultiPolygon
    df = df.withColumn("multi_polygon", mf.st_geomfromwkt(mf.st_astext(mf.st_collect("single_polygons"))))
    
    # 方式2:用st_union合并成单个Polygon(适用于几何相邻的场景)
    df = df.withColumn("unioned_polygon", mf.st_union(F.expr("aggregate(single_polygons, st_geometry('EMPTY'), (acc, p) -> st_union(acc, p))")))
    
  • 踩坑提示:
    • 必须保证内环和对应的Outer环正确关联,别把所有内环都丢给每个Outer环
    • 如果st_union没效果,检查下几何数组是否为空,或者环的方向是否符合要求——OSM规定Outer环为逆时针、Inner环为顺时针,要是方向反了,Mosaic可能识别异常,可尝试用st_reverse调整环的顺序

内容的提问来源于stack exchange,提问作者Swapnil Dukare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:42:11