ガイド変更履歴HERE SDK API references
ガイド

カスタムレイヤーのスタイルガイド

カスタムスタイルを使用して事前定義されたスキームやカスタムのラスターラインポリゴンポイントレイヤーの外観を実行時にカスタマイズできます。カスタムスタイルは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
      }
    }
  ]
}

上の例では、techniqueraster に設定され、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).