Pythonコンソールからポリゴンを描画する方法は?


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))
  • 2つのポイントで線が作成されます。 QgsGeometry.fromPolyline([QgsPoint(x1,y1),QgsPoint(x2,y2)]))
  • 多角形は点のリストで作成されます: QgsGeometry.fromPolygon([[QgsPoint(x1,y1),QgsPoint(x2,y2), QgsPoint(x3,y3)]])

1)2つのポイント:

# 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)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 14年

スタイルを追加するにはどうすればよいですか?
チャハンギル

3

レイヤー定義でCRSを選択するだけ QgsVectorLayer('Polygon?crs=epsg:2154', 'poly' , "memory")です(たとえば、EPSG 2154は、フランスの首都圏で標準のLambert 93投影用ですが、好きなものを配置できます)


スタイルを追加するにはどうすればよいですか?
チャハンギル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.