こんにちは、ナイトレイインターン生の田中です。
Wantedlyをご覧の方に、ナイトレイのエンジニアがどのようなことをしているか知っていただきたく、Qiitaに公開している記事をストーリーに載せています。
少しでも私たちに興味を持ってくれた方は下に表示される募集記事もご覧ください↓↓
はじめに
株式会社ナイトレイの劉(リュウ)です。
データアナリストとして、位置情報データを用い、地理空間解析や可視化分析から課題解決の支援などの業務に携わっています。
普段の仕事で地理空間バッファを用いてエリアを可視化する作業がしばしばあります。しかしQGISでバッファ半径ごと(100m,200m,etc.)に出力した際に、同じ操作を複数繰り返さないといけないので、作業工数が無駄していることを感じました。
そして、QGISとは別に、BIツールの一種であるTableauでも空間分析機能があり、バッファ機能も含まれていることを知り試してみました。
ここではTableauで実現できるGISのバッファ機能を紹介した上で、実例を用いてや操作手順を説明していきます。
Tableauで実現できるGISのバッファ機能
そもそもGIS領域のバッファは何でしょうか?
GISではある対象物(点・線・面)を基準として、そこから等距離内の領域のことをバッファ(またはバッファ領域)といい、バッファ領域を作成する機能をバッファ機能といいます。
GISのバッファ機能では、単に任意の領域を使って検索、解析できるだけでなく、基準の対象物と他の対象物との空間的な位置関係も解析できます。1
Tableauで実現できるGISのバッファ機能は、以下のようにまとめます。
- 経緯度情報付きのポイントデータから指定した距離に基づき、バッファを算出する事ができます。
- 空間検索でバッファと重なるかどうかによって入力フィーチャを色分けできます。
- バッファと重なる入力フィーチャの数をカウントできます。
TableauでGISのバッファ機能を実現するために使用した空間関数2
- MAKEPOINT(<latitude>, <longitude>):緯度列および経度列のデータを、空間オブジェクトに変換します。
- BUFFER(Spatial Point, distance, "units"):中心ポイントからバッファ半径を指定した単位で返します。
- DISTANCE(<geometry1>,<geometry2>,"<units>"):2 つのポイント間の距離を指定した単位で返します。
※サポートされている単位名は、メートル ("meters"、"metres"、"m")、キロメートル ("kilometers"、"kilometres"、"km")、マイル ("miles" または "mi")、フィート ("feet"、"ft") です。
MAKEPOINT(<latitude>, <longitude>)
緯度列および経度列のデータを、空間オブジェクトに変換します。
BUFFER(Spatial Point, distance, "units")
中心ポイントからバッファ半径を指定した単位で返します。
DISTANCE(<geometry1>,<geometry2>,"<units>")
2 つのポイント間の距離を指定した単位で返します。
💡サポートされている単位名は、メートル ("meters"、"metres"、"m")、キロメートル ("kilometers"、"kilometres"、"km")、マイル ("miles" または "mi")、フィート ("feet"、"ft") です。
事例説明
用意するデータ・ソフト
今回は、港区の電車駅周辺半径1m〜500m宿泊施設の実態を知りたいとのテーマで操作手順を説明したいと思います。
- 利用データ:
- 港区電車駅ポイントデータ(経緯度の付随が必要)
- 港区宿泊施設ポイントデータ
- 利用ソフト:
Tableau Desktop Professional Edition 2022.2.2
操作手順
1.用意するデータをデータソースに読み込む
1.1 電車駅データをデータソースにドラッグします。
1.2 電車駅データをダブルクリックし、宿泊施設データと内部結合させます。(ポイントデータに共通するkeyカラムがないため)
1.3 結合のところをクリックし、内部結合を選択→新しい結合句の追加→結合計算を作成します。
1.4 結合計算フィルドを以下の式を入力します。
MAKEPOINT([緯度],[経度])
1.5 右側の計算フィルドに式を入力します。
BUFFER(MAKEPOINT([Latitude],[Longitude]),5000,'meters')
1.6 結合関係をintersectsを選択します。
💡このような結合関係によると、駅周辺半径5000mにあるすべての宿泊施設をtableauで表示することができます。
2.ワークシートに移動し、駅周辺半径○メートル範囲のバッファを作成
フィーチャのバッファを算出するため、フィーチャのジオメトリ、バッファ半径の変数が必要となります。
2.1 駅ポイント・宿泊施設ポイントにジオメトリを付与する
データの空白位置に右クリック→ [計算フィールドの作成]
以下のような関数を入力します。
2.2 バッファ半径の設定
バッファ半径を任意に調整できるように、固定的な数値ではなくパラメーターを作成します。
まずは [メジャー] ペインを右クリックして、 [パラメーターの作成] を選択します。
そして開いた [パラメーター] ダイアログで、次のオプションを設定します。
- パラメーターに「半径(m)」という名前を付けます
- [データ型] を [整数] に設定します
- [許容値] を [範囲] に設定します
- [最小範囲] を1、最大値範囲を500、ステップサイズをデフォルトで設定します。
パラメーターを右クリックし、[パラメーター コントロールを表示] を選択します。
2.3 バッファ関数でバッファのジオメトリ作成
バッファの半径の数値の代わりに半径のパラメーターを入力する
[分析] > [計算フィールドの作成] を選択します。
以下の関数を入力します:
BUFFER([駅_geom],[半径(m)],'m')
3.電車駅レイヤー・宿泊施設レイヤー・バッファレイヤーの作成
3.1 駅のジオメトリと駅名をシートにドロップし、電車駅のレイヤーを作ります。
3.2 宿泊施設のジオメトリと宿泊施設名をシートにドロップし、宿泊施設のレイヤーを作ります。
3.3 バッファのジオメトリと駅名をシートにドロップし、バッファのレイヤーを作ります。
オプション:バッファの色付け・バッファの値を表示したいならメジャーネームのフィルドをバッファのレイヤーにドロップします。
3.4 画面は下記のようになっています。
4.宿泊施設が駅周辺半径○メートルの範囲に入っているかを判定・色分け
ロジックとしては、宿泊施設と駅の距離がバッファ半径より短いならバッファに入っていると判定・色分けしていきます。
4.1駅と宿泊施設の間の距離(Distance)を計算します。
[分析] > [計算フィールドの作成] を選択します。
関数を入力します:
DISTANCE([駅_geom],[施設_geom],'m')
4.2距離とバッファ半径を比較する計算フィルド(in range)を作成します。
[分析] > [計算フィールドの作成] を選択します。
関数を入力します:
[Distance]<=[半径(m)]
💡こちらの計算フィールドで、距離がバッファ半径より短いなら’True’を戻します。
距離がバッファ半径より長いなら’False’を戻します。
4.3 in rangeのフィールドを用いて判定・色分け
宿泊施設のレイヤーにin rangeのフィールドを追加、最大値に設定します。
4.4 画面は下記のようになっています。バッファに入ってるポイントが色付けています。
5.駅周辺半径○メートルの範囲に入ってる宿泊施設をカウント
5.1 宿泊施設をカウントするために、カウント用計算フィールド(total in range)を作成します。
[分析] > [計算フィールドの作成] を選択します。
以下の関数を入力します:
{FIXED [駅名]: COUNTD(IF [in range] THEN [施設名] END) }
5.2 シートにフィーチャのカウント数を表示
まずは電車レイヤーのラベルに合計(Total in range)のフィールドをドロップします。
そしてBufferレイヤーの詳細に合計(Total in range)のフィルドをドロップします
5.3 画面は下記のようになっています。
右側の半径パラメータを調整しながら、バッファと宿泊施設のカウント数も合わせて変化していきます。
以上。効率的にGISのバッファ機能をアウトプットしたい方はぜひ試してみてください!
参考
- https://club.informatix.co.jp/?p=1171
- https://help.tableau.com/current/pro/desktop/ja-jp/functions_functions_spatial.htm
最後に
私たちの会社、ナイトレイでは一緒に事業を盛り上げてくれるGISチームメンバーを募集しています!
現在活躍中のメンバーは開発部に所属しながらセールス部門と密に動いており、
慣れてくれば顧客とのフロントに立ち進行を任されるなど、顧客に近い分やりがいを感じやすい
ポジションです。
このような方は是非Wantedlyからお気軽にご連絡ください(もしくは recruit@nightley.jp まで)
✔︎ GISの使用経験があり、観光・まちづくり・交通系などの分野でスキルを活かしてみたい
✔︎ ビッグデータの処理が好き!(達成感を感じられる)
✔︎ 社内メンバーだけではなく顧客とのやり取りも実はけっこう好き
✔︎ 地理や地図が好きで仕事中も眺めていたい
一つでも当てはまる方は是非こちらの記事をご覧ください 。
二つ当てはまった方は是非エントリーお待ちしております(^ ^)
「位置情報×モビリティ.まちづくりetc事業領域拡大の為GISエンジニア募集」
https://www.wantedly.com位置情報×モビリティ.まちづくりetc事業領域拡大の為GISエンジニア募集 by 株式会社ナイトレイ
▼ナイトレイとは?