これは、QGIS(どのバージョンでも可能だと思います)とDBマネージャーでの非常に単純なSQLステートメントを使用して達成するのはかなり簡単です。しかし、そのためには、ある種の空間データベース(Postgisまたはspatialite)に存在する必要があります。ほとんどの人にとってアクセスしやすいので、spatialiteの使用を想定しますが、SQLステートメントはPostgisでも同じです。
- 新しいSpatialiteデータベースを作成します。
- ポイントレイヤーとポリゴンレイヤーを新しいデータベースにインポートします。
- DBマネージャープラグインを開き、データベースを選択して、次のSQLステートメントのいずれかを実行します。
すべてのポイントからすべてのポリゴン境界までの距離
SELECT
f.point_id,
g.polygon_id,
st_distance(g.geom, f.geom) AS distance
FROM
points_table AS f,
polygons_table AS g
すべてのポイントから関連するポリゴンの境界までの距離(共通のフィールドが存在すると想定)
SELECT
f.point_id,
g.polygon_id,
st_distance(g.geom, f.geom) AS distance
FROM
points_table AS f JOIN
polygons_table AS g ON (g.common_field = f.common_field)
すべてのポイントから関連するポリゴンの重心までの距離:
SELECT
f.point_id,
g.polygon_id,
st_distance(f.geom, st_centroid(g.geom)) AS distance
FROM
points_table AS f JOIN
polygons_table AS g ON (g.common_field = f.common_field)
レイヤーの任意のフィールドを結果に追加できることに注意してください。
SELECT
f.point_id,
f.point_number,
g.polygon_id,
g.parcel_name,
st_distance(f.geom, st_centroid(g.geom)) AS distance
FROM
points_table AS f JOIN
polygons_table AS g ON (g.common_field = f.common_field)
またはすべてのフィールド:
SELECT
f.*,
g.*,
st_distance(f.geom, st_centroid(g.geom)) AS distance
FROM
points_table AS f JOIN
polygons_table AS g ON (g.common_field = f.common_field)