6.2. Lesson: ベクター分析

また、ベクタデータを解析することで、異なる地物が空間的にどのように相互作用しているかを明らかにすることができます。解析に関連する機能はたくさんあるので、ここではそのすべてを紹介することはしません。むしろ、問題を提起し、QGISが提供するツールを使ってそれを解決してみることにします。

このレッスンの目標: 質問を尋ね、分析ツールを使ってそれを解決すること。

6.2.1. basic GISプロセス

その前に、問題を解決するためのプロセスの概要を簡単に説明しておくと便利でしょう。それは次のものです:

  1. 問題の状態

  2. データの入手

  3. 問題の分析

  4. 結果のプレゼン

6.2.2. basic 問題

解決する問題を決定することから手順を開始しましょう。たとえば、不動産業者が以下の基準を持っている顧客のために Swellendam にある居住用の不動産を探しています:

  1. それは Swellendam にあること

  2. それは学校から車で行ける距離であること(たとえば1km)

  3. 100平方m以上の大きさであること

  4. 主要な道路から50m以内であること

  5. レストランの500m以内であること

6.2.3. basic データ

これらの質問に答えるために、以下のデータが必要になります:

  1. その地域の住宅用の物件(建物)

  2. 街の中と周辺の道路

  3. 学校とレストランの位置

  4. 建物の大きさ

これらのデータはOSMを通じて入手可能であり、このマニュアルを通じて使用したデータセットもこのレッスンに使用できることが分かるはずです。

他の地域のデータをダウンロードしたい場合は、 :ref:`Introduction Chapter ` にジャンプして、その方法を読んでください。

注釈

OSMのダウンロードは一貫したデータフィールドを持っていますが、範囲と詳細は多様になってしまいます。たとえば選択した領域にレストランについての情報が含まれていないとわかった場合は、別の地域を選択することが必要な場合があります。

6.2.4. basic Follow Along: プロジェクトを開始してデータを取得する

まず、作業するデータを読み込むする必要があります。

  1. 新しいQGISプロジェクトを始めます

  2. 必要であれば、背景地図を追加することができます。ブラウザ を開き、 XYZ Tiles メニューから OSM 背景地図をロードします。

    ../../../_images/osm_swellendam.png
  3. training_data.gpkg Geopackageデータベースには、この章で使用するほとんどのデータセットがあります:

    1. buildings

    2. roads

    3. restaurants

    4. schools

    それらを読み込み、さらに landuse.sqlite も読み込みます。

  4. レイヤの範囲を拡大すると、Swellendam, 南アフリカが表示されます。

    先に進む前に、特定の道路タイプだけを扱うために、 roads レイヤーをフィルタリングします。

    OSM データセットの中のいくつかの道路は unclassified, tracks, path, footway としてリストアップされています。これらの道路をデータセットから除外し、この演習に適した他の道路タイプに焦点を当てたいと思います。

    さらに、OSMのデータはどこでも更新されるとは限らないので、``NULL``の値も除外する。

  5. ``roads``レイヤを右クリックし、 フィルタ... を選択します。

  6. ポップアップするダイアログで、これらの地物を次の式でフィルタリングします:

    "highway" NOT IN ('footway', 'path', 'unclassified', 'track') AND "highway" IS NOT NULL
    

    NOTIN の2つの演算子を連結すると、 highway フィールドにこれらの属性値を持つすべての地物を除外することができます。

    IS NOT NULLAND 演算子を組み合わせると、 highway フィールドに値がない道路は除外されます。

    roads レイヤの横にある |indicatorFilter|アイコンに注目してください。このレイヤはフィルタが有効になっているので、プロジェクトで利用できない地物があることを思い出すのに役立ちます。

すべてのデータが入った地図は、次のように表示されます:

../../../_images/osm_swellendam_2.png

6.2.5. basic Try Yourself レイヤーCRSの変換

レイヤ内の距離を測定するつもりなので、レイヤの CRS を変更する必要があります。これを行うには、各レイヤを順番に選択し、新しい投影法で新しいレイヤに保存し、その新しいレイヤをマップにインポートする必要があります。

例えば、各レイヤを ESRI シェープファイル形式のデータセットとしてエクスポートしたり、既存の GeoPackage ファイルにレイヤを追加したり、別の GeoPackage ファイルを作成し、そこに新たに再投影したレイヤで埋め尽くしたりすることが可能です。ここでは、最後の方法を紹介しますので、 training_data.gpkg はきれいなままです。ご自分に合ったワークフローを自由に選択してください。

注釈

