このドキュメントでは、Google Cloud Platform BigQuery と Google Maps Platform Datasets API で位置情報を使用して地図データを可視化するためのリファレンス アーキテクチャと例について説明します。たとえば、オープンな自治体データを分析する、通信カバレッジ地図を作成する、モバイル車両の移動経路を可視化するなどです。
地図データの可視化は、ユーザーを引き付け、位置情報データの空間的な分析情報を明らかにするための強力なツールです。位置情報とは、ポイント、ライン、ポリゴンの対象物を含むデータです。たとえば、天気マップは、ユーザーが旅行を把握して計画し、嵐に備えるのに役立ちます。ビジネス インテリジェンス マップは、ユーザーがデータ分析から分析情報を得るのに役立ちます。通信マップは、ユーザーが特定のサービスエリアにおけるプロバイダの通信範囲と品質を把握するのに役立ちます。
しかし、アプリ デベロッパーにとって、大規模な地図データを可視化し、高いパフォーマンスと優れたユーザー エクスペリエンスを提供するのは困難です。大規模なデータはクライアントサイドのメモリに読み込まれるため、地図の初回読み込みに時間がかかる。メモリと GPU の制約がある低価格帯のスマートフォンなど、すべてのデバイスでパフォーマンスが良好である必要があります。最後に、デベロッパーは、大規模なデータに対してポータブルで信頼性が高く、パフォーマンスの高い大規模データ レンダリング ライブラリを選択する必要があります。
リファレンス アーキテクチャ
大規模なデータ ビジュアリゼーションを使用するアプリを開発するには、主に 2 つのコンポーネントが必要です。
- 顧客のバックエンド - 処理やストレージなど、すべてのバックエンド アプリのデータとサービス。
- カスタマー クライアント - 地図可視化コンポーネントを含むアプリのユーザー インターフェース。
以下のシステム図は、これら 2 つのコンポーネントがアプリユーザーである Google Cloud および Google Maps Platform とやり取りして、大規模なデータ可視化アプリを作成する方法を示すシステム図です。
設計上の考慮事項
Google Cloud と Google Maps Platform を使用してパフォーマンスの高いデータ可視化を作成するには、いくつかの設計上の考慮事項があります。
- ソースデータのサイズと更新頻度。
- GeoJSON 形式のソースデータが 5 MB 未満である場合や、ライブ気象レーダー予報など、非常に頻繁に更新される場合は、アプリで GeoJSON オブジェクトとしてデータをクライアントサイドで提供し、deck.gl レイヤでレンダリングすることを検討してください。
- データのサイズが 5 MB を超え、更新頻度が 1 時間に 1 回以下の場合は、このドキュメントの Datasets API アーキテクチャを検討してください。
- データセットは、最大 350 MB のサイズのファイルをサポートしています。
- データが 350 MB を超える場合は、Datasets に渡す前にソースファイル内のジオメトリ データをプルーニングまたは簡素化することを検討してください(下記のデータのプルーニングをご覧ください)。
- スキーマと形式
- データに、特徴ごとにグローバルに一意の ID プロパティがあることを確認します。一意の ID を使用すると、特定の対象物を選択してスタイル設定したり、対象物にデータを結合して可視化したりできます(「クリック」ユーザー イベントで選択した対象物にスタイル設定するなど)。
- Datasets API 仕様に従って、有効な列名、データ型、GeoJSON オブジェクトの型を使用して、データを CSV または GeoJSON 形式にします。
- BigQuery からデータセットを簡単に作成できるように、SQL CSV エクスポートに
wkt
という名前の列を作成します。データセットは、wkt
という名前の列から Well-Known Text(WKT)形式でCSV からジオメトリをインポートできます。 - データが有効なジオメトリとデータ型であることを確認します。たとえば、GeoJSON は WGS84 座標系、ジオメトリの巻き順序などである必要があります。
- geojson-validate などのツールを使用して、ソースファイル内のすべてのジオメトリが有効であることを確認します。または、ogr2ogr を使用して、ソースファイルを形式または座標系間で変換します。
- データのプルーニング
- 特徴のプロパティの数を最小限に抑える。実行時に、一意の識別子キーに基づいて追加のプロパティを機能に結合できます(例)。
- 可能な場合はプロパティ オブジェクトに整数データ型を使用して、タイルの保存容量を最小限に抑え、クライアント アプリで HTTPS 経由で読み込むタイルのパフォーマンスを維持します。
- 非常に複雑な対象物ジオメトリを簡素化または集約します。複雑なポリゴン ジオメトリに対して ST_Simplify などの BigQuery 関数を使用することを検討してください。これにより、ソースファイルのサイズを削減し、地図のパフォーマンスを向上させることができます。
- タイリング
- Google Maps Datasets API は、ウェブまたはモバイルの Maps SDK で使用するために、ソースデータ ファイルから地図タイルを作成する API です。
- 地図タイルは、ズームベースのインデックス システムで、ビジュアル アプリにデータをより効率的に読み込むことができます。
- 地図タイルは、低いズームレベルでは、密度の高い対象物や複雑な対象物を削除することがあります。ユーザーが州または国にズームアウト(z5 ~ z12)すると、都市または地区にズームインした(z13 ~ z18)ときとは異なって表示される場合があります。
例 - ロンドンの鉄道
この例では、リファレンス アーキテクチャを適用して、GCP と Google マップを使用してウェブ アプリケーションを作成し、Open Street Map(OSM)データからロンドンのすべての鉄道を可視化します。
前提条件
- BigQuery サンドボックスと Cloud コンソールへのアクセス
- GCP プロジェクトと請求先アカウントが設定されていることを確認します。
ステップ 1 - BigQuery でデータにクエリを実行する
[BigQuery の一般公開データセット] に移動します。データセット「bigquery-public-data」とテーブル geo_openstreetmap.planet_features
には、考えられるすべての特徴を含む、世界全体の Open Street Map(OSM)データが含まれています。amenity
、road
、landuse
など、クエリで使用可能なすべての機能については、OSM Wiki をご覧ください。
Cloud Shell または BigQuery Cloud コンソール(https://console.cloud.google.com)を使用して、SQL でテーブルをクエリします。以下のコード スニペットでは、bq query コマンドで、境界ボックスと ST_Intersects() 関数を使用して、ロンドンのみに絞り込まれたすべての鉄道をクエリしています。
Cloud Shell からこのクエリを実行するには、以下のコード スニペットを実行して、環境のプロジェクト ID、データセット、テーブル名を更新します。
bq query --use_legacy_sql=false \
--destination_table PROJECTID:DATASET.TABLENAME \
--replace \
'SELECT
osm_id,
feature_type,
(SELECT value
FROM unnest(all_tags)
WHERE KEY = "name") AS name,
(SELECT value
FROM unnest(all_tags)
WHERE KEY = "railway") AS railway,
geometry as wkt
FROM bigquery-public-data.geo_openstreetmap.planet_features
WHERE ("railway") IN (SELECT key FROM unnest(all_tags))
AND ST_Intersects(
geometry,
ST_MakePolygon(ST_MakeLine(
[ST_GeogPoint(-0.549370, 51.725346),
ST_GeogPoint(-0.549370, 51.2529407),
ST_GeogPoint(0.3110581, 51.25294),
ST_GeogPoint(0.3110581, 51.725346),
ST_GeogPoint(-0.549370, 51.725346)]
))
)'
このクエリは次の結果を返します。
- 各対象物の一意の識別子
osm_id
feature_type
(点、線など)- 特徴の
name
(例:Paddington Station
) railway
タイプ(メイン、観光、軍事など)- 対象物の
wkt
- WKT 形式のポイント、ライン、ポリゴンのジオメトリ。WKT は、BigQuery の Geography 列がクエリで返す標準データ形式です。
注 - データセットを作成する前にクエリ結果を視覚的に検証するには、Looker Studio を使用して BigQuery のダッシュボードでデータをすばやく可視化します。
テーブルを Google Cloud Storage バケットの CSV ファイルにエクスポートするには、Cloud Shell で bq extract コマンドを使用します。
bq extract \
--destination_format "CSV" \
--field_delimiter "," \
--print_header=true \
PROJECTID:DATASET.TABLENAME \
gs://BUCKET/FILENAME.csv
注: Cloud Scheduler を使用して各ステップを自動化し、データを定期的に更新できます。
ステップ 2 - CSV ファイルからデータセットを作成する
次に、Google Cloud Storage(GCS)のクエリ出力から Google Maps Platform データセットを作成します。Datasets API を使用すると、データセットを作成し、GCS でホストされているファイルからデータセットにデータをアップロードできます。
始めに、GCP プロジェクトで Maps Datasets API を有効にして、API のドキュメントを確認します。アプリのバックエンドのロジックから Datasets API を呼び出すための Python クライアント ライブラリと Node.js クライアント ライブラリがあります。また、Cloud コンソールでデータセットを手動で作成するための データセット GUI もあります。
データセットのアップロードが完了すると、データセットの GUI でデータセットをプレビューできます。
ステップ 4 - データセットをマップ ID に関連付ける
データセットが作成されたら、関連付けられた地図のスタイルでマップ ID を作成できます。地図スタイル エディタで、マップ ID とスタイルをデータセットに関連付けることができます。ここでは、Cloud ベースのマップのスタイル設定を適用して、地図の外観をカスタマイズすることもできます。
ステップ 5 - クライアント アプリのマップ ビジュアリゼーションを作成する
最後に、Maps JS API を使用して、データセットをクライアントサイドのデータ可視化アプリに追加できます。前の手順でデータセットに関連付けた mapID を使用して、地図オブジェクトを初期化します。次に、データセット レイヤのスタイルとインタラクティビティを設定します。詳しくは、データセットを使用したデータドリブン スタイル設定に関するガイドをご覧ください。
Maps JS API を使用すると、スタイルをカスタマイズしたり、スタイルを動的に変更するイベント ハンドラを追加したりできます。ドキュメントの例をご覧ください。以下では、属性「feature_type」に基づいて、この例のポイントと線の特徴スタイルを作成する setStyle 関数を定義します。
function setStyle(params) {
const map.getDatasetFeatureLayer("your-dataset-id");
const datasetFeature = params.feature;
const type = datasetFeature.datasetAttributes["feature_type"];
if (type == "lines") {
return {
fillColor: "blue",
strokeColor: "blue",
fillOpacity: 0.5,
strokeWeight: 1,
}
} else if (type == "points") {
return {
fillColor: "black",
strokeColor: "black",
strokeOpacity: 0.5,
pointRadius: 2,
fillOpacity: 0.5,
strokeWeight: 1,
}
}
}
注 - データセットのアトリビューションは必ず地図アプリに追加してください。OSM のアトリビューションを追加するには、OSM のガイドラインに沿って、ドキュメントのアトリビューション コードの例に従ってください。
上記のコードをシングルページ ウェブアプリで初期化すると、次の地図データの可視化が生成されます。
ここまでで、setStyle() 関数で地図の可視化を拡張し、特徴をフィルタするロジックを追加したり、ユーザー操作に基づいてスタイルを追加したり、他のアプリとやり取りしたりできます。
まとめ
この記事では、Google Cloud と Google Maps Platform を使用した大規模なデータ可視化アプリケーションのリファレンス アーキテクチャと実装例について説明しました。このリファレンス アーキテクチャを使用すると、Google Maps Datasets API を使用して、GCP BigQuery 内の任意のデータから、あらゆるデバイスでパフォーマンスの高い位置情報可視化アプリを作成できます。
次のアクション
その他の情報:
- Google Maps Platform Datasets API のドキュメント
- データドリブンのスタイルでデータをリアルタイムで確認する
- BigQuery の地理空間分析の概要
- BigQuery で GeoJSON を活用した地理空間分析
寄稿者
主な作成者:
- Ryan Baumann、Google Maps Platform ソリューション エンジニアリング マネージャー