1. 计算两点距离(续前例)
python
from qgis.core import QgsGeometry
# 获取两个点要素
features = list(layer.getFeatures())[:2]
point1 = features[0].geometry().asPoint()
point2 = features[1].geometry().asPoint()
# 计算距离(单位:图层坐标系单位)
distance = QgsGeometry.fromPointXY(point1).distance(QgsGeometry.fromPointXY(point2))
print(f"距离:{distance} {layer.crs().mapUnits()}")
2. 创建缓冲区
python
from qgis.core import QgsFeature
# 对第一个点创建100米缓冲区
feature = next(layer.getFeatures())
geom = feature.geometry()
buffer_geom = geom.buffer(100, 5) # 距离100米,分段数5(控制平滑度)
# 创建缓冲区图层(面要素)
uri = "Polygon?crs=EPSG:4326"
buffer_layer = QgsVectorLayer(uri, "Buffer", "memory")
buffer_feature = QgsFeature()
buffer_feature.setGeometry(buffer_geom)
buffer_layer.dataProvider().addFeatures([buffer_feature])
QgsProject.instance().addMapLayer(buffer_layer)
五、可视化:符号化与标注
1. 设置图层符号样式
python
# 设置点图层符号为红色五角星
symbol = QgsMarkerSymbol.createSimple({"name": "star", "color": "red", "size": "3"})
layer.renderer().setSymbol(symbol)
layer.triggerRepaint() # 刷新显示
2. 启用标注
python
layer.setLabelsEnabled(True) # 启用标注
layer.setLabeling(QgsVectorLayerSimpleLabeling(layer.fields().indexFromName("name"))) # 基于字段"name"标注
layer.triggerRepaint()