파이썬 콘솔에서 다각형을 그리는 방법은 무엇입니까?


답변:


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 선택 대화 상자를 제거하는 방법이 궁금합니다.
wannik

스타일을 어떻게 추가 할 수 있습니까?
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.