検索結果に基づいてウェイポイントを設定する方法
このチュートリアルでは、検索結果に基づいて origin、destination、または via の経由地を設定する方法を説明します。
これがサポートするユーザー ワークフローは、通常、次のようなバリエーションになります。
- ユーザーが
52.51218,13.28539付近のマップを開いていたとします。 - たとえば
Storkwinkel 17,という用語を検索します。 - 検索結果を選択し、その場所へのルートを計算します。
このユースケースでは、検索レスポンスから必要な情報を抽出し、Routing APIに渡すことが重要です。
このチュートリアルでは、Geocoding and Search API v7を使用し、施設情報 (POI) を検索して照会します。 別の検索プロバイダーを使用している場合でも、同様の情報を抽出できます。
ユーザー入力に基づいた自動候補提示/検索
Autosuggestサービスを使用して、ユーザーが入力したテキストに基づいてPOIを検索します。
次のリクエストは、テキストStorkwinkel 17を使用して1件の結果を検索します。
curl -gX GET 'https://autosuggest.search.hereapi.com/v1/autosuggest?'\
'at=52.51218%2C13.28539&'\
'lang=en-US&'\
'limit=1&'\
'q=Storkwinkel%2017&'\
'apiKey=YOUR_API_KEY'レスポンスには、最も関連性が高い項目に関する情報が含まれています。
{
"items": [
{
"title": "Storkwinkel 17, 10711 Berlin, Germany",
"id": "here:af:streetsection:T4212cY0RD0PkIFjpNF70B:CgcIBCCR0s5QEAEaAjE3",
...
}
]
}ユーザーがこの検索結果を選択すると、Lookup サービスを使用して追加情報を照会します。
curl -gX GET 'https://lookup.search.hereapi.com/v1/lookup?'\
'id=here%3Aaf%3Astreetsection%3AT4212cY0RD0PkIFjpNF70B%3ACgcIBCCR0s5QEAEaAjE3&'\
'showMapReferences=segments&'\
'apiKey=YOUR_API_KEY'レスポンスには、チュートリアルの残りの部分で使用する検索結果の追加情報が含まれています。
{
"title": "Storkwinkel 17, 10711 Berlin, Germany",
"id": "here:af:streetsection:T4212cY0RD0PkIFjpNF70B:CgcIBCCR0s5QEAEaAjE3",
"language": "de",
"resultType": "houseNumber",
"houseNumberType": "PA",
"address": {
"label": "Storkwinkel 17, 10711 Berlin, Germany",
"countryCode": "DEU",
"countryName": "Germany",
"stateCode": "BE",
"state": "Berlin",
"countyCode": "B",
"county": "Berlin",
"city": "Berlin",
"district": "Halensee",
"street": "Storkwinkel",
"postalCode": "10711",
"houseNumber": "17"
},
"position": {
"lat": 52.49443,
"lng": 13.28874
},
"access": [
{
"lat": 52.49483,
"lng": 13.28881
}
],
...,
"mapReferences": {
"segments": [
{
"ref": "here:cm:segment:484382389#0.267944",
"side": "left"
}
]
}
}基本情報を抽出する
POIへのルートを設定するための経由地のルート検索を構築する場合、最も重要な情報は次のとおりです。
position座標。これらの座標は POI 自体の位置を示し、通常は POI を表すアイコンをレンダリングするための位置として使用されます。access[]座標配列の最初の要素。access座標は、道路ネットワークからPOIにアクセスするために使用できる場所を示しており、通常はpositionとは異なります。
経由地のPlaceには、position座標ではなく、access座標 (使用可能な場合) を使用することが重要です。
position座標を使用すると、実際には駐車場や便利な道路にルーティングすべきところを、ルーターが幹線道路や高速道路などの不便な場所にルート検索してしまうおそれがあります。
すべてのPOIにaccess座標があるわけではありません。access 座標が指定されていない場合は、代わりに position 座標を使用します。
この例の検索結果には、position と access の両方の座標が含まれています。
次の画像では、これら 2 つの座標が B (access 座標) と ↓ (position 座標) で視覚化されています。これらの position 座標は近くの高速道路と一致しますが、access 座標は正しい道路にあります。
access[0] の座標を destination パラメーターのメイン Place として使用し、position を sideOfStreetHint Place オプションの値として使用します。
destination=52.49483,13.28881;sideOfStreetHint=52.49443,13.28874
position 座標を sideOfStreetHint として使用すると、Routing API は特定のケースで適切な道路側にルーティングできるようになります。
この属性の説明については、道路の片側を選択/enforceする方法に関するチュートリアルを参照してください。
また、一部の検索プロバイダーは明示的なsideOfStreetの場所でレスポンスします。その場合は、sideOfStreetHintの代わりにpositionを使用します。
追加のマッチングヒントを提供する
場合によっては、access座標が明確に一致しないことがあります。交差点、または複数の道路が異なる標高で交差する場所に設置されることがあります。
一致精度を向上させるには、Routing APIに追加情報を提供してください (検索結果で利用可能な場合)。
SegmentIdオプションのヒントを使用する
SegmentIdオプションのヒントを使用する検索結果に正しいセグメントへの参照が提供される場合は、segmentIdHint Placeオプションを使用してこれをRouting APIに渡すことができます。この例では、セグメント参照は mapReferences.segments[0].ref: here:cm:segment:484382389#0.267944 にあります。# 文字の前の部分は SegmentId です。結果として destination パラメーターは次のようになります。
destination=52.49483,13.28881;sideOfStreetHint=52.49443,13.28874;segmentIdHint=here:cm:segment:484382389
道路名のヒントを使用する
SegmentIdを利用できない場合は、代わりにnameHintを指定できます。これにより、Routing APIは最も類似した名前の道路と一致させるようになります。この例では、道路の名前は address.street にあります。結果として destination パラメーターは次のようになります。
destination=52.49483,13.28881;sideOfStreetHint=52.49443,13.28874;nameHint=Storkwinkel
先月の更新