Làm thế nào để vẽ đa giác từ bàn điều khiển python?


Câu trả lời:


26

nó không thực sự phức tạp, hãy nhìn vào nhà cung cấp bộ nhớ trong vector ::

  • một điểm được tạo với QgsPoint(x,y)QgsGeometry.fromPoint(QgsPoint(x,y))
  • một dòng được tạo ra với hai điểm: QgsGeometry.fromPolyline([QgsPoint(x1,y1),QgsPoint(x2,y2)]))
  • một đa giác được tạo với một danh sách các điểm: QgsGeometry.fromPolygon([[QgsPoint(x1,y1),QgsPoint(x2,y2), QgsPoint(x3,y3)]])

1) hai điểm:

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

nhập mô tả hình ảnh ở đây

2) đường thẳng nối hai điểm

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

nhập mô tả hình ảnh ở đây

3) một đa giác bao gồm các điểm

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

nhập mô tả hình ảnh ở đây

-

Thay đổi trong QGIS 3.0 trở đi:

Đối với QGIS 3.0 trở đi, quy trình làm việc trên vẫn đúng, nhưng một số chức năng đã thay đổi. Xem https://qgis.org/api/api_break.html

Để cập nhật mã trên, thay đổi các chức năng sau:

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

Cảm ơn bạn rất nhiều cho mã. Tôi đã tự hỏi làm thế nào tôi có thể thoát khỏi hộp thoại lựa chọn CRS sau khi tôi chạy mã?
Wannik

Làm thế nào tôi có thể thêm phong cách?
cjahangir

3

Chỉ cần chọn CRS trong định nghĩa lớp: QgsVectorLayer('Polygon?crs=epsg:2154', 'poly' , "memory")ví dụ: ở đây, EPSG 2154 dành cho phép chiếu Lambert 93, tiêu chuẩn ở Metropolitan France, nhưng bạn có thể đặt bất cứ thứ gì bạn muốn)


Làm thế nào tôi có thể thêm phong cách?
cjahangir
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.