Abrufen der Linien- oder MultiLine-Koordinaten in QGIS über PyQGIS
Wir können Punktschichtkoordinaten durch den folgenden Code erhalten, aber ich möchte die Koordinaten von Linien oder Mehrlinien kennen. Wie bekomme ich diese Koordinaten?
layer = QgsProject.instance().mapLayersByName("layerName")[0]
iter = layer.getFeatures()
for feature in iter:
geom=feature.geometry()
print(geom.asPoint().x(),geom.asPoint().y())
Antworten
Für mehrteilige Linestrings können Sie den folgenden Code verwenden (ich habe ihn in 3.16.1 getestet).
layer = QgsProject.instance().mapLayersByName("folyo")[0]
for feature in layer.getFeatures():
for part in feature.geometry().asMultiPolyline():
print("part")
for pnt in part:
print(pnt.x(), pnt.y())
Für Einzelteil-Linestring:
layer = QgsProject.instance().mapLayersByName("Single parts")[0]
for feature in layer.getFeatures():
for pnt in feature.geometry().asPolyline():
print(pnt.x(), pnt.y())
asMultiPolyline und asPolyline geben eine Liste der Punkte zurück, sodass Sie Indizes verwenden können.
UPDATE zum Überprüfen des Ebenengeometrietyps Verwenden Sie die GeometrieType-Methode der Ebene. Verwenden Sie die Funktion isSingleType, um einzelne und mehrere Typen zu trennen. Hier ist der Code dafür:
layer = QgsProject.instance().mapLayersByName("your_layer")[0]
if layer.geometryType() == QgsWkbTypes.LineGeometry:
for feature in layer.getFeatures():
geom = feature.geometry()
if QgsWkbTypes.isSingleType(geom.wkbType()):
# single
for pnt in geom.asPolyline():
print(pnt.x(), pnt.y())
else:
# multipart
for part in geom.asMultiPolyline():
print("part")
for pnt in part:
print(pnt.x(), pnt.y())
Wenn Sie das xy von Eckpunkten einer MultiPolyline-Geometrie extrahieren möchten, können Sie den folgenden Code verwenden:
layer = QgsProject.instance().mapLayersByName("layerName")[0]
iter = layer.getFeatures()
for feature in iter:
geom=feature.geometry()
verts = geom.asMultiPolyline() # use geom.asPolyline() for line geometry
for vert in verts:
for i in range(len(vert)):
print(vert[i].x(),vert[i].y())
Die Ausgabe wird so sein
-3487202.783144876 10010395.30478035
-3428476.505393841 10049595.900699263
-3428476.505393841 10049595.900699263
-3374593.995628879 9923727.261801671
-3428476.505393841 10049595.900699263
-3359626.0983730364 10059037.052994486
