よもやま話β版

よもやま話を書きます。内容はぺらぺら。自由に書く。

Googleデータポータルの「ラインマップ」をとりあえず使ってみたい

※注意:必要なデータを自前で用意するのはめっっっちゃ大変みたいだ。

Googleデータポータルの「ラインマップ」を使ってみたので記録しておく。
公式ヘルプはこちら Google Maps reference - Data Studio Help

まずサンプルをとりあえず見たい

1. GoogleCloudで、空でも良いので新しいプロジェクトを作っておく。後で利用する。

https://console.cloud.google.com/ にアクセス(※要Googleアカウント)し、上部「プロジェクトの選択」 > 「新しいプロジェクト」 > 任意のプロジェクト名を設定して「作成」する。

2. https://datastudio.google.com/ にアクセスし「空のレポート」を作る。(初回でアカウントの設定完了を求められたら、よしなにやっておく)

3. データに接続の選択が出てくるので「BigQuery」を選ぶ。 ※「ラインマップ」を利用したい場合「BigQuery」を使う形でないとダメらしい。CSVをアップロードして読み込ませても、この後の設定の「地理空間フィールド」が利用できずに失敗する。 接続の承認を求められたら、承認しておく。

4. 接続できたら「一般公開データセット」> ( 1で作ったプロジェクト ) > geo_us_roads > all_roads_01 を選び、「追加」を押す。確認ダイアログが出たら「レポートに追加」を押す。

5. グラフを追加 > ラインマップを選ぶ。

6. 「位置」項目が "ディメンションが無効です" となってしまっているので、×を押して削除してあげると、正常に読み込みが完了する。肝要なのは「地理空間フィールド」にroad_geomが設定されていることのようだ。この「地理空間フィールド」は、BigQuery経由で読み込んだときのみ設定できる様子。(動作見た限りでは...2022年8月時点)

↓こうなる

ところで geo_us_roads の all_roads_01 の中身を見たい

一応、この「road_geom」の中身を確認しておきたい。 Google公式ヘルプの

このサンプルは、BigQuery US Roads 一般公開データセットを使って作成されました。

のリンクから飛ぶと、次のページに遷移する。

https://console.cloud.google.com/marketplace/product/united-states-census-bureau/all-roads?project=default-demo-app-9bff5

「データセットを表示」からみると、データセット情報の詳細が確認できる。
このデータセットは一般公開なので、この「データセット ID」(このデータの場合は「bigquery-public-data.geo_us_roads」)を使ってクエリを実行して中身をもらってくることができる。
参考: Using Line Maps in Google Data Studio | by Christianlauer | CodeX | Jul, 2022 | Medium

隣の「エディタ」タブを開き、次のクエリを入力して「実行」する。

SELECT * FROM `bigquery-public-data.geo_us_roads.all_roads_01` LIMIT 1000

クエリ結果から「road_geom」の中身が次のような内容であることがわかった。

LINESTRING(-88.40049 30.474455, -88.399889 30.474699, -88.399459 30.474874, ...(中略)... , -88.009722 30.687742, -88.006968 30.686988)

緯度経度の集まりを LINESTRING() でまとめたものらしい。 線というのは結局のところ、点の集まりなので、1本の道をできるだけ細かい連続の座標で表したものと考えるとよい。

自力で生成したらどうなるか

ここから一歩前進して、自力でこの LINESTRING() を作ってみたい。 ものは試しに、2点間の緯度経度の値を入れてみる。

  • 日比谷公園 ... 東経 139.755308、北緯 35.673848
  • 有楽町駅 ... 東経 139.762817、北緯 35.674689

緯度経度はGoogleマップに特定の点を打った時に出てくる値を使用した。

次のようなcsvを作って、sample_road.csv という名前をつけてUTF-8で保存した。

road_geom,road_id,full_name
"LINESTRING(139.755308 35.673848,139.762817 35.674689)","1","日比谷公園〜有楽町駅"

肝要なところとしては、各要素を " "で括っているところである。これがないとcsvとして読み込ませた時に、特にLINESTRINGの部分が結構大変なことになる。また、「LINESTRING(東経 北緯,東経 北緯,...)」というように書く必要がある点に注意。東経と北緯の区切りは半角スペースである。

これをBigQueryで読み込む。

  1. https://console.cloud.google.com/bigquery にアクセス
  2. 左側「エクスプローラ」から任意のプロジェクトの「...」を選択し、「データセットを作成」
  3. データセットID、データのロケーションを任意に入力し「データセットを作成」
  4. データセットができたら左側「エクスプローラ」に表示される。さらに「...」を選んで「テーブルを作成」
  5. 良い感じにフォームを埋めていき、「テーブルを作成」する
  6. テーブルの作成元: アップロード
  7. ファイルを選択: (sample_road.csv を選ぶ)
  8. ファイル形式: CSV
  9. テーブル: (好きな名前をつける...今回は「sample01」とする)
  10. スキーマ: (フィールドを3つ追加)
    • road_geom (type: GEOGRAPHY)
    • road_id (type: INTEGER)
    • full_name (type: STRING)
  11. 詳細オプション > スキップするヘッダー行: 1

ちょっと待つと、新しいテーブルが作成される。 プレビューを見てみると、ちゃんと中身が入っていることがわかる。

これを GoogleDataPortal (https://datastudio.google.com/) から読み込んでみる。 任意のレポート > データを追加 > プロジェクト・データセット・表 を選んで「追加」する。

グラフを追加 > ラインマップ を選び、データセットを新しく読み込んだものを選ぶ。 - 「位置」を空にする - 「地理空間フィールド」に "road_geom" を指定する

と、意図した2点間の距離が描画された。

  • ※データセットが反映されないときはリロード
  • ※なかなかグラフに反映されないときは、サンプルで作って表示が完了しているアメリカの道路データのグラフから、データセットを切り替える作戦を使うとうまく読み込んでもらえるケースがあった。

この LINESTRING(...) に含める点を細かくすればするほど、いい感じの線として描画されるわけだ。

road_geom,road_id,full_name
"LINESTRING(139.755308 35.673848,139.756406 35.673463,139.757266 35.673199,139.757624 35.673133,139.757851 35.673357,139.758127 35.673621,139.759539 35.675071,139.761226 35.673832, 139.762476 35.674807)","1","日比谷公園〜有楽町駅"

なかなか大変だったけど、うまく連続した緯度経度の点を生成できれば、色々使えるかも。

(もうちょっとスクショを載せようかと思っていたが、力尽きたのでリリース。後日追加するかも。)