Mendapatkan koordinat Garis atau MultiLine di QGIS melalui PyQGIS
Dec 03 2020
Kita bisa mendapatkan koordinat layer titik melalui kode berikut, tetapi saya ingin mengetahui koordinat garis atau multiline. Bagaimana cara mendapatkan koordinat ini?
layer = QgsProject.instance().mapLayersByName("layerName")[0]
iter = layer.getFeatures()
for feature in iter:
geom=feature.geometry()
print(geom.asPoint().x(),geom.asPoint().y())
Jawaban
4 Zoltan Dec 03 2020 at 14:01
Untuk multipart linestring Anda dapat menggunakan kode berikut (saya mengujinya di 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())
Untuk linestring satu bagian:
layer = QgsProject.instance().mapLayersByName("Single parts")[0]
for feature in layer.getFeatures():
for pnt in feature.geometry().asPolyline():
print(pnt.x(), pnt.y())
asMultiPolyline dan asPolyline mengembalikan daftar Poin, sehingga Anda dapat menggunakan indeks.
UPDATE untuk memeriksa jenis geometri lapisan menggunakan metode geometryType lapisan. Untuk memisahkan tipe tunggal dan multi gunakan fungsi isSingleType. Ini kodenya:
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())
2 ahmadhanb Dec 03 2020 at 14:03
Jika Anda ingin mengekstrak xy dari simpul dari geometri MultiPolyline Anda dapat menggunakan kode berikut:
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())
Outputnya akan seperti ini
-3487202.783144876 10010395.30478035
-3428476.505393841 10049595.900699263
-3428476.505393841 10049595.900699263
-3374593.995628879 9923727.261801671
-3428476.505393841 10049595.900699263
-3359626.0983730364 10059037.052994486

Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'