ポリゴンフィーチャのレイヤーがあります。各機能には属性と値があります。座標のリストもあるので、その座標がどのフィーチャ(またはポリゴン)にあるのか知りたいのですが。
誰かがこれについてどうやって進むかについて私を案内してくれませんか?私の目標を達成するのに役立つ関数がAPIにありますか、それとも自分でそれを行うためにいくつかの計算幾何アルゴリズムを使用する必要がありますか?後者の方法は知っていますが、組み込み関数がすでにある場合は、時間を節約できます。
ありがとう。
ポリゴンフィーチャのレイヤーがあります。各機能には属性と値があります。座標のリストもあるので、その座標がどのフィーチャ(またはポリゴン)にあるのか知りたいのですが。
誰かがこれについてどうやって進むかについて私を案内してくれませんか?私の目標を達成するのに役立つ関数がAPIにありますか、それとも自分でそれを行うためにいくつかの計算幾何アルゴリズムを使用する必要がありますか?後者の方法は知っていますが、組み込み関数がすでにある場合は、時間を節約できます。
ありがとう。
回答:
あなたがおそらくやりたいことは:
もちろん、たとえばポイントが1つのポリゴンにのみ含まれることがわかっている場合は、パフォーマンスを向上させることができます。適切なポリゴンが見つかったら、リストからポイントを削除できます。
コメントで指摘されているように、空間インデックスを使用すると、プロセスを大幅に高速化できます。
ここでの手順は
まず、座標のリストをプロジェクトにインポートする必要があります。このチュートリアルでは、その方法について詳しく説明しています。http://qgis.spatialthoughts.com/2012/01/importing-spreadsheets-or-csv-files-to.html
プロジェクトに両方のレイヤー(ポリゴンとポイント)がある場合は、[ベクター]> [データ管理ツール]> [場所による属性の結合]に移動します
組み合わせるレイヤーを定義できるウィンドウが表示されます。
「OK」をクリックします。新しいシェープファイルが作成され、「TOCに新しいレイヤーを追加しますか?」という質問が表示されます。もう一度[OK]をクリックします。
新しく追加されたシェープファイルの属性テーブルを開くと、対応するポリゴンのすべてのフィーチャが、そのポリゴンに配置されるポイントに追加されていることがわかります。
PyQGISを使用してこれを行うより簡単な方法。QgsRectangle
単一のポイントでオブジェクトを作成し、それを使用して、QgsFeatureRequest
それと交差するレイヤーからフィーチャをフィルタリングできることを理解しました。
point = QgsPoint(10, 10)
# Construct a QgsRectange with the same point
rect = QgsRectangle(point, point)
req = QgsFeatureRequest()
req.setFilterRect(rect)
# You get the feature that intersects the point
f = layer.getFeatures(req).next()