調査ツール「Regular Points」を使用してポリゴン内に特定の数のポイントを作成しましたが、ポリゴンの形状内だけでなく、長方形のポイントグリッドを形成します。ポリゴン内に特定の数のポイントが必要なので、試行錯誤せずにそれを行う方法はありますか?
例えば、私が望む25ポイントのうち8ポイントのみがポリゴン内にありますが、25ポイントが欲しいので、50ポイントまで増やして、ポリゴン内にいくつ表示されるかを確認できます
調査ツール「Regular Points」を使用してポリゴン内に特定の数のポイントを作成しましたが、ポリゴンの形状内だけでなく、長方形のポイントグリッドを形成します。ポリゴン内に特定の数のポイントが必要なので、試行錯誤せずにそれを行う方法はありますか?
例えば、私が望む25ポイントのうち8ポイントのみがポリゴン内にありますが、25ポイントが欲しいので、50ポイントまで増やして、ポリゴン内にいくつ表示されるかを確認できます
回答:
レイヤー境界に関してQGISが参照しているのは、実際にはジオメトリのエンベロープまたは境界ボックスです。
これを自動化するのにおそらく最も近い解決策を文書化しました(バグ/機能要求を提出するのではありません)。
このプロセスは、2つのオブジェクトの面積の比に基づいて機能します:フィーチャジオメトリとその境界ボックス)。
以下の手順を確認してください。
作業するレイヤーを選択します。
作業する機能を選択します。他に何も選択されていないことを確認してください。
Pythonコンソール内で次のスニペットを実行します。
layer = qgis.utils.iface.activeLayer()
features = layer.selectedFeatures()
feature = features[0]
geom = feature.geometry()
env_rect = geom.boundingBox()
env_geom = QgsGeometry.fromRect(env_rect)
env_geom.area() / geom.area()
最後の行は自動的に戻らないため、必ずEnterを押してください。
Regular Points
ツールを再度実行しますが、ボックス内に必要なポイント数にスクリプトで指定された出力を掛けて入力します。
以下のサンプルでは、出力から受け取った結果は〜2の値でした。私は実際に10だけが必要だったプロセスで20ドットを出力するように要求しました。その代わりに8が与えられましたが、これはかなり近いです。使用している実際の形状に応じて、結果は異なります。
そうしたい場合は、希望する数に達するまで変数を変更する通常のポイントプロセスを(再帰的に)自動化できます。
スクリーンショットでは、単純な解決策が提案されています。を使用してポリゴンを新しいレイヤーに抽出しVector -> Data Managment Tools -> Split vector layer
、インポートしてから、「通常のポイント」サンプラーの入力レイヤーとして必要なフィーチャ(ID)を持つレイヤーを選択できます。
少数のポリゴンのみに対してこれを行う必要がある場合、それらを見つけて別々にエクスポートする方が効率的です。いずれかを選択したら、レイヤー名を右クリックしてを選択しSave Selection As ...
、シェープファイルを選択して残りを記入し、前と同じように繰り返します。
編集:あなたはすでに単一の機能を持っているので、より単純なものは考えられませんが、より密度の高いグリッドを使用して、ポリゴンと再び交差させ、最後にすべての余分な点を削除します(簡単にセンタリングし、総数)。