レンダリング関数

レンダラ プラグインコードは、次のいずれかの関数を含むオブジェクトを返す単一の関数を宣言する必要があります。

同期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 、インターフェイスを実装するロガーを使用し、コンソールに情報を記録するように完全に設定されます。 ロガーには、次の機能があります。

    // trace
    logger.trace("Trace message");
    
    // debug
    logger.debug("Hello again log");
    
    // log
    logger.log("Hello log");
    
    // info
    logger.info("Hello again log");
    
    // warning
    logger.warn("Hello again log");
    
    // error
    logger.error("Hello again log");
    

    デフォルトでは、ログレベルはに設定され Warnており GeoJsonDataSource 、インスタンスの作成後いつでも変更できます。

    // Possible log levels are: Trace = 0, Debug = 1, Log = 2, Info = 3, Warn = 4, Error = 5.
    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 つあります。

    • getSegmentAnchorDataProvider: インスタンスで解決されるプロミスを持つ非同期メソッド SegmentAnchorGeometryDataProvider
    • getRoadSegmentsDataProvider: インスタンスで解決されるプロミスを持つ非同期メソッド BaseRoadSegmentsDataProvider

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 の仕様によっては、FeatureCollectionpropertiesを含めることはでき ません。 したがって、表示のニーズに合わせ 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によって、BuildingsBanksの 2 つのタグが作成 されます。Banksは、Buildings内部にネストされています。 Buildings|Schools タグを追加すると、 Schools は親 Buildings タグの下にもネストされます。 データフィルター パネルでは、親タグまたは各タグを個別に使用して、すべてのタグを一度に切り替えることができます。

ツリーをフィルタリングします
図 5. ツリーをフィルタリングします

タグには、階層の深さのレベルを無制限に設定 Buildings|Educational|Schools|Preschoolsできます ( 例 : ) 。

深い階層のツリーをフィルタリングします
図 6. 深い階層のツリーをフィルタリングします

既定のタグ

プラグインでは、ユーザーが処理できるジオメトリが多すぎる場合や、重要度の低い情報が生成される場合があり、オプションで表示する必要があります。 このような場合は、すべての形状を作成し、その一部のみを表示すると便利です。

では FeatureCollectiondefaultEnabledFeatureTags デフォルトで有効になっている機能タグの配列を指定するカスタムプロパティがサポートされています。 指定しない場合、すべての機能が有効になります。 空の配列を渡して、すべてのタグを無効にします。 たとえば、舗装されていない道路をデフォルトで非表示のままにして道路を表示する場合、次の 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 レイヤーのスキーマを取得できない、デコードエラーなど)、プロミスでは詳細なエラーを伴って拒否されます。 rawtrueの場合、 Protobuf データの列挙子および long は文字列に変換されません (デフォルトfalse) 。 raw がの場合 false、返されるオブジェクトのプロパティと値は、ターゲットレイヤーのレンダラ プラグインとまったく同じになります。 これにより、ターゲットレイヤーのレンダリングからコードをコピー&ペーストできます。

    • decodeProtobufData(messageName, buffer, raw?): Promise<object>: buffer 指定したを messageName ルートメッセージとして使用して ArrayBuffer からデコードされた JSON オブジェクトへのプロミスを返します。 messageName が不明な場合、またはデータをデコードできない場合、プロミスは拒否します。 rawtrueの場合、列挙子および long は文字列に変換されません (デフォルトfalse) 。 のスキーマ宣言 messageName は、レイヤーにリンクされているスキーマパッケージに含まれている必要があります。 たとえば、 Any この関数を使用して、フィールドに保存されている任意の Protobuf データをデコードできます。

      パーティション メタデータまたは blob は getData、 /getDataDecoded 関数が呼び出されるまでアクセスされません。

      異なるレイヤーおよびカタログgetPartitionDataProviderを呼び出し、getGeoJSONAsync呼び出しの有効期間中に返されたPartitionDataProvidersを保存し、GeoJSON 出力を作成するときにそれらのgetData/getDataDecoded/decodeProtobufDataメソッドを繰り返し呼び出す必要があります。

      デコードされたパネルに表示されている内容に影響を与えることはありませんが、getDatagetDataDecoded呼び出しによっては常にユーザーが選択したパーティションが表示されます。

バージョン依存関係の解決

データ インスペクター ライブラリには、異なるカタログ間のバージョン依存関係の解決、およびデータ インスペクターの地域の HERE Map Content ( HMC )カタログ(日本、中国、または世界の REST )の対応するバージョン間のメカニズムが組み込まれています。 これは、道路のジオメトリ情報を含まない交通量や制限速度などのデータを視覚化するために使用されます。

たとえば、 HMC Roads-Navigation 属性 レイヤーの制限速度行を、 HMC Roads-Topology ジオメトリ レイヤーの道路ジオメトリにマップする必要があります。 この場合、新しいメカニズムによって、速度制限行データおよび道路形状データのバージョンが位置合わせされ、エラーが発生しなくなり、最も正確な表示が得られます。 データ インスペクターは、レイヤーの依存関係を読み取り、対応する地域の HMC カタログからジオメトリ情報を自動的に取得します。

必要な HMC カタログへのアクセス権がない場合、または表示するレイヤーの依存関係で正しい HMC が定義されていない場合、最新の HMC バージョンがデフォルトで使用されます(中国または世界の REST )。

レイヤーの依存関係を設定する方法の詳細について は、『 CLI 開発者ガイド』を参照してください。

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

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