地図のレイヤで、境界線ポリゴンにストロークと塗りつぶしのスタイルを適用するには、次を行います。
FeatureLayer.StyleFactory
インターフェースを実装するスタイル ファクトリ関数を作成します。この関数は、地図のレイヤにスタイルを設定するためのロジックを定義します。FeatureLayer.setFeatureStyle()
を呼び出して、地図のレイヤにスタイル ファクトリ関数を適用します。
次のサンプル地図では、[地域区分] レイヤで単一の地域の境界線ポリゴンをハイライトしています。
スタイル ファクトリ関数を作成する
スタイル ファクトリ関数は、それを地図のレイヤに設定した時点で、影響を受けるレイヤ内のすべてのポリゴンに適用されます。この関数は、ポリゴンのスタイル設定を指定する FeatureStyle
オブジェクトを返す必要があります。
Maps SDK for Android は Feature
のインスタンスをスタイル ファクトリ関数に渡します。Feature
のインスタンスは対象物のメタデータを表し、これを使用して、スタイル ファクトリ関数でメタデータにアクセスできます。
スタイル ファクトリ関数は、適用された際に常に同じ結果を返すように定義する必要があります。たとえば、一連の対象物をランダムに色付けしたい場合は、予期しない結果を招かないよう、ランダム処理は対象物スタイル関数の外で行います。
この関数はレイヤ内のすべての対象物に対して実行されるため、最適化することが重要です。レンダリング時間に影響しないようにするには、次の点に気をつけます。
必要な地図のレイヤのみを有効にする。
地図のレイヤが不要になった際は、
FeatureLayer.setFeatureStyle(null)
を呼び出す。
ポリゴンのストロークと塗りつぶしを設定する
スタイル ファクトリ関数での境界線ポリゴンのスタイル設定では、以下を設定できます。
ポリゴンの枠線のストロークの色と不透明度。
Color
クラスで定義された ARGB 形式で指定します。デフォルト値は透明(0x00000000)です。ポリゴンの枠線のストローク幅。画面ピクセルで指定します。デフォルト値は 2 です。
ポリゴンの塗りつぶしの色と不透明度。
Color
クラスで定義された ARGB 形式で指定します。デフォルト値は透明(0x00000000)です。
プレイス ID を取得してターゲット対象物を指定する
多くのアプリケーションでは、対象物の位置に基づき対象物にスタイルを適用します。たとえば、国や地域ごとに異なるスタイルを適用します。対象物の位置はプレイス ID で表現されます。
プレイス ID は、Google プレイスのデータベースおよび Google マップで特定の場所を一意に識別する ID です。プレイス ID を取得する手順は次のとおりです。
- Places API とジオコーディングを使用して、目的の地域を名前で検索し、指定した境界内の地域のプレイス ID を取得します。
- クリック イベントからデータを取得します。 この場合、クリックされた地域に対応する対象物が返され、その対象物のプレイス ID と対象物タイプのカテゴリを参照できます。
提供状況は地域によって異なります。詳しくは、Google の境界線の範囲をご覧ください。
地名は、米国地名委員会や米国の地名データファイルなど、さまざまな情報源から入手できます。
PlaceFeature を使用してプレイス ID を取得する
PlaceFeature
クラスは Feature
クラスのサブクラスです。これは、プレイス対象物(プレイス ID をもつ対象物)を表し、ADMINISTRATIVE_AREA_LEVEL_1
、ADMINISTRATIVE_AREA_LEVEL_2
、COUNTRY
、LOCALITY
、POSTAL_CODE
、および SCHOOL_DISTRICT
のタイプの対象物が含まれます。
プレイス ID が利用可能な場合、Maps SDK for Android は PlaceFeature
のインスタンスをスタイル ファクトリ関数に渡します。これにより、対象物の位置を特定できます。
スタイル ファクトリ関数の例
この例では、[地域区分] レイヤでスタイル ファクトリ関数をポリゴンに適用します。スタイル ファクトリ関数は、PlaceFeature
のインスタンスを使用して対象物のプレイス ID を特定します。プレイス ID がハナ(ハワイ)を示すものであった場合、関数は塗りつぶしとストロークのカスタム スタイルをポリゴンに適用します。
スタートガイドの手順に沿って、新しいマップ ID と地図のスタイルを作成します(まだお済みでない場合)。[地域区分] レイヤが有効になっていることを確認します。
地図を初期化する際に、[地域区分] レイヤへの参照を取得します。
Java
private FeatureLayer localityLayer;
@Override public void onMapReady(GoogleMap map) { // Get the LOCALITY feature layer. localityLayer = map.getFeatureLayer(new FeatureLayerOptions.Builder() .featureType(FeatureType.LOCALITY) .build());
// Apply style factory function to LOCALITY layer. styleLocalityLayer(); }Kotlin
private var localityLayer: FeatureLayer? = null
override fun onMapReady(googleMap: GoogleMap) { // Get the LOCALITY feature layer. localityLayer = googleMap.getFeatureLayer(FeatureLayerOptions.Builder() .featureType(FeatureType.LOCALITY) .build())
// Apply style factory function to LOCALITY layer. styleLocalityLayer() }スタイル ファクトリ関数を作成して、[地域区分] レイヤに適用します。
以下の例では、対象物のプレイス ID がハワイのハナ(「ChIJ0zQtYiWsVHkRk8lRoB1RNPo」)であった場合にのみ関数を適用します。 指定されたプレイス ID がハナ(ハワイ)のものでない場合、スタイルは適用されません。
Java
private void styleLocalityLayer() {
// Create the style factory function. FeatureLayer.StyleFactory styleFactory = (Feature feature) -> {
// Check if the feature is an instance of PlaceFeature, // which contains a place ID. if (feature instanceof PlaceFeature) { PlaceFeature placeFeature = (PlaceFeature) feature;
// Determine if the place ID is for Hana, HI. if (placeFeature.getPlaceId().equals("ChIJ0zQtYiWsVHkRk8lRoB1RNPo")) {
// Use FeatureStyle.Builder to configure the FeatureStyle object // returned by the style factory function. return new FeatureStyle.Builder() // Define a style with purple fill at 50% opacity and solid purple border. .fillColor(0x80810FCB) .strokeColor(0xFF810FCB) .build(); } } return null; };
// Apply the style factory function to the feature layer. localityLayer.setFeatureStyle(styleFactory); }Kotlin
private fun styleLocalityLayer() {
// Create the style factory function. val styleFactory = FeatureLayer.StyleFactory { feature: Feature ->
// Check if the feature is an instance of PlaceFeature, // which contains a place ID. if (feature is PlaceFeature) { val placeFeature: PlaceFeature = feature as PlaceFeature
// Determine if the place ID is for Hana, HI. if (placeFeature.getPlaceId().equals("ChIJ0zQtYiWsVHkRk8lRoB1RNPo")) {
// Use FeatureStyle.Builder to configure the FeatureStyle object // returned by the style factory function. return@StyleFactory FeatureStyle.Builder() // Define a style with purple fill at 50% opacity and // solid purple border. .fillColor(0x80810FCB.toInt()) .strokeColor(0xFF810FCB.toInt()) .build() } } return@StyleFactory null }
// Apply the style factory function to the feature layer. localityLayer?.setFeatureStyle(styleFactory) }
レイヤからスタイル設定を削除する
レイヤからスタイル設定を削除するには、FeatureLayer.setFeatureStyle(null)
を呼び出します。