ガイドAPIリファレンス
ガイド

ジオフェンスポリゴンとレイヤーの関係

各ジオフェンスポリゴン、ポイント、ポリラインは、必ず1つのレイヤーに割り当てられます。レイヤーは複数作成できます。レイヤーには、ポリゴン、ポイント、ポリラインのいずれかの1つのジオメトリータイプのみ含められます。これにより、ジオフェンスタイプ、トピック、アセットグループごとにジオフェンスをグループ化できます。

可能な場合は、レイヤーのすべてのポリゴンを1つのバッチで送信または更新します。HERE Geofencing APIは個々のポリゴンの追加または変更をサポートしていますが、ストレージタイプが「更新可能」の場合にのみサポートされ、「読み取り専用」の場合にはサポートされません。

各お客様はレイヤーごとに多くのジオメトリーを含む複数レイヤーを作成できます。レイヤーの最大数については、ジオフェンシングのリソースである「serviceconfiguration.json」を参照してください。上限を上げる必要がある場合は、TCS (テクニカルカスタマーサポート) にお問い合わせください。

ジオフェンスをマップレイヤーに分散させる

ユーザー/device/carごとに個別のジオフェンスレイヤーを作成することが当然のように思われますが、このサービスではその方法は効率的ではありません。

通常、同じタイプ (空間範囲、更新頻度、座標解像度) のジオフェンスは1つのレイヤーにまとめるようにします。

それぞれのジオフェンスには、適用するアセット (および期間などの条件) を示す属性 (複数も可) を含めます。それにより、お客様のアプリで車両/userに適用するフェンスをフィルターできます。

バックエンドサービスであるHERE Geofencing API V8は、通常、ユーザー/devicesから直接呼び出されることはありません。そのため、異なる車両/usersのジオフェンスを顧客のアプリに戻すことは、プライバシーの問題にはなりません。

また、異なるジオメトリータイプ (円とポリゴンなど) は別々のレイヤーに保存します。

ポリゴン識別子とアトリビューション

HERE Geofencing APIは一般的なデータストレージとしての使用を目的としたものではないものの、APIはリクエストにレスポンスするためにジオシェイプへのアクセス権が必要です。このようなジオシェイプそれぞれが一意の識別子に関連付けられている必要があります。HERE Geofencing APIではそのIDもレスポンスに含まれます。

このようなIDを割り当てる一般的な方法の1つは、次のようなシンプルなジオメトリーIDを使用する方法です。

  • ポリゴンフェンスの場合はpolygon ID
  • 道路、鉄道、川、その他の線形フェンスの場合はlink ID
  • ポイントフェンスの場合はpoint IDまたはstore ID

次の例では、ID列でポリゴンを一意に識別しています。

ID	NAME	ABBR	WKT
1	AlexanderPlatz	DEU	POLYGON((13.41252 52.52228,13.41426 52.5221,13.41522 52.52113,13.41227 52.51981,13.41252 52.52228))
2	BrandenburgGate	DEU	POLYGON((13.38021 52.51668,13.37987 52.51678,13.37984 52.5163,13.37984 52.5163,13.38021 52.51668))
3	RoyalObservatory	UK	POLYGON((-0.00156 51.47778,-0.00142 51.47796,-0.00114 51.47776,-0.00172 51.4777,-0.00156 51.47778))

レイヤーに読み込まれたジオシェイプの指定した半径内に地理座標があるかどうかを確認する場合は、attributesリクエストパラメーターを含めて、レスポンスでジオシェイプをグループ化する方法を定義します。たとえば、この例をレイヤーに読み込み、リクエストにattributes=NAMEと設定した場合、半径内のジオシェイプはレスポンス内で個別に表示され、各エントリはNAME列の固有の値に対応する形になります。レスポンスの例は以下のとおりです。レスポンスにはアセットポイントのoriginalLatおよびoriginalLonが含まれます。

