Qgis:ある距離の円内にランダムな点を作成
やりたいこと
ある位置情報持った物件があり、この内容を部外者へ提出する必要性に迫られることがある。しかし、その位置情報持った物件を直接相手に渡すのは企業秘密上よろしくない。そのために、多少の誤差を含めた情報として相手に渡すという状況での地図情報の作り方について説明する
データの用意
本物のデータで説明するわけにはいかないので、ここでは東京都内のバス(ポイント)停データを参考にしながら説明する。
やりたいこととしては、図のようにバス停があったとするとこの位置からランダムにxxx(m)ずらした場所に新たなポイントを指定することにする。
ずらしたい距離の指定
まず、ずらしたい距離の円を描きます。
一定距離の円を描く機能として作り方としては、まずはプロジェクトポロパティの一般情報で
計測をwgs 84/距離計測の単位をメートル(距離によってがkmも選択できます)に指定します
次にメニューから
- ベクター
- 空間演算ツール
- 固定距離バッファ
- 空間演算ツール
を選択します。
入力レイヤにポイントが入っているポリゴンを指定します
距離には100とします。(100mという意味)
線分列は10ぐらいにします(90°あたりの角度数です、多ければ多いほど円に近づきます)
これで、バス停から100m円が描けました。
円ないにランダムな点を描写
次にこの円の中にランダムな点を描写します
- ベクター
- 調査ツール
- ポリゴン内のランダムポイント
- 調査ツール
を選択します
入力レイヤには先ほど固定距離バッファで作成した100m円のポリゴンを指定します
サンプリング手法ではポイント数を選択
点の数または密度で1を指定
Runで実行します
これでランダムな1点が書かれます。
属性テーブルが無い
これで、半径100m以内のランダムな点が出来たのですが困ったことが起きました。属性テーブルの内容がコピーされないのです。昔のバージョンであったならランダムポイント生成後は、その元となった属性テーブルの要素が引継がれたのですが。私の設定が悪いのか??引継がれません。結構四苦八苦してしまったのでしょうがないため強制的に属性テーブルの要素の関係付けを行います。
属性テーブル紐付け方法
要するに以下の2つの属性テーブルを紐付けたいのです
1.100m円を生成した際に作ったポリゴンの属性テーブル
2.100m円内でランダムな点を作ったポリゴンの属性テーブル
この2つには紐付けを行うための共通テーブルがありません。そのため共通テーブル作成のために並んでいる順番に併せて「連番」を振ります
連番の作成方法は以下の通り
- フィールド計算機を開く
- 新しいフィールドを作るにチェックを入れて(デフォルトで入っていると思います)
- 出力フィールド名に連番、式に現在の行番号を格納する変数( @row_number )を入れて
- 新しいフィールドを作るにチェックを入れて(デフォルトで入っていると思います)
OKを押下しますと行番号に併せて連番が振られます。同様に100m円を生成した際に作ったポリゴンの属性テーブルに連番、100m円内でランダムな点を作ったポリゴンの属性テーブル
数値データの追加
- 属性テーブルを開きます
- フィールド計算機を選びます
- 出力フィールド名に「乱数」(実際の文字は何でも良いです)
- 式に「1」
を記入して「OK」を押下します。すると
属性テーブルの最後尾にさっき指定した名前と値が入ります