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

如何通过Python在QGIS 3.28中创建3D多边形?

实现QGIS 3.28中带Z坐标的三维多边形构造

核心方案

QgsGeometry.fromPolygonXY()仅支持2D平面多边形,要处理带Z分量的非平面网格,需使用QGIS提供的三维几何构造方法QgsGeometry.fromPolygonZ(),配合QgsPointZ类型确保Z坐标被正确保留。

代码实现

1. 转换坐标为三维点对象

如果你的原始数据是坐标元组(如示例),先转为QgsPointZ列表:

# 示例带Z的坐标点
example_pointlist = ((0,0,130), (50,0,140), (70,10,150), (70,20,145), (49,10, 135), (0,10,130))

# 生成QgsPointZ列表
point_z_list = [QgsPointZ(x, y, z) for x, y, z in example_pointlist]

如果已有带Z的QgsPoint对象,直接转成QgsPointZ:

# 假设original_points是带Z分量的QgsPoint列表
point_z_list = [QgsPointZ(p.x(), p.y(), p.z()) for p in original_points]

2. 创建三维多边形几何

通过fromPolygonZ()构造符合QGIS要求的三维多边形:

# 构造三维多边形(注意嵌套列表结构,对应多边形的环)
polygon_z = QgsGeometry.fromPolygonZ([point_z_list])

# 验证几何有效性(可选)
if polygon_z.isValid():
    print("三维多边形创建成功")
else:
    print("几何无效:", polygon_z.validateGeometry())

3. (可选)添加到QGIS图层展示

如果需要将多边形加入地图:

# 创建内存图层,指定几何类型为PolygonZ
layer = QgsVectorLayer("PolygonZ?crs=EPSG:4326", "3D Road Polygon", "memory")
provider = layer.dataProvider()

# 创建要素并添加几何
feat = QgsFeature()
feat.setGeometry(polygon_z)
provider.addFeature(feat)

# 加载到当前项目
QgsProject.instance().addMapLayer(layer)

关键注意事项

  • QgsPointZ是QGIS中专门存储三维点的类型,确保Z坐标不会被丢弃。
  • fromPolygonZ()要求输入嵌套列表结构,即使单个环的多边形也需保持外层列表包裹点列表。
  • 非平面的三维多边形在QGIS 3.28中可正常处理、渲染,只要几何结构符合规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 07:18:19