2017年08月27日

QGISでルートの最短距離を算出する  Routes and Zonesプラグイン

注意!この記事はかなり古い情報です。現在のQGISとは操作方法が違いますので注意してください


はじめに


 自治体のインターネット切り離しによって、GoogleMapYahoo地図などが使いづらくなっています。

 以前までは工事の設計などで運搬距離を算出するために、インターネットの地図サービスで経路検索を行っていましたが、いまは使えないことはないのですが、インターネットの接続に時間がかかったり、接続時間に制限があったりして、使いづらくなっています。

 オフラインで経路検索できないか、いろいろ探すと、QGISRoutes and Zonesプラグインが便利でしたので紹介します。

 QGISにはコアプラグインで「道路グラフプラグイン」という経路検索できるプラグインがありますが、「Routes and Zones」プラグインのほうが高速に、複数の経路検索ができるので便利でした。


2017_08_26_09.png




準備するもの


 Routes and Zonesプラグインを利用するには、次のものを準備する必要があります。


・道路などのラインデータ

 座標参照系はWGS84EPSG:4326)にします。OpenStreetMapなどの道路ラインデータを使って作成します。OpenStreetMapのデータは「bbbike.org」などでダウンロードできます。OpenStreetMapのデータには、歩道や自転車道などの車の通れない道路(bridlewaycyclewayfootwayなど)も記録されていますので、事前に削除しておきましょう。また、高速道路(motorwayを使わないでルート検索をする場合には、高速道路も削除しておくといいでしょう。


・出発点と目的地のポイントデータ

 座標参照系をWGS84EPSG:4326)にします。シェープファイルなどで新規に作ります。「IDフィールド(数値)」と「Nameフィールド(テキスト)」が必要です。
 ただし、出発地と目的地はデリミティッドテキストレイヤだと計算されませんので、シェープファイルに変換してください。


Routes and Zonesプラグイン

Routes and Zonesプラグインは「実験的なプラグイン」です。

 メニュー「プラグイン」→「プラグインの管理とインストール」の「設定」を選択し、「実験的プラグインも表示する」にチェックを付けてから、検索すると一覧に表示されるので、インストールします。




プラグインフォルダから必要なファイルをコピー


 経路検索をするためのプロジェクトファイルを作成します。そのために、データを一つのフォルダに保存します。

Routes and Zonesを利用するには、計算した結果を保存するためのレイヤが必要ですが、そのレイヤファイルは、プラグインをインストールしたフォルダにサンプルとして保存されています。

 通常は、「C:\Users\【ユーザー名】\.qgis2\python\plugins\raz\sample-data」に保存されています。サンプルデータのフォルダ内のraz data.sqliteをコピーして、経路検索のためのフォルダに保存します。

2017_08_26_02.png


 また、「道路ラインデータ」「出発点ポイントデータ」「目的地ポイントデータ」も同じフォルダに保存します。




レイヤを追加する


 経路検索プロジェクトにレイヤを追加します。道路ラインデータと出発点、目的地データは「ベクタレイヤの追加」でプロジェクトに追加します。

raz data.sqliteにはルート(Route)と検索用のデータベース(verylong)が格納されています。この2つのレイヤを次の手順でプロジェクトに追加します。


  • Spatialiteレイヤの追加」を選択し、「新規」ボタンをクリックします。
  • raz data.sqlite」を選択し、「接続」ボタンをクリックします。
    2017_08_26_04.png
  • 「ジオメトリを持たないテーブルもリストする」にチェックを付けます。
  • リストの中から「route」と「verylong」を選択して、「追加」ボタンをクリックします。(複数選択する場合は、CTRLキーを押しながら選択)
    2017_08_26_05.png

レイヤの追加に成功すると、下図のようになります。

2017_08_26_06.png




プロジェクトの座標系を投影座標系にする


 ※2017年12月10日追記
 レイヤの座標系をすべて同じにしておく必要がありますが、レイヤの座標系は地理座標系でも投影座標系でも構いません。
 しかし、プロジェクトの座標系は投影座標系でなければ、正しく距離が計算されないようです。
 プロジェクトの座標系が地理座標系の場合、オンザフライCRS変換を有効にして、プロジェクトの座標系(CRS)を平面直角座標系などの投影座標系に変更してください。



