Obtenir les coordonnées Line ou MultiLine dans QGIS via PyQGIS
Nous pouvons obtenir les coordonnées de la couche de points via le code suivant, mais je veux connaître les coordonnées de la ligne ou de la multiligne. Comment obtenir ces coordonnées?
layer = QgsProject.instance().mapLayersByName("layerName")[0]
iter = layer.getFeatures()
for feature in iter:
geom=feature.geometry()
print(geom.asPoint().x(),geom.asPoint().y())
Réponses
Pour la chaîne de lignes en plusieurs parties, vous pouvez utiliser le code suivant (je l'ai testé en 3.16.1)
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())
Pour linestring monobloc:
layer = QgsProject.instance().mapLayersByName("Single parts")[0]
for feature in layer.getFeatures():
for pnt in feature.geometry().asPolyline():
print(pnt.x(), pnt.y())
asMultiPolyline et asPolyline renvoient une liste de points, vous pouvez donc utiliser des index.
MISE À JOUR pour vérifier le type de géométrie de la couche, utilisez la méthode geometryType de la couche. Pour séparer les types simples et multiples, utilisez la fonction isSingleType. Voici le code pour cela:
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())
Si vous souhaitez extraire le xy des sommets d'une géométrie MultiPolyline, vous pouvez utiliser le code suivant:
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())
La sortie sera comme ça
-3487202.783144876 10010395.30478035
-3428476.505393841 10049595.900699263
-3428476.505393841 10049595.900699263
-3374593.995628879 9923727.261801671
-3428476.505393841 10049595.900699263
-3359626.0983730364 10059037.052994486
