フィルタリング

HERE Maps API for Javascript には、目的の外観でマップを作成するのに役立つフィルタリング機能があります。 データ レイヤーのプロパティを使用して、HERE Vector Tile API によって提供されるマップ フィーチャをフィルタリングできます。

レイヤーフィルタリング

任意のデータ レイヤーを、データ レイヤーのレンダリング方法を記述する 1 つまたは複数の論理レイヤーに関連付けることができます。レンダリングのジオメトリを提供するデータレイヤーを定義する には、データブロックのプロパティ layerを使用します。 次の例では、同じデータレイヤーを使用する 2 つの論理レイヤーを示します。 論理レイヤーは 、データレイヤーwaterによって提供されるジオメトリをポリゴン (water_area)およびポリライン (water_outline) としてレンダリングします。 両方の論理レイヤーが 、プロパティdata block layerによって提供された同じデータレイヤーを使用していることに注意してください。

Style

sources:
  omv:
    type: OMV
layers:
  water_areas:
    data: {source: omv, layer: water}
    draw:
      polygons:
        order: 1
        color: [0.055, 0.604, 0.914, 0.50]
  roads:
    data: {source: omv, layer: water}
    draw:
      lines:
        order: 2
        width: 3px
        color: [0.055, 0.604, 0.914, 1.00]
2 つの論理レイヤーを使用後のマップ
図 1. 2 つの論理レイヤーを使用後のマップ

利用可能なデータレイヤーの一覧については、 HERE Vector Tile API のドキュメントを参照してください。

フィーチャーフィルタリング

論理レイヤーの適用方法を絞り込むには、ブロックエレメントfilter を論理定義に含めます。 ブロックは、指定したスタイルでレンダリングされるデータレイヤーの機能を定義します。 filter次の例で は、ブロック filterが定義されておらず、デフォルトでは、道路データレイヤーのすべてのジオメトリがスタイル linesでレンダリングされます。

Style

sources:
  omv:
    type: OMV
layers:
  roads:
    data: {source: omv, layer: roads}
    draw:
      lines:
        order: 2
        width: 2px
        color: [0.561, 0.561, 0.561, 1.00]
フィルタリングされていないレイヤーのあるマップ
図 2. フィルタリングされていないレイヤーのあるマップ

上記の例にfilterを追加すると、この論理レイヤーに属するフィーチャーの数が削減されます。 次の例では、ブロックfilterを既存のレイヤーに適用する方法を示します。 ブロックにはキーと値のペアが含まれています。 key はフィルタリングに使用されるプロパティの名前で、 value はフィルタの照合が実行されるデータ値です。

Style

sources:
  omv:
    type: OMV
layers:
  roads:
    data: {source: omv, layer: roads}
    filter:
      kind: major_road
    draw:
      lines:
        order: 2
        width: 2px
        color: [0.561, 0.561, 0.561, 1.00]
"major_road" フィルタが設定されたマップ
図 3. "major_road" フィルタが設定されたマップ

単一のフィルタは、複数の異なるプロパティに対して照合を実行でき、論理 AND ルールに従います。以下のスニペットは、論理レイヤーのジオメトリをより正確に選択するために 2 番目のプロパティ -is_tunnel - を追加します。

Style

sources:
  omv:
    type: OMV
layers:
  roads:
    data: {source: omv, layer: roads}
    filter:
      kind: major_road
      is_tunnel: true
    draw:
      lines:
        order: 2
        width: 2px
        color: [0.561, 0.561, 0.561, 1.00]
"major_road" および "is_tunnel" フィルタが設定されたマップ
図 4. "major_road" および "is_tunnel" フィルタが設定されたマップ

論理レイヤーをネストできます ( フィルタブロックは論理ルール ANDに従います ) 。 と組み合わせてネストすると、プロパティに応じてフィーチャーをどのようにレンダリングするかを正確に表現し、描画命令を再利用できる強力なツールが提供されます。 filters次の例では 、データレイヤー roadsの道路ネットワークが灰色で表示されています。3 つのネストされた論理レイヤーは、フィルタがどのように適用されてマップ上のブリッジを強調表示するかを示します。 マップフィーチャが表す場合 :

  • ブリッジ (is_bridge == true)の場合、フィーチャーの色は赤になります
  • ブリッジ (is_bridge == true)と道路クラスは3次 (kind_detail == tertiary) で、フィーチャーの色は緑色になります
  • ブリッジ (is_bridge == true)と道路クラスは3次 (kind_detail == tertiary) で、道路セグメントは一方向セグメント (oneway == true) としてマークされ、フィーチャーの色は青になります

Style

sources:
  omv:
    type: OMV
layers:
  road:
    data: {source: omv, layer: roads}
    draw:
      lines:
        order: 2
        color: [0.8, 0.8, 0.8, 1.00]
        width: 3px
    bridges:
      filter:
        is_bridge: true
      draw:
        lines:
          color: red
      tertiary:
        filter:
          kind_detail: tertiary
        draw:
          lines:
            color: green
        oneway:
          filter:
            oneway: true
          draw:
            lines:
              color: blue
ネストされた論理レイヤーおよびフィルターを含むマップ
図 5. ネストされた論理レイヤーおよびフィルターを含むマップ

関数とキーワードをフィルタリング

フィルタリング システムは、特定の論理レイヤーで使用されるフィーチャー (関数とキーワード) を制御する追加の手段を提供します。

  • 組み込み関数には、埋め込み関数には、論理関数 notanyallnoneと範囲関数 minmax
    • not - は論理演算子 NOTで、フィルタオブジェクトを取ることができます。 次のスニペットは、すべての 3 次道路をフィルタリングします。
      filter:
        not: {kind_detail: tertiary}
      
    • any - は論理演算子ORで、フィルタオブジェクトのリストを取得します。 次の例では、が三次道路またはブリッジ
      filter:
        any:
          - kind_detail: tertiary
          - is_bridge: true
      
      としてマークされていない場合、すべての道路をフィルタリングします。
    • all - は論理演算子ANDで、フィルタオブジェクトのリストを取得します。 次の例では、三次道路ではなく、かつブリッジであるすべてのフィーチャーをフィルタリングします。
      filter:
        all:
          - kind_detail: tertiary
          - is_bridge: true
      
    • none - は論理演算子NORで、フィルタオブジェクトのリストを取得します。 以下のスニペットでは、ブリッジ、3次道路、またはブリッジと3次道路の両方であるすべてのフィーチャーがフィルタリングされます。
      filter:
        none:
          - {kind_detail: residential}
          - {is_bridge: true}
      
    • min/max が範囲 [min, max)を定義します。 feature プロパティの値がこの範囲に含まれる場合、ジオメトリがレンダリングされます。
      filter:
        height: {min: 10, max: 25}
      
    が含まれます。
  • ズーム レベルおよびジオメトリタイプに基づいてデータレイヤーフィーチャーをフィルタリングするためのキーワード$zoomおよび$geometryヘルプ。
    • $zoom - マップの現在のズーム レベルとフィルタ値を照合します。 次の例では、論理レイヤーのフィーチャは、マップのズーム レベルが[10, 11)
      filter:
        $zoom: 10
      
      の場合にのみレンダリングされます。
    • $geometry - フィーチャージオメトリタイプに一致し、データレイヤーに複数のジオメトリタイプが含まれている場合に使用されます。 指定できる値は pointlineおよび polygon
      filter:
        $geometry: polygon
      
      です。

」に一致する結果は 件です

    」に一致する結果はありません