フィルタリング 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 ]
図 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 ]
図 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 ]
図 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. ネストされた論理レイヤーおよびフィルターを含むマップ 関数とキーワードをフィルタリング フィルタリング システムは、特定の論理レイヤーで使用されるフィーチャー (関数とキーワード) を制御する追加の手段を提供します。
組み込み関数には、埋め込み関数には、論理関数 not
、 any
、 all
、 none
と範囲関数 min
、 max
、 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
ヘルプ。