出発点と目的地を作図する


 出発点レイヤと、目的地レイヤに距離を計算したいポイントを作図します。地物を追加するときに、「ID」と「Name」フィールドにデータを入力しておきます。




Routeレイヤにもともとある地物を削除する


Routeレイヤには、サンプル用に記録されている地物があるので、事前に削除しておくといいです。




Routes and Zonesプラグインを実行する


 メニュー「プラグイン」→「Routes and zones calculate tool」→「Route calculate tool」を選択します。

2017_08_26_07.png


 「Layer source(from points)」には出発点ポイントを選択します。「ID field」にはIDフィールド、「Name field」にはNameフィールドを選択します。

 「Layer target(from points)」には目的地ポイントを選択します。「ID field」にはIDフィールド、「Name field」にはNameフィールドを選択します。

 出発地と目的地は、事前に選択した地物のみを対象にすることもできます。その際は「Only selected points」にチェックを付けます。

 「Map layer road network」には道路ラインレイヤを選択します。

 「Maximum route length(kilometers)」には、ルートを計算する最大距離を入力します。例えば100kmと入力すると、100kmまでの範囲にある目的地を検索します。

 「Map layer for calculated routes」には、routeレイヤを選択します。

 「Table routes,longer maximun」にverylongレイヤを選択します。

2017_08_26_08.png


 「Run」ボタンをクリックすると、出発点から目的地までの最短ルートを検索し、Routeレイヤに作図します。

2017_08_26_09.png


routeレイヤの属性データを確認すると、出発点と目的地の名前と距離(pathフィールド)が記録されています。


2017_08_26_10.png




まとめ


QGISのコアプラグインである道路グラフプラグインは、道路ラインの地物が多いとエラーになることも多いですが、Routes and Zonesプラグインは、道路レイヤの地物数が多くても、高速で検索を行うことができます。

 インターネット地図であるGoogleMapYahoo地図でもルート検索ができますが、いちいち地点を選択しなければならない手間もありますし、地図の利用規約により、印刷して仕事で利用できない場合もあります。

 そのような場合には、OpenStreetMapなどのデータを使った地図を使うと自由に利用することもできます。

 便利なプラグインですので、利用してみてください。



注:32bitのOSだと、道路レイヤの地物数が多いとクラッシュダンプする場合があるようです。

 その場合は、道路の地物数を減らして、再度実行してみてください。



2018年2月18日追記

職場で説明用に作ったスライドを公開しています。参考までに。



posted by kouichi at 01:09| Comment(9) | QGIS | このブログの読者になる | 更新情報をチェックする

2017年07月16日

写真の位置をQGISに表示しよう(Photo2KMZプラグイン)

注意!この記事はかなり古い情報です。現在のQGISとは操作方法が違いますので注意してください

スマートフォンやGPS付きデジカメで撮影した位置情報の付いた写真がある場合、その位置情報を使ってQGISにポイントを作成するには「Photo2Shape」プラグインがあります。

Photo2Shapeプラグインのエラー対処法

写真とGPSをリンクさせてQGISで写真を表示する方法


しかし、Photo2Shapeプラグインは、「Exifread」という別のファイルをQGISのインストールフォルダ(しかもかなり深い場所)にコピーしなければなりません。また、ExifreadのバージョンによってはPhoto2Shapeが動作しないなどの問題もあります。(2017年7月現在もExifreadのバージョンの違いでエラーが出ます。エラーが出る場合には、Exifreadを最新版に更新してください。)


たまたまPhoto2Shapeを更新しようと思って、QGISの「プラグインの管理とインストール」で「Photo」と検索するとPhoto2KMZというプラグインを発見しました。


