このドキュメントでは、Maps JavaScript API を使用して Google 境界の動的データドリブン スタイル設定を実装する理由と方法について説明します。これは、業界やセグメントを問わずさまざまなユースケースに役立ちます。
ニューヨーク市のタクシー数(郵便番号境界別)のアニメーション(シミュレーション、時刻の経過):


データドリブン スタイル設定は、Google マップ プラットフォームの機能の一つで、Google の行政区画ポリゴンを活用し、それらのポリゴンにスタイルを適用して地図上に表示したり、独自のデータを組み合わせて、データの可視化と理解の向上に役立つ豊富なカスタマイズ地図を作成したりできます。このドキュメントでは、動的データフィードを統合してデータドリブン スタイル設定で地図上にデータをほぼリアルタイムで可視化する理由と方法を説明するユースケースについて説明します。
データドリブン スタイル設定を使用すると、データの地理的分布を示す地図を作成したり、ポリゴンのスタイルを動的にカスタマイズしたり、クリック イベントを介してデータとやり取りしたりできます。これらの機能を使用すると、さまざまなユースケースや業界向けに、有益で魅力的な地図を作成できます。
データドリブン スタイル設定で動的なデータ更新を表示する地図に適用できるユースケースの例を次に示します。
- 乗車シェアリング: リアルタイムの更新を使用して需要の高いエリアを特定できます。この場合、一部のプロバイダは急増料金を設定することがあります。
- 交通: リアルタイム更新を使用して渋滞しているエリアを特定し、最適な代替ルートを決定できます。
- 選挙: 選挙当日、リアルタイムのデータ ポーリング データを使用して、結果をリアルタイムで可視化できます。
- 作業者の安全: リアルタイムの更新を使用して、イベントの発生状況をリアルタイムで追跡し、リスクの高いエリアを特定し、現場の対応者に状況認識を提供できます。
- 天気: リアルタイムの更新情報を使用して、嵐の移動を追跡したり、現在の危険を特定したり、警告やアラートを提供したりできます。
- 環境: リアルタイム更新により、火山灰などの汚染物質の移動を追跡したり、環境悪化の地域を特定したり、人間活動の影響をモニタリングしたりできます。
こうした状況では、リアルタイムのデータフィードと Google の境界を組み合わせて、データを地図上にすばやく簡単に可視化することで、付加価値を高めることができます。これにより、ほぼリアルタイムで分析情報を取得して、より的確な意思決定を行うことができます。
ソリューションのアーキテクチャ アプローチ
次に、データドリブン スタイルを使用して地図を作成し、動的データを可視化しましょう。前述のユースケースでは、ニューヨーク市のタクシーの数を郵便番号別に可視化しています。これにより、ユーザーはタクシーを呼び出すのがどれくらい簡単かを把握できます。
このアプローチのアプリケーション アーキテクチャ図を次に示します。

