このページでは、データセットを地図に追加し、スタイル設定を適用する方法を説明します。
前提条件
先へ進む前に、マップ ID、地図スタイル、データセット ID を用意しましょう。
データセット ID と地図のスタイルを関連付ける
データセット対象物にスタイルを設定するには、地図の [データセット] レイヤにスタイル関数を適用します。[データセット] レイヤは、データセットと地図のスタイルを関連付けると作成されます。
データセットと地図のスタイルを関連付ける手順は次のとおりです。
- Google Cloud コンソールで、[データセット] ページに移動します。
- 目的のデータセットの名前をクリックします。[データセットの詳細] ページが表示されます。
- [プレビュー] タブをクリックします。
- [関連付けられている地図のスタイル] で [地図のスタイルを追加します] をクリックします。
- 関連付ける地図のスタイル(複数可)のチェックボックスをオンにして、[保存] をクリックします。
データセットにスタイルを適用する
データセットにスタイルを適用する手順は次のとおりです。
FeatureLayer.StyleFactory
インターフェースを実装するスタイル ファクトリ関数を作成します。この関数は、[データセット] レイヤにスタイルを設定するためのロジックを定義します。FeatureLayer.setFeatureStyle()
を呼び出して、データセットの各対象物にスタイル ファクトリ関数を適用します。
スタイル ファクトリ関数を作成する
スタイル ファクトリ関数は、それを地図のレイヤに設定した時点で、[データセット] レイヤ内のすべての対象物に適用されます。この関数は、ポリゴンのスタイル設定を指定する FeatureStyle
オブジェクトを返す必要があります。
スタイル ファクトリ関数が null
を返した場合、その対象物はレンダリングされません。詳しくは、レイヤからスタイル設定を削除するをご覧ください。
Maps SDK for Android は Feature
のインスタンスをスタイル ファクトリ関数に渡します。Feature
のインスタンスは対象物のメタデータを表し、これを使用して、スタイル ファクトリ関数でメタデータにアクセスできます。
スタイル ファクトリ関数は、適用された際に常に同じ結果を返すように定義する必要があります。たとえば、一連の対象物をランダムに色付けしたい場合は、予期しない結果を招かないよう、ランダム処理は対象物スタイル関数の外で行います。
この関数はレイヤ内のすべての対象物に対して実行されるため、最適化することが重要です。レンダリング時間に影響しないよう、地図のレイヤが不要になったときは FeatureLayer.setFeatureStyle(null)
を呼び出しましょう。
FeatureLayer.getDatasetId()
を呼び出して、データセット ID を取得することもできます。
ストローク、塗りつぶし、ポイントの半径を設定する
スタイル ファクトリ関数では、対象物の以下のスタイルを設定できます。
枠線のストロークの色と不透明度。
Color
クラスで定義します。デフォルト値は透明 (Color.TRANSPARENT
) です。枠線のストローク幅。画面ピクセルで指定します。デフォルト値は 2 です。
塗りつぶしの色と不透明度。
Color
クラスで定義します。デフォルト値は透明 (Color.TRANSPARENT
) です。ポイント対象物のポイントの半径。0~128 の範囲のピクセルで指定します。
単純なスタイル規則を使用する
対象物をスタイル設定する最も簡単な方法は、FeatureLayer.StyleFactory
を定義し、どの対象物にも常に同じ FeatureStyle
オブジェクトを作成することです。対象物のスタイル オプションは、[データセット] レイヤに直接適用するか、FeatureStyleFunction
と組み合わせて使用します。
宣言型のスタイル規則を使用する
対象物の属性に基づき宣言的にスタイル規則を設定し、データセット全体に適用できます。一部の対象物を不可視のままにする場合などは、対象物スタイル関数(FeatureStyleFunction)で null
を返すことも可能です。
たとえば、DatasetFeature.getDatasetAttributes()
メソッドを使用して対象物のデータセット属性 Map<String,String>
を返し、この属性に基づき、対象物のスタイルをカスタマイズできます。
この例では、データセットの各対象物の "highlightColor" 属性の値を特定し、スタイルをコントロールします。
Kotlin
// Get the dataset feature, so we can work with all of its attributes. val datasetFeature: DatasetFeature = feature as DatasetFeature
// Create a switch statement based on the value of the // "highlightColor" attribute of the dataset. val attributeColor: MutableMap<String, String> = datasetFeature.getDatasetAttributes() when (attributeColor["highlightColor"]) { "Black" -> { ... } "Red" -> { ... } else -> { ... } }
Java
// Get the dataset feature, so we can work with all of its attributes. DatasetFeature datasetFeature = (DatasetFeature) feature;
// Create a switch statement based on the value of the // "highlightColor" attribute of the dataset. Map<String, String> attributeColor = datasetFeature.getDatasetAttributes(); switch(attributeColor.get("highlightColor")) { case "Black": ... break; case "Red": ... break; default: // Color not defined. ... break; }
[データセット] レイヤにスタイルを適用する
この例では、[データセット] レイヤのポリゴンにスタイル ファクトリ関数を適用します。スタイル ファクトリ関数は塗りつぶしとストロークのカスタム スタイルをポリゴンに適用します。
スタートガイドの手順に沿って、新しいマップ ID と地図のスタイルを作成します(まだお済みでない場合)。[データセット] 地図レイヤが有効になっていることを確認します。
地図を初期化する際に、[データセット] レイヤへの参照を取得します。
Kotlin
private var datasetLayer: FeatureLayer? = null
override fun onMapReady(googleMap: GoogleMap) { // Get the DATASET feature layer. datasetLayer = googleMap.getFeatureLayer(FeatureLayerOptions.Builder() .featureType(FeatureType.DATASET) // Specify the dataset ID. .datasetId(YOUR_DATASET_ID) .build())
// Apply style factory function to DATASET layer. styleDatasetsLayer() }Java
private FeatureLayer datasetLayer;
@Override public void onMapReady(GoogleMap map) { // Get the DATASET feature layer. datasetLayer = map.getFeatureLayer(new FeatureLayerOptions.Builder() .featureType(FeatureType.DATASET) // Specify the dataset ID. .datasetId(YOUR_DATASET_ID) .build());
// Apply style factory function to DATASET layer. styleDatasetsLayer(); }スタイル ファクトリ関数を作成して、[データセット] レイヤに適用します。
次の例では、同じ塗りつぶしとストロークをデータセットのすべての対象物に適用します。
Kotlin
private fun styleDatasetsLayer() {
// Create the style factory function. val styleFactory = FeatureLayer.StyleFactory { feature: Feature ->
// Check if the feature is an instance of DatasetFeature. if (feature is DatasetFeature) {
return@StyleFactory FeatureStyle.Builder() // Define a style with green fill at 50% opacity and // solid green border. .fillColor(0x8000ff00.toInt()) .strokeColor(0xff00ff00.toInt()) .strokeWidth(2F) .build() } return@StyleFactory null }
// Apply the style factory function to the feature layer. datasetLayer?.setFeatureStyle(styleFactory) }Java
private void styleDatasetsLayer() {
// Create the style factory function. FeatureLayer.StyleFactory styleFactory = (Feature feature) -> {
// Check if the feature is an instance of DatasetFeature. if (feature instanceof DatasetFeature) {
return new FeatureStyle.Builder() // Define a style with green fill at 50% opacity and solid green border. .fillColor(0x8000ff00) .strokeColor(0xff00ff00) .strokeWidth(2) .build(); } return null; };
// Apply the style factory function to the feature layer. datasetLayer.setFeatureStyle(styleFactory); }
レイヤからスタイル設定を削除する
レイヤからスタイル設定を削除するには、FeatureLayer.setFeatureStyle(null)
を呼び出します。
一部の対象物を不可視のままにする場合なども、スタイル ファクトリ関数で null
を返すことができます。