試してみると、写真フォルダ、ファイル名を半角英数字にしなければいけないのはPhoto2Shapeと一緒ですが、Exifreadなどの別のファイルも必要ないし、GoogleEarthでも利用できるKMZファイルと、ファイル名と座標値が記録されたCSVファイルが作成されるので、Photo2Shapeよりもこちらのほうが使いやすい人という方もいると思います。



Photo2KMZの使い方




  1. 位置情報が記録された写真を準備します。写真の保存フォルダ、ファイル名は、半角英数字のみにしてください。

  2. メニュー<プラグイン>→<Photo2KMZ>を選択して、Photo2KMZプラグインを起動します。

  3. Select Folder」ボタンをクリックして、写真が保存されているフォルダを選択します。

  4. Save File Name〜」に作成するKMZファイルのファイル名を入力します。
    KMZ
    ファイルとCSVファイルは、写真と同じフォルダに作成されます。

  5. OK」ボタンをクリックすると、KMZファイルの作成が始まります。

  6. KMZファイルが作成されると、メッセージが表示され、GoogleEarthがインストールされていれば、GoogleEarthが起動して、写真のポイントが表示されます。



作成されたKMZファイル




Photo2KMZプラグインで作成されたKMZファイルのは写真も同梱されます。そのため、ファイルサイズが大きくなります。

GoogleEarthで利用するのであれば、写真が同梱されたKMZファイルは便利ですが、QGISではポイントデータのみのkmlファイルがあればOKです。

KMZファイルは、zip圧縮されたファイルですので、zipファイルと同様に展開して、kmlファイルのみコピーすることでkmlファイルをのみを保存できます。



作成されたCSVファイル




KMZファイルと一緒に作成されるCSVファイルは、QGISの「デリミティッドテキストレイヤの追加」でポイントレイヤとして地図に表示できます。




ラベル:QGIS Photo2KMZ 写真
posted by kouichi at 16:54| Comment(0) | QGIS | このブログの読者になる | 更新情報をチェックする

2017年07月06日

雨量の等高線【等雨量線】をQGISで作る

注意!この記事はかなり古い情報です。現在のQGISとは操作方法が違いますので注意してください


はじめに


林地で災害が起きて、それが雨量に起因する場合、国の補助を受けて災害復旧する場合の採択基準に一定以上の雨量(80mm/24hなど)が発生している事実が必要です。

その際、災害発生現場が雨量観測所から離れている場合、観測所からの距離配分で現場の雨量を推測しますが、紙の地図で自作するのは面倒なものです。

そこで、QGISを使うと、下の図のような雨量の等高線「等雨量線」を簡単に作成することが可能です。


Image 2017_07_03_005922.png

図 等雨量線を作成した地図


この記事で作成する、雨量ラスタレイヤの作成方法は、2017年6月30日に開催されたFOSS4G HokkaidoのQGISラスタ中級編ハンズオンで行われた内容をヒントにしています。




データの準備


必要なデータは次のとおりです。

アメダス地域気象観測所一覧データ(気象庁)
CSVファイルでダウンロードできます。
緯度経度の度と分が別のフイールドになっているので、一つのフィールドに修正します。
度分秒も10進数に直しておくと後で扱いやすいと思います。
Image 2017_07_03_213811.png
図 雨量観測所の座標を10進数に修正した表


雨量データのCSV(気象庁)
必要な観測地点を選択して、必要な期間と必要なデータを選択します。今回は2016年8月17日の北海道十勝地方のデータを利用してみます。




観測所のCSVをQGISに読み込む


気象観測所のCSVデータをQGISで読み込みます。

QGISでは「デリミティッドレイヤの追加」でCSVファイルを選択します。すると、次のような画面が表示されるので、「Xフィールド」に「経度」、「Yフィールド」に「緯度」を選択します。

Image 2017_07_03_223324.png

図 デリミティッドテキストの画面


「OK」ボタンをクリックすると、マップキャンバスに観測所のポイントが表示されます。

その際、「CRSが定義されていません」とエラーが表示されるので、レイヤを右クリックして「レイヤのCRSを設定する」を選択し「WGS84(EPSG:4326)」を選択します。


ここまでの手順で作成した、全国の気象観測所のポイントシェープファイルをここに置いておきます。

