レンダリング関数 レンダラ プラグインコードは、次のいずれかの関数を含むオブジェクトを返す単一の関数を宣言する必要があります。
同期getGeoJSON
関数と非同期getGeoJSONAsync
関数のどちらも、body
プロパティに GeoJSON データが含まれているオブジェクトを返します。
{
contentType: "application/geo+json; charset=utf-8" ,
body: geoJsonData
}
これらの関数のいずれか 1 つのみを宣言する必要があります。 両方が存在する場合 GeoJsonDataSource
は、例外がスローされます。
これらの関数は、生のソースデータを含むオブジェクトである単一のパラメーターを受け入れ、さまざまなヘルパーおよびユーティリティへのアクセスを提供します。
通常、生データを GeoJSON 形式に変換するには、 synchronous 関数を使用する必要があります。 プラグインが非同期タスクを実行できる場合 getGeoJSONAsync
は、関数を実装する必要があります。 非同期タスクの例としては、外部 API への HTTP 要求、またはジオメトリデータプロバイダの使用があります。 データ インスペクター ライブラリの同期および非同期レンダリング機能のサンプル実装については 、「プラグインの例 」を参照してください。
パラメーター getGeoJSON
AND getGeoJSONAsync
関数は、 1 つ params
のパラメータを受け入れます。 このオブジェクトには、次のプロパティが含まれています。
params.decodeResult { object }
: decodeResult
このオブジェクトは生データへのアクセスを提供し、次の 2 つのプロパティを持ちます。
partitionId {string}
: パーティション ID data { object }
: パーティション データによってデコードされた生の Protobuf params.logger { object }
: GeoJSON データソースは ILogger
、インターフェイスを実装するロガーを使用し、コンソールに情報を記録するように完全に設定されます。 ロガーには、次の機能があります。
logger. trace ( "Trace message" ) ;
logger. debug ( "Hello again log" ) ;
logger. log ( "Hello log" ) ;
logger. info ( "Hello again log" ) ;
logger. warn ( "Hello again log" ) ;
logger. error ( "Hello again log" ) ;
デフォルトでは、ログレベルはに設定され Warn
ており GeoJsonDataSource
、インスタンスの作成後いつでも変更できます。
geoJsonDataSource. renderingPluginLogger. level = LogLevel. Info;
または、プラグインコードで次の操作を行います。
params. logger. level = 0 ;
また、ロガーの任意のメソッドに複数のメッセージを渡すこともできます。
logger. log ( "Log message" , "Another log message" , "One more log message" ) ;
params.layer { object }
: layer
オブジェクトにはすべてのレイヤープロパティが含まれています。
params.mapUtils { object }
: mapUtils
このオブジェクトには、データを GeoJSON にデコードするときに使用できる、便利なコンバータのセットが用意されています。 詳細については、を参照 MapUtils
してください。
params.geometryDataProviders { object }
: geometryDataProviders
このオブジェクトには、マップ データへのさまざまなジオメトリデータプロバイダへのアクセスに使用される非同期取得メソッドがあります。 現在、利用できるデータプロバイダは 2 つあります。
GeoJSON でソースデータを参照しています レンダリングプラグインは、ソースデータ形式から GeoJSON へのコンバータとして機能します。 プラグインは、 GeoJSON 機能に追加のデータペイロードを配置できますが properties
、元の生データを保存するのに最適な場所ではありません。 の用途 properties
は、視覚的なスタイルを設定し、人間が読めるツールチップを提供することです。 詳細については、「 GeoJSON のスタイル表示 」を参照してください。
ソースデータへのアクセスを提供する適切な方法は、 GeoJSON 機能(プラグインの出力)をソースデータオブジェクト(プラグインの入力)にマップすることです。 これを行うに properties.protobufRef
は、フィーチャーのプロパティを指定します。 この機能によって表示される元の生データプロパティへのパスが含ま prop.someArray[34].prop2
れています ( など ) 。
プラグイントポロジデータを視覚化するためのサンプル HMC でのproperties.protobufRef
の使用状況を確認できます。 ソースデータのルートオブジェクトにはnode
AND segment
という 2 つの配列があり、対応するprotobufRef
プロパティはnode[12]
AND segment[43]
です。
制限速度のサンプルプラグイン を見ると、ソースデータプロパティ :speed_limit[2].segment_anchor_index[137]
へのより深いパスが少し生成されます。
マップで特定の機能を選択すると、データ インスペクター ライブラリウィジェットによって DataInspector
選択した機能が強調表示され、 DecodedPanel
次の図のように、の対応するソースデータノードにフォーカスが移動します。
図 1. ソースデータノード
注 GeoJSON の仕様 によっては、FeatureCollection
にproperties
を含めることはでき ません。 したがって、表示のニーズに合わせ protobufRef
て、複数のフィーチャーに同一のパスを指定できます。
データフィルタリング レンダラ プラグインは、大量のデータを処理し、 GeoJSON の多くの機能を生成します。 その結果、地図上の特定の機能を特定するのが困難になります。 幸いなことに、プラグインは視覚化されたデータの高度なフィルタリングを実装するメカニズムを提供します。
フィルタは、フィーチャーをグループ化し 、各フィーチャーにタグのセットを割り当てることで実装 されます。 タグは文字列の値で、各機能で一意にすることも、複数の機能で共有することもできます。 特定のタグを持つ機能の表示 / 非表示は、データインスペクタの データフィルター パネルで切り替えることができます。 このパネルを表示するには、DataInspector
ウィジェットの設定でenableFiltering
プロパティがtrue
に設定されていることを確認してください。
機能タグのデモおよび実装の詳細については、データ インスペクターサンプルアプリケーション に付属のplugin-hmc.js
ファイルを参照してください。 このファイルには、特定の HERE Map Content レイヤーの最新のレンダラ プラグインコードが含まれています。
次のイメージは、すべてのフィルタが有効化された表示と、いくつかのフィルタが無効化された表示の違いを示しています。
図 2. すべてのフィルタが有効になりました 図 3. 一部のフィルタが無効になって 最も単純な形式では、機能タグを各機能の文字列の配列として適用できます。 たとえば、次の GeoJSON には、無料駐車場と有料駐車場の 2 つのカテゴリがあります。 これにより、フィーチャに複数のタグが割り当てられ、フィルタリングのために複数のカテゴリに分類されることに注意してください。
{
"type" : "FeatureCollection" ,
"features" : [
{
"type" : "Feature" ,
"properties" : {
"featureTags" : [ "free" ]
} ,
"geometry" : { ... }
} ,
{
"type" : "Feature" ,
"properties" : {
"featureTags" : [ "paid" ]
} ,
"geometry" : { ... }
} ,
{
"type" : "Feature" ,
"properties" : {
"featureTags" : [ "free" , "paid" ]
} ,
"geometry" : { ... }
}
]
}
その結果 、データフィルター パネルにスイッチがある次のフィルターが作成されます。
図 4. データフィルタパネル タグを階層構造に編成して、機能のより詳細なフィルタリングを行うことができます。 これを行うに |
は、タグ名にパイプ区切り文字を使用します。 たとえば、タグBuildings|Banks
によって、Buildings
とBanks
の 2 つのタグが作成 されます。Banks
は、Buildings
内部にネストされています。 Buildings|Schools
タグを追加すると、 Schools
は親 Buildings
タグの下にもネストされます。 データフィルター パネルでは、親タグまたは各タグを個別に使用して、すべてのタグを一度に切り替えることができます。
図 5. ツリーをフィルタリングします タグには、階層の深さのレベルを無制限に設定 Buildings|Educational|Schools|Preschools
できます ( 例 : ) 。
図 6. 深い階層のツリーをフィルタリングします プラグインでは、ユーザーが処理できるジオメトリが多すぎる場合や、重要度の低い情報が生成される場合があり、オプションで表示する必要があります。 このような場合は、すべての形状を作成し、その一部のみを表示すると便利です。
では FeatureCollection
、 defaultEnabledFeatureTags
デフォルトで有効になっている機能タグの配列を指定するカスタムプロパティがサポートされています。 指定しない場合、すべての機能が有効になります。 空の配列を渡して、すべてのタグを無効にします。 たとえば、舗装されていない道路をデフォルトで非表示のままにして道路を表示する場合、次の GeoJSON を生成できます。
{
"type" : "FeatureCollection" ,
"features" : [
{
"type" : "Feature" ,
"properties" : {
"featureTags" : [ "Roads|Paved" ]
} ,
"geometry" : { ... }
} ,
{
"type" : "Feature" ,
"properties" : {
"featureTags" : [ "Roads|Unpaved" ]
} ,
"geometry" : { ... }
}
] ,
"defaultEnabledFeatureTags" : [ "Roads|Paved" ]
}
データフィルター パネルからタグの表示範囲を完全に制御できることに注意 してください。タグの既定の状態のみを指定します。defaultEnabledFeatureTags
複数のレイヤーからソースデータを参照しています GeoJSON プラグインは、異なるカタログに属する異なるレイヤーからデータを取得できるインターフェイスを提供します。 取得できるレイヤーには制限はありません。 サンプルのプラグインコードを含む複数のレイヤーのデータにレンダラ プラグイン経由でアクセスする方法の実例は Access to other data source from a GeoJSON plugin
、「サンプルのアプリを実行 する」の例を参照してください。
このインターフェイスは、getGeoJSONAsync
メソッドに渡されるparams
オブジェクトの追加のプロパティのセットを提供します。
getDependencies():Promise< VersionInfo[]>
現在検査されているカタログの依存関係とそのバージョンを取得します。
getPartitionDataProvider(layer,catalogHrn?,version?): Promise< PartitionDataProvider>
指定したパラメータのクロスレイヤパーティション データプロバイダを取得します。
layer
: パーティション データの取得元となるターゲットデータレイヤー識別子を定義する必須パラメーターです。 データインスペクタのパーティションリスト と同じレイヤーおよびタイリングタイプがサポートされています ( 現在、 HEREtile または汎用パーティションスキーム を使用するバージョン管理 レイヤーおよび揮発性 レイヤー ) 。
catalogHrn
: ターゲットカタログの識別子を定義します。 指定しない場合、現在のカタログがデフォルトになります。 このパラメータが数値の場合 catalogHrn
、 VERSION パラメータと見なされ、デフォルトで現在のカタログが使用されます。
version
: 使用するターゲットカタログのバージョン番号を定義します。 catalogHrn
がこのカタログの場合、デフォルトは現在検査されているバージョンです。 catalogHrn
がこのカタログの依存関係から検出された場合、デフォルトはそのバージョンになります。 そうでない場合、ターゲットレイヤーがバージョン付レイヤーのときに呼び出し元がバージョンを指定する必要があります。揮発性レイヤーの場合は、バージョンを指定する必要はありません。
この関数が呼び出されると、解決されたレイヤー、カタログ HERE リソースネーム 、および使用されているバージョンがブラウザコンソールに記録されます。 データ インスペクターのユーザーインターフェイスには何も表示されません。データを利用するには、プラグイン開発者が行います。
この関数は PartitionDataProvider
、次の関数を持つオブジェクトにプロミスを返します ( カタログにアクセスできない場合、またはレイヤータイプがサポートされていない場合、プロミスは拒否します ) 。
getData(partitionId): Promise< ArrayBuffer>
: ArrayBuffer
未加工のパーティション データでに解決されるプロミスを返します。 データにアクセスできない場合、プロミスは拒否します。 レイヤーのコンテンツタイプは任意です。バイトを解釈するのはプラグインコード次第です ( たとえば、 TXT 、 csv 、またはカスタムのバイナリタイプ ) 。
getDataDecoded(partitionId, raw?): Promise< object>
: JavaScript オブジェクトとしてデコードされたパーティションコンテンツへのプロミスを返します。 JSON 、 GeoJSON 、および Protobuf のコンテンツタイプがサポートされています。 デコードを実行できない場合(サポートされていないコンテンツタイプ、 Protobuf レイヤーのスキーマを取得できない、デコードエラーなど)、プロミスでは詳細なエラーを伴って拒否されます。 raw
がtrue
の場合、 Protobuf データの列挙子および long は文字列に変換されません (デフォルトfalse
) 。 raw
がの場合 false
、返されるオブジェクトのプロパティと値は、ターゲットレイヤーのレンダラ プラグインとまったく同じになります。 これにより、ターゲットレイヤーのレンダリングからコードをコピー&ペーストできます。
decodeProtobufData(messageName, buffer, raw?): Promise< object>
: buffer
指定したを messageName
ルートメッセージとして使用して ArrayBuffer からデコードされた JSON オブジェクトへのプロミスを返します。 messageName
が不明な場合、またはデータをデコードできない場合、プロミスは拒否します。 raw
がtrue
の場合、列挙子および long は文字列に変換されません (デフォルトfalse
) 。 のスキーマ宣言 messageName
は、レイヤーにリンクされているスキーマパッケージに含まれている必要があります。 たとえば、 Any
この関数を使用して、フィールドに保存されている任意の Protobuf データをデコードできます。
パーティション メタデータまたは blob は getData
、 /getDataDecoded
関数が呼び出されるまでアクセスされません。
異なるレイヤーおよびカタログgetPartitionDataProvider
を呼び出し、getGeoJSONAsync
呼び出しの有効期間中に返されたPartitionDataProviders
を保存し、GeoJSON 出力を作成するときにそれらのgetData/getDataDecoded
/decodeProtobufData
メソッドを繰り返し呼び出す必要があります。
デコードされたパネル に表示されている内容に影響を与えることはありませんが、getData
getDataDecoded
呼び出しによっては常にユーザーが選択したパーティションが表示されます。
バージョン依存関係の解決 データ インスペクター ライブラリには、異なるカタログ間のバージョン依存関係の解決、およびデータ インスペクターの地域の HERE Map Content ( HMC )カタログ(日本、中国、または世界の REST )の対応するバージョン間のメカニズムが組み込まれています。 これは、道路のジオメトリ情報を含まない交通量や制限速度などのデータを視覚化するために使用されます。
たとえば、 HMC Roads-Navigation 属性 レイヤーの制限速度行を、 HMC Roads-Topology ジオメトリ レイヤーの道路ジオメトリにマップする必要があります。 この場合、新しいメカニズムによって、速度制限行データおよび道路形状データのバージョンが位置合わせされ、エラーが発生しなくなり、最も正確な表示が得られます。 データ インスペクターは、レイヤーの依存関係を読み取り、対応する地域の HMC カタログからジオメトリ情報を自動的に取得します。
必要な HMC カタログへのアクセス権がない場合、または表示するレイヤーの依存関係で正しい HMC が定義されていない場合、最新の HMC バージョンがデフォルトで使用されます(中国または世界の REST )。
レイヤーの依存関係を設定する方法の詳細について は、『 CLI 開発者ガイド 』を参照してください。