Qgis:指定した半径内にランダムポイントを作成

提供: dococo wiki
2016年7月3日 (日) 14:01時点におけるimported>Webmasterによる版
ナビゲーションに移動 検索に移動

はじめに

こういう用途があるか分かりませんが、仕事で必要になった事案があったので備忘録的に記録しておきます。

目的

あるポイントデータ(緯度経度)があり、そのポイントから半径xxx[m](例えば半径500m)以内に、ランダムなポイントを設定して、そのランダムポイントから半径xxx[m](例えば半径500m)の円を記載する
といった状況の作り方です。

  • 赤い線で指定された範囲内でオレンジ色の線を書くための方法です

なんで、こんなことをしたいかというと、ある情報を部外に提示するときに赤い線で指定された範囲だと中心位置が分かってしまいあまり都合が良くないので、適当に中心位置を散らして「当たらずとも遠からず」的な情報を提示するときに使用します。(なんか面倒くさい、遠回し的な情報ですが、必要に迫られて作りました)

作成方法

ポイントデータ作成

  • gis:地図データの入手で市区町村役場データ辺りのポイントデータを持ってきます
  • ダウンロードすると以下のようなファイルがダウンロードされます(例は和歌山県)
    • KS-META-P34_14-30.xml
    • P34-14_30.dbf
    • P34-14_30.prj
    • P34-14_30.shp
    • P34-14_30.shx
    • P34-14_30.xml
  • これ見れば、シェープファイル(Shape File)だと言うことが分かります。(拡張子がshp)
  • これをqgisに読み込みます

2016-07-02 22-33-13.png

  • こんな感じで地図上にプロットされます(背景地図を入れてます)
  • シェープファイルをqgisに読み込むと、見かけ上はプロットされてるけどCRS座標系(Coordinate Reference System (CRS))を合わせないと、後々メチャクチャになるので、そのレイヤを名前を付けて保存します

2016-07-02 22-52-23.png

  • CRSを「EPSG:3100: JGD2000 / UTM zone 54N」に合わせて名前を付けて保存します

2016-07-02 22-54-33.png

CRSを変えたポイントデータの読み込み

  • 先ほど読み込んだ「P34-14_30」のCRSは地理座標系(経緯度)の「JGD2000 EPSG:4612」になっています。
  • 「P34-14_30」を別名保存したCRSは投影座標系(UTM座標系)の「EPSG:3100: JGD2000 / UTM zone 54N」になっていると思います
  • 内容の差分は他のサイトにゆだねるとして、少なくとも地理座標系(経緯度)投影座標系(UTM座標系)の違いを理解し、合わせないとGIS上でおかしな表示になるので注意が必要です
  • 簡単に言うと地理座標系(経緯度)の単位は投影座標系(UTM座標系)の単位はメートル(変えられますけど)と言うことを理解しておいてください
  • そして、「P34-14_30」を別名保存したファイルを読み込みます。
  • プロジェクトのプロパティで計測を選びます、楕円体にWGS84を距離計測単位にメートルを選択します

バッファ作成

  • 指定した半径内ということで、その半径にポイントを打つために領域(バッファ)を設定します
  • 空間演算ツールでバッファを選びます

2016-07-03 9-57-07.png

  • 入力ベクタレイヤに投影座標系(UTM座標系)の「EPSG:3100: JGD2000 / UTM zone 54N」で設定したレイヤを指定します
  • 円を近似させる線分の数:よく分かりませんが10位にすれば滑らかに円が描かれます
  • バッファ距離:ここで間違いがよく見つかります、実は単位が無いのです、単位が無い理由は座標系によっては、単位が「」であったり「メートル」や「海里」など条件によって変わってきますので注意です
  • 事前の説明の中で
    • 座標は:「EPSG:3100: JGD2000 / UTM zone 54N
    • 楕円体は:WGS84、距離計測の単位はメートル
  • が指定されているはずです
  • そして、バッファ出力用のシェープファイル名を指定してOKを押下します

2016-07-03 9-58-33.png

  • 500mになった

500.781m(少々誤差有り)になっておもいどおりのバッファ距離になりました。

バッファ領域内にランダムポイントを作成

  • さて、ここまでで以下の条件の地図ができあがっているはずです
    • 1:正確な緯度経度情報によってプロットされた点ポリゴン
    • 「1」の情報から作成された半径500mの円ポリゴン
  • この章では、半径500mの円ポリゴンの中にランダムに置かれた1つの点ポリゴンを作成します
  • 調査ツールのランダム点群を選択します

2016-07-03 12-51-21.png

  • ランダム点群内容
  • 作成するたびにCRSが変わるので測地系にあったCRSを選択し、名前を変えて保存すること

2016-07-03 13-00-59.png

  • 範囲レイヤの入力:ランダム点群を配置する面ポリゴンを指定
  • サンプルサイズ
    • 非階層化サンプリング方法(レイヤ全体)
      • このポイント数を使う:レイヤ全体(ポリゴンが100あっても1000あっても)に対して、指定されたポイント数をランダムに設置する。ここの例で説明すると、500m円が5個有った場合にポイント数を「3」と指定した場合、5個のうちランダムに選んだ3つの500m円内に更にランダムに3つのポイントを指定すること

2016-07-03 13-23-20.png

  • 階層化サンプリング方法(ポリゴン別)
    • このポイント数を使う:同じように9個のポリゴンにポイント数4つを指定してみたけど、上記非階層化サンプリング方法との違いが分からなかった

2016-07-03 13-34-06.png

  • この密度の点群を使う:密度[0.0001]で指定したら、全てのポリゴンに対して半径500mに78個のランダムポイントが作成された、密度[0.01]で指定したら7822個のランダムポイントが作成された。

2016-07-03 13-36-53.png

  • 入力フィールドの値を使う:フィールドの値は整数であること。入力フィールドの値で指定されたポイント数分をランダムに配置させる

2016-07-03 13-49-17.png

バッファ領域内にランダムポイントを作成(結果)

今回の様に、半径500m以内にランダムなポイントを1つ生成するためには、ランダム点群入力フィールドの値を使うを選択する。その際には半径500mを作成したポリゴンの属性テーブルに対して整数で「1」を設定すること。この属性テーブルの「1」に対してランダムポイントを生成することとなる

最終バッファ作成

ここまでくると、500m以内でランダムになった点ポリゴンが生成されるため、このランダムポイントに対して500mのバッファを生成すれば、指定した半径内にランダムポイントを作成することが出来る