このドキュメントでは、Google Cloud 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)ときとは異なって表示される場合があります。
例 - ロンドンの鉄道
この例では、リファレンス アーキテクチャを適用して、Google Cloud と Google マップを使用して、Open Street Map(OSM)データからロンドンのすべての鉄道を可視化するウェブ アプリケーションを作成します。
前提条件
- BigQuery サンドボックスと Cloud コンソールへのアクセス
- Google Cloud プロジェクトと請求先アカウントが設定されていることを確認します。
ステップ 1 - BigQuery でデータをクエリする
[BigQuery Public Datasets] に移動します。データセット「bigquery-public-data」とテーブル geo_openstreetmap.planet_features
には、考えられるすべての特徴を含む、世界全体の Open Street Map(OSM)データが含まれています。amenity
、road
、landuse
など、クエリに使用できるすべての機能については、OSM Wiki をご覧ください。
Cloud Shell または BigQuery Cloud コンソールを使用して、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 でホストされているファイルからデータセットにデータをアップロードできます。
使用を開始するには、Google Cloud プロジェクトで Maps Datasets API を有効にして、API のドキュメントをご覧ください。アプリのバックエンドのロジックから Datasets API を呼び出すための Python クライアント ライブラリと Node.js クライアント ライブラリがあります。また、Cloud コンソールでデータセットを手動で作成するための データセット GUI もあります。
データセットのアップロードが完了すると、データセットの GUI でデータセットをプレビューできます。
ステップ 4 - データセットをマップ ID に関連付ける
データセットを作成したら、関連付けられた地図のスタイルを使用してマップ ID を作成できます。地図スタイル エディタで、mapId とスタイルをデータセットに関連付けることができます。また、クラウドベースのマップのスタイル設定を適用して、地図の外観をカスタマイズすることもできます。
ステップ 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,
}
}
}
上記のコードをシングルページ ウェブアプリで初期化すると、次の地図データの可視化が生成されます。
次に、フィーチャをフィルタするロジックを追加したり、ユーザー操作に基づいてスタイルを追加したり、他のアプリとやり取りしたりすることで、setStyle()
関数で地図の可視化を拡張できます。
まとめ
このドキュメントでは、Google Cloud と Google Maps Platform を使用した大規模なデータ可視化アプリケーションのリファレンス アーキテクチャと実装例について説明しました。このリファレンス アーキテクチャを使用すると、Google Maps Datasets API を使用して、Google Cloud BigQuery 内の任意のデータから、あらゆるデバイスでパフォーマンスの高い位置情報データ可視化アプリを作成できます。
次のアクション
その他の情報:
- Google Maps Platform Datasets API のドキュメント
- データドリブン スタイルを使用してデータをリアルタイムで確認する
- BigQuery の地理空間分析の概要
- BigQuery で GeoJSON を活用した地理空間分析
寄稿者
主な作成者:
- Ryan Baumann、Google Maps Platform ソリューション エンジニアリング マネージャー