地図のカスタマイズ
ユーザーにとって重要な特定の表示サイズ、ユースケース、ブランディング、またはハイライトオブジェクトに合わせてマップを最適化する場合でも、 HERE SDK マップのカスタマイズ機能を使用すると、マップビューのレンダリング特性を細かく制御できるように高度なカスタマイズを自由に行うことができます。
このセクションでは、独自のマップの外観を作成するために必要なコンポーネントと概念について説明します。
地図のスキーム
地図のカスタマイズは、あらかじめ定義されているスキームのいずれか ( 「通常の日」や「通常の夜間」など ) を出発点として使用することから開始されます。 これらの定義済みのスキームは、自身ではカスタマイズできませんが、カスタムスキームの派生元となる初期値を提供します。
次のスクリーンショットは 、 HERE SDK で利用できる事前定義されたスキームの例を示しています。
マップをカスタマイズするには、まずマップ ビューからカスタマイズ可能な Scheme オブジェクトを取得します。 このオブジェクトを使用すると、マップを変更するためのプロパティを設定できます。 建物、ランドフィーチャー、道路など、ほとんどすべてのマップオブジェクトの色、アイコンのサイズ、幅、長さ、およびその他のプロパティを変更できます。 プロパティの変更が表示されるかどうかは、カスタマイズしているマップが現在影響を受けるズーム レベルにあるかどうか、およびマップ スキームがアクティブであるかどうかによって異なります。
GitHub でのマップのカスタマイズ例
この機能の例について は、 https://github.com/heremaps/を参照してください。
最初のマップ スキームカスタマイズを作成しています
どのスキームをベースにするかを決定した後、マップ ビューメソッドを使用してカスタマイズ可能なスキームオブジェクトを作成します。
CustomizableScheme scheme = map.createCustomizableScheme("newCustomScheme", Map.Scheme.NORMAL_DAY);
カスタマイズ可能なスキームを作成した後、マップ ビューオブジェクトが削除されていない限り、次のメソッドを使用して再度取得できます。 カスタマイズ可能なスキームは、取得元の特定のマップ ビューに対してのみ作成され、有効になります。
CustomizableScheme scheme = map.getCustomizableScheme("newCustomScheme");
その後、特定のズーム レベルのマップ属性を取得できます。 属性を設定するには、ズーム範囲を指定します。 最小 ZoomRange
および最大のズーム レベル値を取るヘルパークラスが提供されます。
ZoomRange range = new ZoomRange (0, 20);
HERE SDK には、 CustomizableVariables
HERE SDK がカスタマイズのためにサポートするすべての属性を一覧表示するという名前のクラスがあります。
CustomizableVariables
クラスマップでは、属性はそれぞれのタイプでラップされ、そのタイプが特定されます。 たとえば CustomizableVariables.CountryBoundary.WIDTH
、は SchemeFloatProperty
float 値を保持していることを意味するタイプです。 他のユーザーにも同じことが当てはまります。
SDK には、さまざまな種類のプロパティを処理するための次のヘルパークラスがあります。
-
CustomizableColorProperty
- 色の種類を指定します (Android の色は ARGB の整数の色の値で表されます ) -
SchemeFloatProperty
- float 型を指定します -
CustomizableIntegerProperty
- int 型を指定します
色、浮動小数点数、および整数型のマップ属性を変更するには、次の手順に従います。
// change 0M water color
CustomizableScheme.ErrorCode errorCode = scheme.setVariableValue(CustomizableVariables.Water.COLOR_0M, Color.RED, range);
// get water color for zoom level 10
int waterColor0M = scheme.getVariableValue(CustomizableVariables.Water.COLOR_0M, 10.0f);
// change 3d landmark
CustomizableScheme.ErrorCode errorCode = scheme.setVariableValue(CustomizableVariables.Landmark3d.ALPHA, 1, range);
// get 3d landmark for zoom level 10
int waterColor0M = scheme.getVariableValue(CustomizableVariables.Landmark3d.ALPHA, 10.0f);
// change CountryBoundary WIDTH
CustomizableScheme.ErrorCode errorCode = scheme.setVariableValue(CustomizableVariables.CountryBoundary.WIDTH, 2.0f, range);
// get CountryBoundary WIDTH for zoom level 10
float countryBoundaryWidth = scheme.getVariableValue(CustomizableVariables.CountryBoundary.WIDTH, 10.0f);
カスタマイズ後、次のいずれかの方法を呼び出して、スキームをアクティブ化する必要があります。
Map.setMapScheme(CustomizableScheme customizableScheme);
or
Map.setMapScheme(String scheme)
次に、より完全な例を示します。
// create a new scheme
CustomizableScheme scheme = map.createCustomizableScheme("newCustomScheme", Map.Scheme.NORMAL_DAY);
// change water color 0m
int lightYellow = Color.argb(0, 255,255,224);
CustomizableScheme.ErrorCode err = scheme.setVariableValue(CustomizableVariables.Water.COLOR_0M, lightYellow , range);
Log.i(TAG, "Error: " + err);
// change water color 3000m
err = scheme.setVariableValue(CustomizableVariables.Water.COLOR_3000M, Color.YELLOW, range);
Log.i(TAG, "Error: " + err);
// activate scheme
map.setMapScheme(scheme);