QGISでPythonを使用して3点の線を作成しますか?


8

私はPythonを使い始めたばかりで、いくつかの困難を抱えています。PythonでQGISのコンソールに線のあるシンプルなレイヤーを作成したいと思います。どうやってやるの?


別の質問での質問とは異なることをしようとしていますか?gis.stackexchange.com/questions/60007/...

はい、私はpythonでアクションを実行したいので
user1573901

回答:


23

最初にPyQGISがジオメトリを処理する方法を理解する必要があります(ジオメトリ処理

最も重要な要素はポイントです:

QgsPoint(x、y)

線または線分のセグメントは2つの点で構成されます。

QgsGeometry.fromPolyline([QgsPoint(x1、y1)、QgsPoint(x2、y2)]));

したがって、ラインを作成するには:

line_start = QgsPoint(50,50)
line_end = QgsPoint(100,150)
line = QgsGeometry.fromPolyline([line_start,line_end])

メモリレイヤーあり(属性のみ、ジオメトリのみ):

# create a new memory layer
v_layer = QgsVectorLayer("LineString", "line", "memory")
pr = v_layer.dataProvider()
# create a new feature
seg = QgsFeature()
# add the geometry to the feature, 
seg.setGeometry(QgsGeometry.fromPolyline([line_start, line_end]))
# ...it was here that you can add attributes, after having defined....
# add the geometry to the layer
pr.addFeatures( [ seg ] )
# update extent of the layer (not necessary)
v_layer.updateExtents()
# show the line  
QgsMapLayerRegistry.instance().addMapLayers([v_layer])

結果は次のとおりです。

ここに画像の説明を入力してください

3ポイントで、それを新しい機能として追加するだけです:

newpoint = QgsPoint(143,125)
v_layer = QgsVectorLayer("LineString", "line_3pt", "memory")
pr = v_layer.dataProvider()
seg = QgsFeature()
seg.setGeometry(QgsGeometry.fromPolyline([line_start, line_end]))
# new feature: line from line_end to newpoint
seg = QgsFeature()
seg.setGeometry(QgsGeometry.fromPolyline([line_end, newpoint]))
pr.addFeatures( [ seg ] )
v_layer.updateExtents()
# add the line to 
QgsMapLayerRegistry.instance().addMapLayers([v_layer])

結果は次のとおりです。

ここに画像の説明を入力してください

また、forループを使用すると、多くのセグメントを持つ行を作成できます。

ここに画像の説明を入力してください


前の回答に加えて、次のように、各セグメントを個別に作成する必要なく、構文を使用して3つ以上のポイントを持つラインを作成できます:line = QgsGeometry.fromPolyline([pt1、pt2、pt3、pt4])
Carlos MSF
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.