この例では、WGS 84 / UTM zone 34S CRSを使用していますが、あなたの地域に適したUTM CRSを使用する必要があります。

  1. レイヤ パネルで roads レイヤを右クリックします

  2. エクスポート --> 新規ファイルに地物を保存... をクリックします

  3. 名前をつけてベクタレイヤを保存 ダイアログで、 GeoPackage形式 として選択します

  4. ...ファイル名 をクリックし、新しい GeoPackage の名前を vector_analysis にします

  5. レイヤ名roads_34S に変更します

  6. CRSWGS 84 / UTM zone 34S に変更します

  7. OK をクリックします:

    ../../../_images/save_roads_34S.png

    これにより、新しいGeoPackageデータベースが作成され、roads_34S レイヤが追加されます。

  8. この作業を各レイヤに対して繰り返してください。vector_analysis.gpkg GeoPackage ファイルに元の名前の後に _34S を付けた新しいレイヤを作成し、プロジェクトから古い各レイヤを削除します。

    注釈

    既存の GeoPackage にレイヤを保存することを選択すると、QGIS はそのレイヤを GeoPackage に 追加 します。

  9. すべてのレイヤの処理が完了したら、任意のレイヤを右クリックして レイヤの領域にズーム をクリックすると、地図が関心域にフォーカスされます。

さて、OSMデータをUTM投影に変換したので、計算を始められます。

6.2.6. basic Follow Along: 問題の分析:学校と道路からの距離

QGISでは、任意のベクタオブジェクト間の距離を計算することができます。

  1. roads_34Sbuildings_34S のレイヤのみが表示されていることを確認します(作業中の地図を扱い易くするため)

  2. プロセシング ► ツールボックス をクリックして、QGISの解析の コア を開きます。基本的に、 すべての アルゴリズム(ベクタ および ラスタ分析)がこのツールボックスで利用可能です。

  3. まずは Buffer アルゴリズムを使用して roads_34S の周囲の領域を計算します。このアルゴリズムは ベクタジオメトリ グループで見つけることができます。

    ../../../_images/processing_buffer_1.png

    または、ツールボックスの上部にある検索メニューに バッファ と入力してください:

    ../../../_images/processing_buffer_2.png
  4. ダブルクリックしてアルゴリズムダイアログを開きます

  5. 入力レイヤとして roads_34S を選択し、 距離 を50に設定し、残りのパラメータは既定値を使用します。

    ../../../_images/vector_buffer_setup.png
  6. 既定の 距離 はメートル単位です。これは、入力データセットが、メートルを基本的な測定単位として使用する投影座標系なためです。コンボボックスを使って、キロメートルやヤードなど、他の投影単位を選択することができます。

    注釈

    地理座標系を持つレイヤにバッファを作成しようとすると、プロセシングは警告を発し、メトリック座標系にレイヤーを再投影するよう提案します。

  7. 既定で プロセシング は一時的なレイヤを作成し、それらを レイヤ パネルに追加します。また、その結果を GeoPackage データベースに追加することもできます:

    1. ... ボタンをクリックして、 GeoPackageに保存... を選択します

    2. 新しいレイヤの名前 roads_buffer_50m にします

    3. これを vector_analysis.gpkg ファイルに保存します

    ../../../_images/buffer_saving.png
  8. 実行 をクリックし、次に バッファ ダイアログを閉じます

    地図は次のようになっているでしょう:

    ../../../_images/roads_buffer_result.png

新しいレイヤが レイヤ リストの一番上にある場合、おそらく地図の大部分が見えなくなりますが、これで地域内の道路から50m以内のすべての地域が表示されます。

バッファの中に、それぞれの道路に対応する明確な地域があることに注意してください。この問題を解消するために;

  1. roads_buffer_50m レイヤのチェックを外し、 結果を融合する を有効にしてバッファを作成し直します。

    ../../../_images/dissolve_buffer_setup.png
  2. 出力を roads_buffer_50m_dissolved という名前で保存します

  3. 実行 をクリックして、 バッファ ダイアログを閉じます

レイヤを レイヤ パネルに追加すると、次のような表示になります:

../../../_images/dissolve_buffer_results.png

今不要な下位区分はありません。

注釈

ダイアログの右側にある Short Help は、このアルゴリズムがどのように動作するかを説明しています。より詳しい情報が必要な場合は、下部の ヘルプ ボタンをクリックすると、アルゴリズムのより詳細なガイドが表示されます。

6.2.7. basic Try Yourself 学校からの距離

上記と同じアプローチを使用し、学校のためのバッファを作成します。