気象観測所のデータは、アメダス地域気象観測所一覧データ(気象庁)から作成しました。



必要な観測所のみを保存する


全国のポイントは必要ないと思うので、必要な観測所のみ保存します。

自分に必要なポイントのみ選択して、レイヤを右クリックして「名前をつけて保存する」を選択します。

「形式」は、今回はシェープファイルに保存しますので「ESRI Shapefile」を選択します。

座標系は、WGS84のままでもいいですし、平面直角座標系に変更しても構いません。

「選択地物のみ保存する」にチェックを付けて、「OK」ボタンをクリックすると、選択したポイントだけを新しいファイルで保存できます。

Image 2017_07_03_223718.png

図 レイヤを名前を付けて保存する



必要な雨量データを準備する


気象庁の「過去の気象データ・ダウンロード」で、必要な地点の選択、項目の選択、期間の選択、オプションの選択をして、「CSVファイルをダウンロード」すると、必要な日にちの雨量データ(CSVファイル)をダウンロードできます。

しかし、ここでダウンロードできるCSVファイルは、観測地点が列になって、データが行になっています。

このあとで、先程作った観測所レイヤに雨量データを結合したいのですが、これでは行列が逆になっています

Excelなどの表計算ソフトでは、行列を入れ替えてコピーすることができるので、その機能を利用して、行列を入れ替えたデータを作ります。

Image 2017_07_03_224629.png

図 Excelなどで雨量データの行列を入れ替え

行列を入れ替えたあと、不要なデータを削除して、観測所の名前と雨量のみにして、Excel2003形式ファイル(xls)で保存します。複数シートが有る場合は、シート名をわかりやすくしておくといいです。

Image 2017_07_03_230840.png

図 雨量データの例


ここでCSVファイルではなくExcelファイルを利用するのは、数字を数字としてQGISに読み込ませるためです。




雨量データをレイヤに追加する


作成した雨量のExcelファイルをQGISのレイヤに追加します。Excelファイルをドラッグして、QGISの画面にドロップすると、複数シートが有る場合には、シート選択ダイアログが表示されるので、シートを選択して「OK」ボタンをクリックするとレイヤに雨量データが追加されます。

Image 2017_07_03_231656.png

図 Excelファイルをレイヤに追加するときにシートを選択する


Image 2017_07_03_231739.png

図 レイヤに追加されたExcelデータ


ExcelファイルをQGISのレイヤに追加すると、文字コードが「UTF-8」でなければなりません。レイヤを右クリックして、プロパティを選択し、一般情報の「データソースエンコーディング」を「UTF-8」にします。

Image 2017_07_03_231941.png

図 レイヤプロパティで文字コードを設定



観測所データと雨量データを結合する


観測所データと雨量データを「観測所名」で結合します。

観測所ポイントデータを右クリックして、プロパティを選択します。「結合」を選択して、「+」ボタンをクリックして、結合ダイアログを表示します。

「レイヤの結合」に雨量データを選択します。「フィールドを結合する」で、雨量データの観測所名フィールドを選択します。「ターゲットフィールド」で観測所データの観測所名を選択します。

「フィールドの接頭辞」にチェックを付けて、テキストボックスの中を空白にします。

「OK」ボタンをクリックすると、結合ルールが登録されます。

Image 2017_07_03_232827.png

図 レイヤプロパティの結合の設定

結合ルールはいつでも編集できます。

観測所データの属性テーブルを確認すると、雨量データが追加されています。

Image 2017_07_03_233017.png

図 結合した雨量データ



結合したレイヤを名前をつけて保存


結合したフィールドは仮想的に結合しているだけなので、次のステップで選択できません。そこで、データを結合した状態の新しいレイヤを作成するために、レイヤを「名前をつけて保存」します。

雨量を結合した観測所レイヤを右クリックして、「名前をつけて保存する」を選択します。

ファイルの保存先を選択して、「OK」ボタンをクリックすると、新しいレイヤが作成されます。

紛らわしいので、元のレイヤは削除しておきましょう。