{
    "geometries": [
        {
            "attributes": {
                "NAME": "BrandenburgGate"
            },
            "distance": -7.44,
            "nearestLat": 52.51655,
            "nearestLon": 13.38008,
            "originalLat": 52.516582814825604,
            "originalLon": 13.379987793177522,
            "layerId": "GEOFENCINGTEST",
            "geometry": "MULTIPOLYGON(((13.38021 52.51668,13.37984 52.5163,13.37987 52.51678,13.38021 52.51668)))"
        },
        {
            "attributes": {
                "NAME": "AlexanderPlatz"
            },
            "distance": 2216.24,
            "nearestLat": 52.51981,
            "nearestLon": 13.41227,
            "originalLat": 52.516582814825604,
            "originalLon": 13.379987793177522,
            "layerId": "GEOFENCINGTEST",
            "geometry": "MULTIPOLYGON(((13.41252 52.52228,13.41426 52.5221,13.41522 52.52113,13.41227 52.51981,13.41252 52.52228)))"
        }
    ],
    "meta": [
        {
            "layerId": "GEOFENCINGTEST",
            "lastUpdateTimeStamp": 1731580417770
        }
    ]
}

ただし、同じ状況でattributes=IDを指定した場合、レスポンスでは指定したABBR値に一致する行のリクエストに対応する結果がグループ化されます。つまり、ID=2と指定すると、結果にはID=2のみのジオメトリーが含まれます。この場合、レスポンスは次のようになります。

{
    "geometries": [
        {
            "attributes": {
                "ID": "2"
            },
            "distance": -7.44,
            "nearestLat": 52.51655,
            "nearestLon": 13.38008,
            "originalLat": 52.516582814825604,
            "originalLon": 13.379987793177522,
            "layerId": "GEOFENCINGTEST",
            "geometry": "MULTIPOLYGON(((13.38021 52.51668,13.37984 52.5163,13.37987 52.51678,13.38021 52.51668)))"
        }
    ],
    "meta": [
        {
            "layerId": "GEOFENCINGTEST",
            "lastUpdateTimeStamp": 1731580417770
        }
    ]
}

次のようにジオシェイプに4行目を追加した場合:

4	Reichstag	BER	POLYGON((13.37494 52.51885,13.37485 52.51948,13.3755 52.51817,13.3744 52.51757,13.37494 52.51885))

APIでは地理座標が範囲内にあるものの、値が分かれているために別のグループとなっている場合、このジオシェイプをレスポンスに含めます。この場合、レスポンスは次のようになります。

{
    "geometries": [
        {
            "attributes": {
                "ID": "2"
            },
            "distance": -7.44,
            "nearestLat": 52.51655,
            "nearestLon": 13.38008,
            "originalLat": 52.516582814825604,
            "originalLon": 13.379987793177522,
            "layerId": "GEOFENCINGTEST",
            "geometry": "MULTIPOLYGON(((13.38021 52.51668,13.37984 52.5163,13.37987 52.51678,13.38021 52.51668)))"
        },
        {
            "attributes": {
                "ID": "4"
            },
            "distance": 351.64,
            "nearestLat": 52.51817,
            "nearestLon": 13.3755,
            "originalLat": 52.516582814825604,
            "originalLon": 13.379987793177522,
            "layerId": "GEOFENCINGTEST",
            "geometry": "MULTIPOLYGON(((13.37494 52.51885,13.37485 52.51948,13.3755 52.51817,13.3744 52.51757,13.37494 52.51885)))"
        },
        {
            "attributes": {
                "ID": "1"
            },
            "distance": 2216.24,
            "nearestLat": 52.51981,
            "nearestLon": 13.41227,
            "originalLat": 52.516582814825604,
            "originalLon": 13.379987793177522,
            "layerId": "GEOFENCINGTEST",
            "geometry": "MULTIPOLYGON(((13.41252 52.52228,13.41426 52.5221,13.41522 52.52113,13.41227 52.51981,13.41252 52.52228)))"
        }
    ],
    "meta": [
        {
            "layerId": "GEOFENCINGTEST",
            "lastUpdateTimeStamp": 1731580417770
        }
    ]
}

つまり、この列の値はSQLのGROUP BY関数と同様に使用できます。

さらに、カスタム属性をジオシェイプに関連付けて、アプリで使用することもできます。APIのレスポンスにはジオシェイプにリンクされた属性が含まれますが、アプリにとって重要な属性のみに限定してください。

ジオメトリーと同時に大量のデータを保存する必要がある場合 (バイト単位で、追加データのサイズがジオメトリーのサイズ以上の場合) は、TCS (テクニカルカスタマーサポート) にご連絡ください。