半径は 1 km とします。新しいレイヤーを vector_analysis.gpkg ファイルに schools_buffer_1km_dissolved という名前で保存します。

6.2.8. basic Follow Along: 重複エリア

これで、道路から50m以内の地域と、1km以内に学校がある地域(道路を通らない直行便)が特定できました。しかし、明らかに、この両方の条件を満たす地域だけが欲しいのです。そのためには、 交差(intersect) ツールを使用する必要があります。このツールは プロセシングツールボックスベクタオーバーレイ グループで見つけることができます。

  1. 2つのバッファレイヤを 入力レイヤオーバーレイレイヤ として使用し、 vector_analysis.gpkg GeoPackage を 交差(intersection) で、 レイヤ名 road_school_buffers_intersect を選択します。残りは提案のままにしておきます(既定)。

    ../../../_images/school_roads_intersect.png
  2. 実行 をクリックします。

    下の画像の青い領域が両方の距離基準を満たしたところです。

    ../../../_images/intersect_result.png
  3. 2つのバッファレイヤを除去しそれらが重なる場所を示すものだけ残しても良いです。それがそもそも本当に知りたかったものですので:

    ../../../_images/final_intersect_result.png

6.2.9. basic Follow Along: 建物を抽出する

これで、ビルが重なるべき領域ができました。次に、その範囲にある建物を抽出したいですね。

  1. プロセシングツールボックス から、メニュー項目 ベクタ選択 ► 場所による抽出 を探します

  2. 抽出する地物のあるレイヤ`で ``buildings_34S` を選択します。空間的関係`で :guilabel:`交差する(intersect) をチェックし、 比較対象の地物のあるレイヤ`でバッファの交差レイヤを選択します。:file:`vector_analysis.gpkg に保存し、レイヤの名前を well_located_houses にします。

    ../../../_images/location_select_dialog.png
  3. 実行 をクリックしてダイアログを閉じます

  4. おそらく、あまり変化がないように見えると思います。その場合は、 well_located_houses レイヤをレイヤリストの一番上に移動し、拡大してください。

    ../../../_images/select_zoom_result.png

    赤色の建物は私たちの基準に合致しているもの、緑色の建物は合致していないものです。

  5. これで2つのレイヤーが分離され、レイヤリストから buildings_34S を削除することができます。

6.2.10. moderate Try Yourself さらに建物をフィルタ

今、私たちの学校の1キロ内や道路の50メートル内のすべての建物を表示するレイヤーを持っています。今その選択を、レストランの500メートル内にある建物を表示するだけに削減する必要があります。

上で説明したプロセスを使って、 houses_restaurants_500m という名前の新しいレイヤを作りなさい。このレイヤは well_located_houses レイヤをさらにフィルタリングして、レストランから 500m 以内にある住宅のみを表示します。

6.2.11. basic Follow Along: 正しいサイズの建物の選択

どの建物が適正規模(100平方メートル以上)かを確認するためには、その大きさを計算する必要があります。

  1. houses_restaurants_500m レイヤを選択し、メインツールバーの calculateField フィールド計算機を開く ボタンまたは属性テーブルウィンドウをクリックして フィールド計算機 を開きます

  2. 新規フィールドを作成 を選択し、 出力する属性の名前AREA に、 フィールド型小数点付き数値 (real) に、 地物 グループを選択して、 $area を選択します。

    ../../../_images/buildings_area_calculator.png

    新しいフィールド AREA には、各建物の面積 (平方メートル) が入ります。

  3. OK`をクリックします。属性テーブルの末尾に ``AREA` フィールドが追加されました。

  4. 編集を終了するには toggleEditing 編集モード切替 ボタンをクリックし、プロンプトが表示されたら編集を保存します。

  5. レイヤプロパティの ソース タブで、 プロバイダ地物フィルタ"AREA >= 100 に設定します。

    ../../../_images/buildings_area_query.png
  6. OK をクリックします。

これで地図には、開始条件に一致する100平方メートル以上の建物だけが表示されるようになりました。

6.2.12. basic Try Yourself

上記で学んだ方法で、解決策を新しいレイヤとして保存します。このファイルは同じ GeoPackage データベース内に solution という名前で保存されます。

6.2.13. In Conclusion

GISの問題解決アプローチとQGISのベクトル解析ツールを併用することで、複数の条件を持つ問題を迅速かつ容易に解決することができましたね。

6.2.14. What's Next?

次のレッスンでは、ある地点から別の地点までの道路に沿った最短距離の計算方法について見ていきます。