Cara menggambar poligon dari konsol python?

Jawaban:

26

itu tidak benar-benar rumit, lihat Penyedia memori dalam vektor ::

  • sebuah titik dibuat dengan QgsPoint(x,y)danQgsGeometry.fromPoint(QgsPoint(x,y))
  • sebuah garis dibuat dengan dua poin: QgsGeometry.fromPolyline([QgsPoint(x1,y1),QgsPoint(x2,y2)]))
  • poligon dibuat dengan daftar poin: QgsGeometry.fromPolygon([[QgsPoint(x1,y1),QgsPoint(x2,y2), QgsPoint(x3,y3)]])

1) dua poin:

# create a memory layer with two points
layer =  QgsVectorLayer('Point', 'points' , "memory")
pr = layer.dataProvider() 
# add the first point
pt = QgsFeature()
point1 = QgsPoint(50,50)
pt.setGeometry(QgsGeometry.fromPoint(point1))
pr.addFeatures([pt])
# update extent of the layer
layer.updateExtents()
# add the second point
pt = QgsFeature()
point2 = QgsPoint(100,150)
pt.setGeometry(QgsGeometry.fromPoint(point2))
pr.addFeatures([pt])
# update extent
layer.updateExtents()
# add the layer to the canvas
QgsMapLayerRegistry.instance().addMapLayers([layer])

masukkan deskripsi gambar di sini

2) garis yang menghubungkan dua titik

layer =  QgsVectorLayer('LineString', 'line' , "memory")
pr = layer.dataProvider() 
line = QgsFeature()
line.setGeometry(QgsGeometry.fromPolyline([point1,point2]))
pr.addFeatures([line])
layer.updateExtents()
QgsMapLayerRegistry.instance().addMapLayers([layer])

masukkan deskripsi gambar di sini

3) poligon yang menutupi titik

layer =  QgsVectorLayer('Polygon', 'poly' , "memory")
pr = layer.dataProvider() 
poly = QgsFeature()
points = [point1,QgsPoint(50,150),point2,QgsPoint(100,50)]
# or points = [QgsPoint(50,50),QgsPoint(50,150),QgsPoint(100,150),QgsPoint(100,50)] 
poly.setGeometry(QgsGeometry.fromPolygon([points]))
pr.addFeatures([poly])
layer.updateExtents()
QgsMapLayerRegistry.instance().addMapLayers([layer])

masukkan deskripsi gambar di sini

-

Perubahan pada QGIS 3.0 dan selanjutnya:

Untuk QGIS 3.0 dan seterusnya alur kerja di atas masih benar, tetapi fungsi-fungsi tertentu telah berubah. Lihat https://qgis.org/api/api_break.html

Untuk memperbarui kode di atas, ubah fungsi berikut:

QgsPoint -> QgsPointXY
QgsfromPoint -> QgsfromPointXY
QgsfromPolyline -> QgsfromPolylineXY
QgsfromPolygon -> QgsfromPolylineXY
QgsfromPolyline -> QgsfromPolylineXY
QgsMapLayerRegistry -> QgsProject
gen
sumber
Terima kasih banyak atas kodenya. Saya bertanya-tanya bagaimana saya bisa menyingkirkan dialog pemilihan CRS setelah saya menjalankan kode?
wannik
bagaimana saya bisa menambah gaya?
cjahangir
3

Cukup pilih CRS dalam definisi layer: QgsVectorLayer('Polygon?crs=epsg:2154', 'poly' , "memory")misalnya (di sini EPSG 2154 adalah untuk proyeksi Lambert 93, standar di Metropolitan France, tetapi Anda dapat meletakkan apa pun yang Anda inginkan)

Obenj
sumber
bagaimana saya bisa menambah gaya?
cjahangir