動的データドリブン スタイル設定ソリューション
次に、データセットに動的データドリブン スタイル設定の色分け地図を実装するために必要な手順について説明します。
このソリューションを使用すると、ニューヨーク市周辺のタクシー密度を郵便番号別にリアルタイムで可視化できます。これは実際のデータではないかもしれませんが、実際のアプリケーションで使用できます。また、データドリブン スタイル設定を使用して動的なデータを地図上に可視化する方法のパワーと機能を確認できます。
ステップ 1: 可視化して境界プレース ID に結合するデータを選択する
最初のステップは、表示するデータを特定し、Google の境界と一致させることです。この照合は、postalCode ごとに findPlaceFromQuery コールバック メソッドを呼び出すことで、クライアントサイドで実行できます。米国の郵便番号には固有の名前がありますが、他の行政レベルには固有の名前はありません。結果が不明確になる可能性がある場合は、クエリに正しいプレイス ID を選択してください。
const request = {
query: postalCode,
fields: ['place_id'],
};
function findPlaceId() {
placesService.findPlaceFromQuery(request, function (results, status) {
if (status === google.maps.places.PlacesServiceStatus.OK) {
console.log(results[0]);
}
});
}
データに緯度と経度の値が含まれている場合は、コンポーネント フィルタリングで Geocoding API を使用して、スタイル設定する対象の特徴レイヤの Place ID 値にこれらの緯度/経度値を解決することもできます。この例では、POSTAL_CODE 特徴レイヤのスタイル設定を行います。
ステップ 2: リアルタイム データに接続する
データソースに接続する方法はさまざまですが、最適な実装はお客様の特定のニーズと技術インフラストラクチャによって異なります。この例では、データが「zip_code」と「taxi_count」の 2 つの列を持つ BigQuery テーブルにあり、Firebase Cloud Functions を介してクエリするとします。
async function queryNycTaxis() {
// Queries the NYC Taxis dataset.
// Create a client
const bigqueryClient = new BigQuery();
// The SQL query to run
const sqlQuery = 'SELECT zip_code, taxi_count
FROM \'YOUR_DATASET_ID.TABLE\' LIMIT 100';
const options = {
query: sqlQuery,
// Location must match that of the dataset(s)
// referenced in the query.
location: 'US',
};
// Run the query
const [rows] = await bigqueryClient.query(options);
rows.forEach(row => {
const postalCode = row['zip_code'];
const taxiCount = row['taxi_count'];
});
}
次に、データを最新の状態に保つ必要があります。1 つの方法は、ウェブワーカーを使用して上記のクエリを呼び出し、setInterval 関数を使用してデータを更新するタイマーを設定することです。間隔は、15 秒ごとに地図を更新するなど、適切な値に設定できます。間隔時間が経過するたびに、ウェブワーカーは郵便番号ごとに更新された taxiCount 値をリクエストします。
データをクエリして更新できるようになりました。地図ポリゴンの外観にこれらの変更が反映されていることを確認しましょう。
ステップ 3: データドリブン スタイリングで地図のスタイルを設定する
郵便番号の境界にビジュアル スタイルを作成して適用するために必要な動的データ値が JSON オブジェクトとして Maps JavaScript インスタンスに作成されました。次は、クロス集計地図としてスタイルを設定します。
この例では、各郵便番号のタクシー数に基づいて地図のスタイルを設定し、ユーザーが地域のタクシーの密度と利用状況を把握できるようにします。スタイルは、タクシーの数の値によって異なります。タクシーが最も少ないエリアには紫色のスタイルが適用され、タクシーの密度が最も高いエリアでは、色が赤、オレンジ、ニューヨーク市のタクシーの黄色へとグラデーションします。このカラーパターンでは、これらの色の値を fillColor と strokeColor に適用します。fillOpacity を 0.5 に設定すると、ユーザーは地図の下地を表示できます。strokeOpacity を 1.0 に設定すると、同じ色のポリゴンの境界を区別できます。
const featureLayer = map.getFeatureLayer(
google.maps.FeatureType.POSTAL_CODE
);
featureLayer.style = (featureStyleFunctionOptions) => {
const placeFeature = featureStyleFunctionOptions.feature;
// taxiCount per (postal_code) PlaceID
const taxiCount = zips[placeFeature.placeId];
let fillColor;
let strokeColor;
// Apply colors to features based on taxiCount values
if (taxiCount < 8) {
fillColor = "#571845";
strokeColor = "#571845";
} else if (taxiCount < 13) {
fillColor = "#900c3e";
strokeColor = "#900c3e";
} else if (taxiCount < 21) {
fillColor = "#c60039";
strokeColor = "#c60039";
} else if (taxiCount < 34) {
fillColor = "#fe5733";
strokeColor = "#fe5733";
// keep else if or the whole map gets this style with else
} else if (taxiCount >= 34) {
fillColor = "#fec30f";
strokeColor = "#fec30f";
}
return {
fillColor,
strokeColor,
fillOpacity: 0.5,
strokeOpacity: 1.0,
};
まとめ
Google 境界のデータドリブン スタイル設定を使用すると、データを使用して地図のスタイルを設定でき、さまざまな業界やセグメントでさまざまな実装が可能になります。リアルタイム データに接続すると、発生している事象、発生している場所、発生している状況をリアルタイムで伝えることができます。この機能により、リアルタイム データの価値を引き出し、ユーザーが現実世界でリアルタイムにデータをよりよく理解できるようになります。
次のアクション
- データドリブン スタイル設定を使用して Google マップの境界線をスタイル設定する方法のウェビナーをご覧ください。
- データドリブン スタイル設定のクリック イベントを使用して、可視化をさらに強化します。
- 地図に高度なマーカーを追加することを検討してください。
寄稿者
主な作成者:
Jim Leflar | Google Maps Platform ソリューション エンジニア