カスタムレイヤーのスタイルガイド
カスタムスタイルを使用して事前定義されたスキームやカスタムのラスター、ライン、ポリゴン、ポイントレイヤーの外観を実行時にカスタマイズできます。カスタムスタイルはJSONベースのStyle記述と一連のAPIを組み合わせて制御できます。
注これはこの機能のベータリリースであるため、いくつかのバグや予期しない動作が発生する可能性があります。関連する API は、廃止のプロセスを経ずに、新しいリリースに変更される可能性があります。
Style はカスタム レイヤー スタイルを抽象化したものです。
JsonStyleFactoryを使用して JSON 文字列からStyleを作成します。MapLayerBuilder.withStyle(Style)メソッドを使用して、MapLayerの作成時にカスタム スタイルを指定します。MapLayer.setStyle(Style)メソッドを使用して、実行時にカスタム レイヤー スタイルを更新します。
JSON スタイルの構文については、以下で詳しく説明します。
HERE SDK を使用して、以下の手順に従ってカスタム レイヤーの外観をカスタマイズします。
- 適切な手法を使用して、カスタム レイヤーの JSON スタイルの文字列を作成します。
カスタム ラスター レイヤーのスタイル テクニック リファレンスで説明されている
rasterテクニックを使用します。
private final static String MY_CUSTOM_LAYER_STYLE =
"{\n"
+ " \"styles\": [\n"
+ " {\n"
+ " \"layer\": \"my custom layer\",\n"
+ " \"technique\": \"raster\",\n"
+ " \"attr\": {\n"
+ " \"opacity\": 1.0\n"
+ " }\n"
+ " }\n"
+ " ]\n"
+ "}";カスタム ライン レイヤーのスタイル テクニック リファレンスで説明されている
lineテクニックを使用します。
private final static String MY_CUSTOM_LAYER_STYLE =
"{\n"
+ " \"styles\": [\n"
+ " {\n"
+ " \"layer\": \"my custom layer\",\n"
+ " \"technique\": \"line\",\n"
+ " \"attr\": {\n"
+ " \"width\": 5.0,\n"
+ " \"color\": \"#ff0000ff\"\n"
+ " }\n"
+ " }\n"
+ " ]\n"
+ "}";JsonStyleFactoryを使用して、スタイル文字列からカスタムStyleを作成します。
Style layerStyle = JsonStyleFactory.createFromString(MY_CUSTOM_LAYER_STYLE);- 新しく作成した
Styleを使用してカスタム レイヤーを作成します。
MapLayer mapLayer = new MapLayerBuilder()
...
.withName("my custom layer")
.withStyle(layerStyle)
.build();- または、新しく作成した
Styleを既存のカスタム レイヤーに割り当てます。
myCustomLayer.setStyle(layerStyle);スタイル
スタイルは、レンダリングされた地物の外観を定義します。これは、すべての地物のレンダリング テクニックとテクニック パラメーターに関する情報を提供して行います。スタイルは、次のセクションで説明するスキーマを使用して JSON ファイルで定義します。
スタイル ルール
最上位の主な styles にはスタイルの記述が含まれます。styles の値はスタイル ルールの配列です。
概念上、各スタイル ルールは個別の描画呼び出しを表します。1 つのレイヤー内に 2 つのスタイル ルールがある場合、レイヤー フィーチャーが 2 回描画されることを意味します。
レイヤー
各スタイル ルールは layer キーを介してレイヤーに関連付けられます。1 つのレイヤーを複数のスタイル ルールに関連付けることができます。
次のスタイルには、layer1 にスタイル ルールが 2 つあります。
{
"styles" : [
// first style rule:
{
"layer": "layer1"
...
},
// second style rule:
{
"layer": "layer1"
...
},
]
}
注
styles内のスタイル ルールは、任意の順序で配置できます。
いつ
スタイル ルールは、そのオブジェクトの when フィルターが true の場合にのみオブジェクトに適用されます。when は任意であり、指定されていない場合は常に true になります。
オブジェクトを区別するために、when 式はオブジェクト データ属性を使用します。データ属性は、オブジェクトに添付された名前/値のペアです。オブジェクトは任意の数のデータ属性を持つことができます。スタイル システム自体は、特定のデータ属性が存在することを期待する性質を持ちません。ただし、特定のデータ ソースのスタイルを記述する場合は、データ スキームに大きく依存します。
以下の例では、スタイル ルールに when が含まれています。
{
"styles" : [
{
"layer": "layer1"
"when": ["==", ["get", "kind"], "a special kind"]
...
}
]
}when 値は、kind という名前のオブジェクト データ属性を文字列定数 a special kind と比較するブール式です。
テクニック
technique はすべてのスタイル ルールに必ず指定します。technique は、地物のジオメトリーがレンダリング可能な地物にどのように変換されるか、またどのようにレンダリングされるか (どのシェーダーが使用され、どのようなユニフォームが設定されるか) を定義します。
ルールでは、technique の名前に加えて attr キーの下にテクニック属性値のセットを提供することもできます。
{
"styles": [
{
"layer": "layer1",
"technique": "raster",
"attr": {
"opacity": 0.5
}
}
]
}
上の例では、technique がraster に設定され、1 つのテクニック属性 opacity が 0.5 に設定されています。
利用可能なテクニックとその属性の完全なリストについては、スタイル テクニック リファレンスを参照してください。
式
式は when フィルターとテクニック attribute values の値を定義します。
式は JSON ではarray として表されますが、最初の引数は式 name であり、残りのエントリーは式引数です。ほとんどの場合、引数は式でもあります。
[name, argument1, ...argumentN]例:1+2 は ["+", 1, 2] として記述されます。
式リファレンスを参照してください。
定義
よく使用する式はdefinitionsで一度定義しておき、["ref", name]の式を使用することで、どの式でも参照することができます。
{
"definitions": {
"definition1": "#ff0000",
"definition2": ["ref", "definition1"] // Definition value is also an expression
],
"styles": [
{
"layer": "layer1",
"technique": "line",
"attr": {
"color": ["ref", "definition2"] // "#ff0000"
}
},
}
}スタイルクラスを使用してマップスキームをカスタマイズする
HERE Style Editorを使用して、カスタムマップスキームを作成できます。実行時には、カスタムスキームと事前定義されたMapSchemeスタイルの両方を変更できます。たとえば、ユーザー設定に基づいて、すべてのラベルのフォントサイズを大きくすることができます。また、ラスター、ライン、ポリゴン、ポイントレイヤーの外観をカスタマイズできます。
すべてのMapSchemeスタイルがサポートされています。
private final static String MY_STYLE_CUSTOMIZATION =
"{\n"
+ " \"definitions\": {\n"
+ " \"General.Labels.Scale.Factor\": 1.5
+ " }\n"
+ "}";
Style styleUpdate = JsonStyleFactory.createFromString(MY_STYLE_CUSTOMIZATION);
mapView.getHereMap().getStyle().update(styleUpdate);private val MY_STYLE_CUSTOMIZATION: String = ("""{
"definitions": {
"""
+ " \"General.Labels.Scale.Factor\": 1.5
+ " }\n"
+ "}")
val styleUpdate: Style = JsonStyleFactory.createFromString(MY_STYLE_CUSTOMIZATION)
mapView!!.hereMap.style.update(styleUpdate)事前定義済みのマップスタイルでは、次のスタイルのカスタマイズがサポートされています。
General.Labels.Scale.Factor:マップ ラベル (アイコンとテキスト) の拡大縮小に使用される係数。デフォルト値は 1 です。1 より小さい値を指定するとマップ ラベルが縮小され、1 より大きい値を指定するとマップ ラベルが拡大されます。0 未満の値または非常に大きな値はサポートされず、未定義動作が生じる可能性があります。null値の場合はデフォルトに戻ります。

Screenshots: Predefined Labels Scale Factor (1 -> 1.5).
7 日前の更新