Image 2017_07_05_232057.png

図 雨量観測所に雨量データを結合した新しいレイヤ




「変換プラグイン」の確認


次のステップの「データ補間」を利用するには、「変換プラグイン」が有効になっている必要があります。

「メニュー「プラグイン」→「プラグインの管理とインストール」で「インストール済み」を選択し、「変換プラグイン」にチェックがついているか確認します。チェックが付いていなければチェックを付けます。

Image 2017_07_05_232410.png

図 変換プラグイン



「データ補間」で雨量ラスタを作成


観測所の雨量データを使って、観測所間のデータを補間した雨量ラスタレイヤを作成します。雨量ラスタレイヤを作成することで、現場の雨量を推定できます。

メニュー「ラスタ」→「データ補間」→「データ補間」を選択します。

「入力」の「ベクタレイヤ」に観測所レイヤを選択し、「補完する属性」で雨量データのフィールドを選択します。

「追加」ボタンをクリックすると、リストに選択したレイヤとフィールドが追加されます。

リストに追加されると、その範囲の座標が自動入力されます。

「出力」の「カラム数」「行数」を設定します。範囲の大きさで適切な数値を設定してください。数字を大きくすると、ラスタのメッシュが小さくなり、メッシュ数が多くなります。

「出力ファイル」で、ラスタレイヤを保存するファイルを指定します。ここで指定するフォルダ名、ファイル名は半角英数字のみとして、日本語を含まないようにしてください。

「OK」ボタンをクリックすると、ラスタレイヤが作成されます。

Image 2017_07_05_233109.png

図 データ補間の設定画面

Image 2017_07_05_233610.png

図 作成された雨量ラスタレイヤ

ラスタレイヤのファイルは拡張子「asc」と「prj」というファイルが作成されます。




等雨量線を作成する


雨量ラスタレイヤのメッシュには、観測所間のデータを補間した雨量が記録されています。雨量をスタイルで色分けすることはできますが、地図を見ただけで雨量を確認することはできません。

そこで同じ雨量を結んだ線(ライン)の「等雨量線」をベクタレイヤで作成します。

メニュー「ラスタ」→「抽出」→「等高線」を選択します。

「入力ファイル(ラスタ)」に雨量ラスタレイヤを選択します。

「等高線(ベクタ)を出力するファイル名」で保存するベクタレイヤのファイル保存先を設定します。

この時、入力ファイル、出力ファイルともにフォルダ名、ファイル名は半角英数字のみとし日本語は使わないでください

「属性カラム名」にチェックを付けてください。フィールド名は変更しなくても構いません。フィールド名は半角英数字のみとしてください

「OK」ボタンをクリックすると、「処理が完了しました」とメッセージが表示され、等雨量線が作成されます。「閉じる」ボタンで終了します。

Image 2017_07_05_235259.png

図 等高線の設定画面

Image 2017_07_05_235536.png

図 作成された等雨量線

等雨量線のシェープファイルは、上で指定した出力ファイルで指定したフォルダ内に「contour」という名前のシェープファイルで保存されます。


レイヤの順序を設定して、見やすいようにします。




等雨量線のスタイルとラベルの設定


等雨量線のスタイルとラベルをせっています。

ラインのスタイルは見やすい色と太さを選択してください。

ラベルは「ELEV」フィールドを選択して、線上に表示します。「バッファ」か「背景」を設定すると見やすいでしょう(画像は背景を楕円で設定した例)。

(画像では、雨量ラスタレイヤも「単バンド疑似カラー」でグラデーション分類しています)

Image 2017_07_06_000018.png

図 スタイルとラベルを設定した等雨量線



おわりに


はじめはすこしステップが多いのでわかりづらいかもしれませんが、慣れれば簡単に等雨量線を作成できます。

記事で作成したプロジェクトファイルとレイヤファイルもここに置いておきますので参考にしてください。

ラベル:QGIS 災害 等雨量線
posted by kouichi at 00:31| Comment(0) | QGIS | このブログの読者になる | 更新情報をチェックする
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。