データセットとは、地理空間データをローカル ファイルまたは Google Cloud Storage から Google Maps Platform にアップロードして扱うための仕組みです。作成したデータセットは、Cloud コンソールで 1 つまたは複数の地図スタイルと関連付け可能です。データセットを地図スタイルと関連付けておけば、データドリブン スタイル設定の API を使って、地図アプリケーションを動的にスタイル設定することができます。
REST API を使って地理空間データをデータセットにアップロードすることも可能です。詳しくは、Maps Datasets API をご覧ください。
ロールの設定
Google Cloud プロジェクトでデータセットの作成と管理を行うためには、該当プロジェクトの IAM ロール「オーナー」または「編集者」を持っている必要があります。
この他に、データセットの管理に使用するユーザー アカウントまたはサービス アカウントに、次の IAM ロールを割り当てる方法もあります。
Maps Platform Datasets Admin
ロールを付与されたユーザー アカウントまたはサービス アカウントは、プロジェクト内のデータセットに対する読み取り / 書き込みアクセスが可能になります。データセットに対するすべての操作を許可するロールです。Maps Platform Datasets Viewer
ロールを付与すると、プロジェクト内のデータセットに対する読み取り専用アクセスが可能になります。データセットに対する list、get、download 操作を許可するロールです。
詳しくは、Google Cloud コンソールを使用して IAM ロールを付与するをご覧ください。
データセットのデータソース
データセットを作成したら、Google Cloud Storage またはローカル ファイルから、データセットにデータをアップロードします。Cloud Storage からデータをアップロードする際は、目的のデータを含む Cloud Storage 内リソースのファイルパスを指定します。パスは
gs://GCS_BUCKET/FILE
という形式です。リクエストを行うユーザーは、
storage.objects.get
権限を持つロール(Storage オブジェクト閲覧者など)を付与されている必要があります。Cloud Storage へのアクセス権の管理について詳しくは、アクセス制御の概要をご覧ください。- ローカル ファイルからデータをアップロードする際は、アップロードするデータが格納されているファイル(GeoJSON、KML、または CSV 形式)のパスを指定します。
前提条件
データセットの作成:
- 表示名を同じ Google Cloud プロジェクト内で重複させることはできません。
- 表示名は 64 バイト以内にする必要があります(文字は UTF-8 で表現されるため、言語によっては 1 文字で 2 バイト以上使用することがあります)。
- 説明は 1,000 バイト未満にする必要があります。
データのアップロード:
- サポートされるファイル形式は CSV、GeoJSON、KML です。
- ファイルサイズは 500 MB が上限です。
- 属性列の名前の先頭を「?_」にすることはできません。
- 3 次元のジオメトリ(WKT 形式の「Z」接尾辞、GeoJSON 形式の標高座標など)はサポートされていません。
データを準備する際のベスト プラクティス
密集したポイント、長いラインストリング、ポリゴンなど、ソースデータが複雑であったり大きかったりする場合(多くの場合、サイズが 50 MB を超えるソースファイルがこのカテゴリに該当)、視覚的な地図で最高のパフォーマンスを実現するには、アップロードする前にデータを簡素化することを検討してください。
データを準備する際のベスト プラクティスを以下にご紹介します。
- 地図対象物のプロパティを最小化します。地図のスタイル設定に必要な地図対象物プロパティ(「id」や「category」など)のみを残します。データドリブン スタイル設定で一意の識別子キーを使用して、クライアント アプリケーションで地図対象物に追加のプロパティを結合できます。たとえば、データドリブン スタイル設定を使ってデータをリアルタイムに確認する方法についての記事をご覧ください。
- タイルのサイズを最小限に抑え、地図のパフォーマンスを向上させるには、可能な場合はプロパティ オブジェクトに整数などの単純なデータ型を使用します。
- ファイルをアップロードする前に、複雑なジオメトリを簡略化します。複雑なポリゴン ジオメトリに対してオープンソースの Mapshaper.org ユーティリティなどの地理空間ツールか BigQuery で ST_Simplify を使用して簡略化できます。
- ファイルをアップロードする前に、非常に密集したポイントをクラスタ化します。密集したポイント ジオメトリに対してオープンソースの turf.js クラスタ関数などの地理空間ツールか BigQuery で ST_CLUSTERDBSCAN を使用してクラスタ化できます。
データセットのベスト プラクティスに関する追加のガイダンスについては、データセットと BigQuery を使用してデータを視覚化する方法についての記事をご覧ください。
GeoJSON での要件
Maps SDK for iOS は GeoJSON 仕様。 Maps SDK for iOS は、次のいずれかのオブジェクト タイプを含む GeoJSON ファイルもサポートしています。
- ジオメトリ(geometry)オブジェクト: ジオメトリ オブジェクトは、ポイント(点)、ライン(線)、ポリゴン(多角形)の結合体として記述される空間形状です。ポリゴンには穴を開けることも可能です。
- 対象物(feature)オブジェクト: ジオメトリ情報に、名前と値のペアから成るプロパティ(複数可)を付加したものです。プロパティには、各アプリケーションで固有の意味を持たせることができます。
- 対象物(feature)コレクション: 対象物オブジェクトの集合です。
Maps SDK for iOS は、座標参照系にデータが含まれる GeoJSON ファイルに対応していません (CRS)(WGS84 を除く)
GeoJSON について詳しくは、RFC 7946 仕様をご覧ください。
KML での要件
Maps SDK for iOS には次の要件があります。
- URL はすべて、ファイル自体を基準としたローカル(相対)指定で記述する必要があります。
- サポートされるジオメトリ情報はポイント、ライン、ポリゴンです。
- データ属性はすべて文字列と見なされます。
- ファイル外で定義された
<styleUrl>
やアイコン - ネットワーク リンク(
<NetworkLink>
など) - グラウンド オーバーレイ(
<GroundOverlay>
など) - 3D ジオメトリや標高関連のタグ(
<altitudeMode>
など) - カメラ指定(
<LookAt>
など) - KML ファイル内で定義されたスタイル
CSV での要件
CSV ファイルの場合、以下の列名がサポートされます。記載順は優先順位を表しています。
latitude
、longitude
lat
、long
x
、y
wkt
(Well-Known Text)address
、city
、state
、zip
address
- 住所情報をすべて含む単一の列(
1600 Amphitheatre Parkway Mountain View, CA 94043
など)
たとえばファイルに「x
」「y
」「wkt
」の 3 列が含まれるとします。
上のサポート対象列名リストの記載順のとおり、x
と y
のほうが優先度が高いため、「wkt
」列に値が入っていても無視され、「x
」および「y
」列の値が使用されます。
その他の留意事項:
- 指定されている名前の列は、それぞれ単独で存在する必要があります。つまり、たとえば「
xy
」という名前の列を設けて x 座標と y 座標の両方のデータを持たせることはできません。x 座標と y 座標はそれぞれ独立した列にしてください。 - 列名の大文字と小文字は区別されません。
- 指定列の記載順は自由です。たとえば「
lat
」列と「long
」列を設ける場合、どのような順序であれ CSV ファイル内に含まれていれば問題ありません。
データ アップロード時のエラーへの対処
データセットにデータをアップロードする際、エラーが発生することがあります。このセクションでは、一般的なエラーについて解説します。
GeoJSON でのエラー
GeoJSON での一般的なエラーの例:
type
フィールドが存在しないか、type
の値が文字列になっていません。アップロードする GeoJSON データファイルでは、各 feature オブジェクトおよび geometry フィールドが、type
という名前の文字列フィールドを持っている必要があります。
KML でのエラー
KML での一般的なエラーの例:
- データファイルに、サポート外の KML 機能(前述)が含まれていると、データのインポートが失敗することがあります。
CSV でのエラー
CSV での一般的なエラーの例:
- ジオメトリ列に値が入っていない行があります。CSV ファイルの全行で、ジオメトリ列に空でない値が入っている必要があります。ジオメトリ列とは次のようなものを指します。
latitude
、longitude
lat
、long
x
、y
wkt
address
、city
、state
、zip
address
- 住所情報をすべて含む単一の列(
1600 Amphitheatre Parkway Mountain View, CA 94043
など)
- ジオメトリ列として「
x
」列および「y
」列を使用する場合、値は経度と緯度で指定する必要がある点に注意しましょう。一般公開されているデータセットの中には、同じ「x
」「y
」という名前の列に、別の座標系の値が入っているものもあります。値の単位が違っていると、データセットのインポート自体が成功していても、レンダリング後のデータではデータセットの各ポイントが想定外の位置に表示される可能性があります。
データセットの作成
データセットを作成するには:
- Google Cloud コンソールで、[データセット] ページに移動します。
- [Create Dataset](データセットを作成)をクリックします。
- データセットの名前を入力します。データセットの名前は一意にする必要があります。
- 必要に応じて、データセットの [Description](説明)を入力します。
- [続行] をクリックします。[Import data](データのインポート)ページが表示されます。
- データセットに入れるデータのアップロード元を [Upload source] プルダウンから選択します。[Desktop](使用しているシステム上のローカル ファイル)または [Google Cloud Storage bucket] を選択できます。
- [Desktop] の場合、[参照] をクリックして、ファイル選択画面でファイルを指定します。
- [Google Cloud Storage bucket] の場合、[参照] をクリックして、目的のデータが含まれているバケットとファイルを指定します。
- [File format] プルダウンでファイル形式を選択します。
- [続行] をクリックして、設定確認の画面へ進みます。
[作成] をクリックします。[Datasets](データセット)ページに、作成したデータセットが表示されます。ステータス欄は [Processing](処理中)になっているはずです。
データが正常にアップロードされている場合:
- データセットのステータスは COMPLETED に設定されています。
- データセットが「アクティブ」バージョンです。
アップロード中にエラーが発生した場合:
- 新しいデータセット バージョンのステータスが COMPLETED。
データセットの閲覧と編集
データセットを作成したら、データセットを表示または変更できます。
- Google Cloud コンソールで、[データセット] ページに移動します。
- 目的のデータセットの名前をクリックします。[Dataset details](データセットの詳細)ページが表示されます。
- [Details](詳細)タブをクリックすると、そのデータセットの情報を確認できます。データセットの名前や説明の編集も、このタブで行います。
- [プレビュー] タブをクリックして、データセット( ステータス(COMPLETED または REVERTED)のみ)。
- [Table Data] タブをクリックして、データセット(データセット)のすべての属性を表示します。 ステータスが COMPLETED または REVERTED のみ)を返します。これらは、地図上のデータセットのスタイルを設定するために使用できる属性です。
- [ダウンロード] ボタンをクリックすると、データをローカル ファイルにダウンロードできます。
- [削除] ボタンをクリックすると、データセットを削除できます。
[データファイルをインポート] ボタンをクリックすると、新しいデータをデータセットにアップロードできます。
データセットに新しいデータをアップロードした場合、新しいバージョンのデータセットが作成されたことになります。新しいデータが正常にアップロードされた場合:
- 新しいバージョンのデータセットのステータスは「完了」に設定されます。
- 新しいバージョンが「有効な」バージョン(アプリで使用されるバージョン)になります。
アップロード中にエラーが発生した場合:
- 新しいデータセット バージョンのステータスは、「完了」以外のステータスに設定されます。たとえば、以前の「有効な」バージョンがある場合、データセットのステータスは「元に戻されました」に設定されます。
- 以前の「有効な」データセット バージョンが「有効な」バージョン(アプリで使用されるバージョン)のままになります。