QGISでポリラインシェープファイルに沿ってランダムなポイントを作成しようとしています。基本的には、「リサーチツール」の「ランダムポイント」ツールと同様ですが、ポリゴンではなくポリライン用です。
ラインファイルをポリゴンシェープファイルに変換してみましたが、一部の領域はポリゴンで埋められますが、他の領域は長いラインタイプのポリゴンのままです。
私はQGISにかなり慣れていないので、Pythonコードに精通していません。
QGISでポリラインシェープファイルに沿ってランダムなポイントを作成しようとしています。基本的には、「リサーチツール」の「ランダムポイント」ツールと同様ですが、ポリゴンではなくポリライン用です。
ラインファイルをポリゴンシェープファイルに変換してみましたが、一部の領域はポリゴンで埋められますが、他の領域は長いラインタイプのポリゴンのままです。
私はQGISにかなり慣れていないので、Pythonコードに精通していません。
回答:
このコードは、QGISの最新の開発ビルドで動作します。
from qgis.utils import iface
from qgis.core import *
from PyQt4.QtCore import QVariant
import random
def createRandomPoints(count):
# Create a new memory layer to store the points.
vl = QgsVectorLayer("Point", "distance nodes", "memory")
pr = vl.dataProvider()
pr.addAttributes( [ QgsField("distance", QVariant.Int) ] )
layer = iface.mapCanvas().currentLayer()
# For each selected object
for feature in layer.selectedFeatures():
geom = feature.geometry()
length = geom.length()
feats = []
# Loop until we reach the needed count of points.
for i in xrange(0,count):
# Get the random distance along the line.
distance = random.uniform(0, length)
# Work out the location of the point at that distance.
point = geom.interpolate(distance)
# Create the new feature.
fet = QgsFeature()
fet.setAttributeMap( { 0 : distance } )
fet.setGeometry(point)
feats.append(fet)
pr.addFeatures(feats)
vl.updateExtents()
QgsMapLayerRegistry.instance().addMapLayer(vl)
あなたはPythonコードにあまり慣れていないと言っていましたが、これはかなり簡単に実行できるはずです。上記のコードをファイル(私の名前はと呼ばlocate.py
れます)にコピーし、~/.qgis/python
Windows 7 C:\Users\{your user name}\.qgis\python\
またはWindows XPの場合は、その中に配置します。C:\Documents and Settings\{your user name}\.qgis\python\
ファイルがpythonフォルダーに入ったら、QGISを開き、いくつかの線オブジェクトを選択します。
次に、Pythonコンソールを開き、次のコードを実行します。
import locate.py
locate.createRandomPoints(10)
結果は次のようになります
もう一度実行したい場合は、さらにいくつかの行を選択locate.createRandomPoints(10)
して、Pythonコンソールでもう一度実行します。
注:Locate.createRandomPoints(10)ここで10は、ラインごとに生成するポイントの数です
import locate
Pythonコンソールで.py を使用する必要はありませんか。
ポリラインを(最低限)バッファリングし、結果のポリゴンでサンプリングを実行できます。他の制限要因がなければ、それ自体で問題なく動作する可能性があります。最小のポイント間間隔、密度などで。
より複雑なケースでは、より密度の高いランダムサンプルを作成し、2番目のステップで適切な(何であれ)ポイントを選択します。同様のことがデンシファイツールで実行できますが、すべてのポイントはポリライン上にあります。