วิธีการวาดรูปหลายเหลี่ยมจากคอนโซลหลาม?


14

ฉันได้เยี่ยมชมและเยี่ยมชมหน้าใหม่เกี่ยวกับการจัดการรูปทรงเรขาคณิตในตำราอาหาร PyQGIS: http://documentation.qgis.org/2.0/en/docs/pyqgis_developer_cookbook/geometry.htmlแต่ดูเหมือนว่าจะไม่เข้าใจวิธีการรับ รูปหลายเหลี่ยมที่วาดจากคอนโซล Python ใครช่วยได้บ้าง

คำตอบ:


26

ไม่ซับซ้อนจริงๆดูที่ผู้ให้บริการหน่วยความจำในเวกเตอร์ ::

  • จุดถูกสร้างขึ้นด้วยQgsPoint(x,y)และQgsGeometry.fromPoint(QgsPoint(x,y))
  • บรรทัดถูกสร้างด้วยสองจุด: QgsGeometry.fromPolyline([QgsPoint(x1,y1),QgsPoint(x2,y2)]))
  • รูปหลายเหลี่ยมถูกสร้างขึ้นด้วยรายการคะแนน: QgsGeometry.fromPolygon([[QgsPoint(x1,y1),QgsPoint(x2,y2), QgsPoint(x3,y3)]])

1) สองคะแนน:

# 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])

ป้อนคำอธิบายรูปภาพที่นี่

2) สายเชื่อมต่อสองจุด

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])

ป้อนคำอธิบายรูปภาพที่นี่

3) รูปหลายเหลี่ยมครอบคลุมจุด

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])

ป้อนคำอธิบายรูปภาพที่นี่

-

การเปลี่ยนแปลงใน QGIS 3.0 เป็นต้นไป:

สำหรับ QGIS 3.0 เป็นต้นไปลำดับงานข้างต้นยังคงถูกต้อง แต่ฟังก์ชั่นบางอย่างเปลี่ยนไป ดูhttps://qgis.org/api/api_break.html

เพื่ออัปเดตรหัสข้างต้นเปลี่ยนฟังก์ชั่นต่อไปนี้:

QgsPoint -> QgsPointXY
QgsfromPoint -> QgsfromPointXY
QgsfromPolyline -> QgsfromPolylineXY
QgsfromPolygon -> QgsfromPolylineXY
QgsfromPolyline -> QgsfromPolylineXY
QgsMapLayerRegistry -> QgsProject

ขอบคุณมากสำหรับรหัส ฉันสงสัยว่าฉันจะกำจัดกล่องโต้ตอบการเลือก CRS ได้อย่างไรหลังจากฉันเรียกใช้รหัสแล้ว
วรรณนิก

ฉันจะเพิ่มสไตล์ได้อย่างไร
cjahangir

3

เพียงเลือก CRS ในการกำหนดเลเยอร์: QgsVectorLayer('Polygon?crs=epsg:2154', 'poly' , "memory")ตัวอย่าง (นี่คือ EPSG 2154 สำหรับการฉายภาพ Lambert 93 ซึ่งเป็นมาตรฐานในเมืองหลวงฝรั่งเศส แต่คุณสามารถใส่อะไรก็ได้ที่คุณต้องการ)


ฉันจะเพิ่มสไตล์ได้อย่างไร
cjahangir
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.