位置情報サービスへのアクセス
概要
HERE Data SDK for Python は 、 HERE リソースネーム を使用して、すべての HERE platform 位置情報サービスへの一般的なアクセスを提供します。 これには GET
、HEAD
、POST
、PUT
、PATCH
、DELETE
などの REST リクエストを実行する機能が含まれます 。 また、認証、許可、および基本 API ルックアップを手動で処理する必要なく、 API エンドポイントへのコールを行います。
利用可能なすべてのメソッドの詳細について は、 API リファレンス of the Service クラスを参照してください。
サービスの発見とアクセス
サービスは HERE platform ポータルで検出 できますが、アカウントがアクセス権を持っているすべてのサービスを一覧表示することによって、プログラムで検出することもできます。
すべてのサービスのリストを取得します
from here.platform import Platform
platform = Platform()
services = platform.list_services()
for service in services:
print(f"{service.name} ({service.hrn})")
結果 :
Fuel prices (hrn:here:service::olp-here:fuel-prices-3)
HERE Destination Weather (hrn:here:service::olp-here:destination-weather-3)
HERE Isoline Routing (hrn:here:service::olp-here:routing-isoline-8)
HERE Routing (hrn:here:service::olp-here:routing-8)
HERE Routing - Transit (hrn:here:service::olp-here:transit-routing-8)
HERE Search - One Box Search (hrn:here:service::olp-here:search-discover-7)
HERE Search - Reverse Geocoder (hrn:here:service::olp-here:search-revgeocode-7)
( わかりやすいように一覧表が切り捨てられます )
1 つのサービスを利用できます
HERE リソースネーム を提供することで、サービスに接続できます。
routing_service = platform.get_service("hrn:here:service::olp-here:routing-8")
各サービスは、プラットフォームポータルで直接開いて検査することもできます。
routing_service.open_in_portal()
サービスの基本的なプロパティを取得します
サービスのキープロパティは属性として公開されます。 サービスに追加のプロパティが表示 configuration
されます。
print('',
'HRN: ', routing_service.hrn, '\n',
'Version: ', routing_service.version, '\n',
'Name: ', routing_service.name, '\n',
'Base URL: ', routing_service.base_url, '\n',
'Summary: ', routing_service.summary, '\n',
'Tags: ', routing_service.tags, '\n',
)
出力例 :
HRN: hrn:here:service::olp-here:routing-8
Version: 8.29.1
Name: HERE Routing
Base URL: https://router.hereapi.com/v8
Summary: The Routing service end point calculates routes between two or more locations using various transport modes and provides additional route-related information. The Routing API is customizable so that the route calculation and additional information can be adapted to both consumer and enterprise applications.
Tags: ['Waypoints', 'Navigation', 'Directions', 'Traffic', 'Pedestrian', 'Routing', 'Vehicle', 'HERE', 'ETA', 'Short route', 'Route shape', 'Car', 'Fast route', 'Alternative routes', 'Route']
サービスおよび REST API コールの例
サービスを直接呼び出すことができます。各 API 呼び出しでサービスベースの URL を手動で認証し、前に付加する必要はありません。GET
、 HEAD
、 POST
PUT
PATCH
、およびDELETE
の呼び出しは、対応する Python メソッドを使用してサービスオブジェクトで実行できます。
公開され ている REST API の詳細ガイドおよび技術仕様については、プラットフォームポータルおよび HERE Developer ポータルからアクセスできる各サービスのドキュメントを参照してください。
等値線 (Isoline) ルーティング
ドイツ中部の幹線道路沿い、 1 キロメートルと 10 キロメートルの場所から車で到達できるエリアを示す 等値線 (Isoline) ルートリクエストの例
次の例 GET
では、要求を実行します。パラメータはクエリー文字列で渡されます。
from here.platform import Platform
platform = Platform()
isoline = platform.get_service("hrn:here:service::olp-here:routing-isoline-8")
params = {
"origin": "51.611571,11.351608",
"range[type]": "distance",
"range[values]": "1000,10000",
"transportMode": "car"
}
result = isoline.get("/isolines", params=params)
結果は次の内容の辞書になります。
{
"departure": {
"time": "2021-10-21T15:54:17+00:00",
"place": {
"type": "place",
"location": {
"lat": 51.6114166,
"lng": 11.3517286
},
"originalLocation": {
"lat": 51.611571,
"lng": 11.3516079
}
}
},
"isolines": [
{
"range": {
"type": "distance",
"value": 1000
},
"polygons": [
{
"outer": "BGy4guiDkrl0V-qBmgBuVqgCAwhIuVsgC-qB-qBu"
}
]
},
{
"range": {
"type": "distance",
"value": 10000
},
"polygons": [
{
"outer": "BGurztiDs7jsV8qBmgBuVsgCAq3KtVsgC7qB8qBv"
}
]
}
]
}
( わかりやすいように多角形の輪郭が切り捨てられます )
この例では、等値線を表すポリゴンが 、折れ線を使用してエンコードされます。 エンコードされた文字列は 、 flexpolyline Python パッケージを使用してデコードできます。 このエンコーディングの使用は、ルーティングサービスとその API の間で共通です。
次のトランジット出発
インドのムンバイにある NESCO IT Park のエリアで、次のトランジット出発を公開するトランジットサービスへのクエリーの例。
次の例 GET
では、要求を実行します。パラメータはクエリー文字列で渡されます。
from here.platform import Platform
platform = Platform()
next_departures = platform.get_service("hrn:here:service::olp-here:transit-next-departures-8")
params = {
"in": "19.152351636582207,72.85587912861622,r=50",
"maxPlaces": 10
}
result = next_departures.get("/departures", params=params)
結果は次の内容の辞書になります。
{
"boards": [
{
"place": {
"name": "Mahananda Dairy",
"type": "station",
"location": {
"lat": 19.150885,
"lng": 72.85633
},
"id": "408202729"
},
"departures": [
{
"time": "2021-10-21T20:59:00+05:30",
"transport": {
"mode": "bus",
"name": "40LTD",
"category": "Bus",
"headsign": "Borivali Station East",
"shortName": "40LTD",
"longName": "40LTD"
},
"agency": {
"id": "bhB00000",
"name": "BEST (The Brihanmumbai Electric Supply & Transport)",
"website": "https://www.bestundertaking.com/in/"
}
}
]
},
{
"place": {
"name": "Vanrai Colony",
"type": "station",
"location": {
"lat": 19.153904,
"lng": 72.856668
},
"id": "408209293"
},
"departures": [
{
"time": "2021-10-21T20:58:00+05:30",
"transport": {
"mode": "bus",
"name": "C72EXP",
"category": "Bus",
"headsign": "Bhayander Station East",
"shortName": "C72EXP",
"longName": "C72EXP"
},
"agency": {
"id": "bhB00000",
"name": "BEST (The Brihanmumbai Electric Supply & Transport)",
"website": "https://www.bestundertaking.com/in/"
}
}
]
}
]
}
( わかりやすいように結果が切り捨てられます )
ネットワークの位置付け
モバイル機器が LTE ネットワークから受信する信号を介して位置を特定するポジショニングクエリの例。 このサービスは、デバイスの位置がドイツのベルリンにあることを検出します。
次の例 POST
では、リクエストを実行します。パラメータはリクエストの本文に含まれます。
from here.platform import Platform
platform = Platform()
positioning = platform.get_service("hrn:here:service::olp-here:positioning-2")
data = {
"lte": [
{
"mcc": 262,
"mnc": 2,
"cid": 2898945,
"rsrp": -50, "rsrq": -5,
"nmr": [
{ "earfcn": 6300, "pci": 237, "rsrp": -60, "rsrq": -6 },
{ "earfcn": 6300, "pci": 442, "rsrp": -70, "rsrq": -7 }
]
}
]
}
result = positioning.post("/locate", data=data)
結果は次の内容の辞書になります。
{
"location": {
"lat": 52.51812458,
"lng": 13.37465286,
"accuracy": 2139
}
}