我們已經談過了算出一條路徑的「路徑規劃」功能,也談過了同時算出多條路徑的「Matrix Routing」,現在我們就來談談「Isoline Routing」。
Isoline,中文叫做「等高線」,等高線跟路徑規劃又有什麼關係呢?依照維基百科的說明,等高線的定義是「地形圖上高程相等的各點所連成的閉合曲線,是等值線的一種特殊形式。」請注意關鍵字「等值線」。
因此我們可以建立兩個觀念觀念:
但這跟路徑規劃有什麼關係呢?我們可以舉個例子,我今天是一間蛋糕店的老闆,我今天要怎麼決定我能夠外送到哪邊呢?因為蛋糕不能離開冷藏太久,因此我可以簡單規定「外送限於路程 15 分鐘內的客戶」,但要怎麼定出「15 分鐘」的範圍?這就需要 Isoline Routing 了。
假設我今天是一個連鎖蛋糕店的經營者,這對我來說更重要了,我就可以分析我的每一間分店外送路程在 15 分鐘內的範圍,這樣我就知道哪些地方可能有大量的蛋糕需求(例如辦公大樓的下午茶需求)卻不在我的服務範圍內,因此可以增加我的服務據點,或是採取其他的策略來滿足更多客戶。
以個人用途來說,我今天在電動車充電站充飽了電之後,要怎麼知道這些電量可以讓我到哪些地方呢?我或許沒有明確的目的地,只想騎車到處亂晃,我就可以用這些電的行駛里程數來算出一個「我可以到達的範圍」。如果我的電動車廠商提供這樣的服務,是不是能夠有效的減少消費者的里程焦慮呢?
下面這張圖,就畫出了我在台北市萬華區的電動車充電站充滿電之後可行駛 50 公里的範圍,其實已經可以接近新竹縣的竹北市了。
因此我們可以知道,使用 Isoline Routing 並不是用來算出實際的路徑,而是算出一個「可及的範圍」,因此會是一個封閉的多邊形。
HERE Routing API 的 Isoline Routing 也具有以下特色:
以下就是一個 Isoline Routing 回傳結果的範例,在「isoline」這個屬性中您可以看到一個「shape」,裡面有一串經緯度,這串經緯度就是構成這個封閉多邊形的一連串點位。而下方的「start」屬性中有「originalPosition」屬性,裡面的經緯度就代表出發地。
{
"response": {
"metaInfo": {
"timestamp": "2020-09-17T06:28:52Z",
"mapVersion": "8.30.112.153",
"moduleVersion": "7.2.202036-7801",
"interfaceVersion": "2.6.76",
"availableMapVersion": [
"8.30.112.153"
]
},
"center": {
"latitude": 52.5159999,
"longitude": 13.3777999
},
"isoline": [
{
"range": 100,
"component": [
{
"id": 0,
"shape": [
"52.51688,13.3778286",
"52.5172234,13.3780861",
"52.5172234,13.3784294",
"52.5158501,13.3798027",
"52.5155067,13.3798027",
"52.5153351,13.3792877",
"52.5153351,13.3786011",
"52.5155067,13.3780861",
"52.5161934,13.3773994",
"52.5165367,13.3773136",
"52.51688,13.3778286"
]
}
]
}
],
"start": {
"linkId": "+733073542",
"mappedPosition": {
"latitude": 52.5160415,
"longitude": 13.3782512
},
"originalPosition": {
"latitude": 52.5159999,
"longitude": 13.3777999
}
}
}
}
在 快速建構地圖服務(七)- 認識 HERE Routing API - 路徑規劃 一文中我們已經介紹過 HERE Routing API Reference Client 這個有用的工具,我們也可運用這個工具來體驗 Matrix Routing,會更有效率。
打開 HERE Routing API Reference Client,接著請先按下左上角的「New Tab +」,選擇「Caculate Isoline」,您會看到畫面上面多了一個「Isoline 1」的標籤頁,這個標籤頁就是 Matrix Routing;而旁邊的「 OLS 1」則是 Routing API V8。
接著我們可以把地圖移動到台灣。
在地圖上按下右鍵,也會出現幾個似曾相識的選項:
接著請在地圖上隨意處按下右鍵選擇「Add Start」來定義一個起點。接著在左方的「Range」選擇「Distance」,在「VALUE, M」中輸入「1000」,然後按下右下方的「Send」。
接著畫面上會出現一個封閉的多邊形,以我的案例來說,我以「台北 101」的位置(經緯度座標為 25.033909,121.564473)作為起點,使用預設的模式計算汽車的最快路徑,「Range」定義的可及範圍為 1000 公尺,畫面上出現的範圍就是「以台北 101 為起點開車行駛 1000 公尺可以抵達的範圍」。
HERE Isoline Routing 最有趣的是,我們可以算出不只一個可及範圍,請把「Range」中的「1000」改成「1000,2000,3000」,意思就是我們要一次計算出三個範圍,分別是 1000 公尺、2000 公尺與 3000 公尺,接著按下右下角的「Send」,來看看發生了什麼事。
在計算出的結果中,特別有趣的是「Isoline 1」代表 2000 公尺以及「Isoline 2」代表 3000 公尺,可以看到計算出的可及範圍是會隨著道路的分佈而變化的,在「Isoline 2」甚至因為橋樑的形狀而變化,這就代表 HERE Isoline Routing 是可以忠實的反映出現實的可及範圍,而不是傳統的用圓心加上半徑算出範圍的作法。
使用 Isoline Routing,可以更加準確的算出在一定時間或距離內可以到達的範圍,這個在社會安全、商業分析上都非常的有價值。
接著我們來試試看算出以時間為基準的可及範圍,請在左方的「Range」選擇「TIME」,並且在下方的「VALUE, S」中輸入「900」,代表 900 秒,也就是 15 分鐘。下方的「TRAFFIC ROUTING」則選擇「Enabled」,這樣會把路況也考慮進去,算出來的可及範圍會更符合現實。
按下右下角的「Send」之後,就會算出從起點出發開車 15 分鐘會到達的範圍。以此案例來說,從台北 101 出發行駛 15 分鐘最遠可以到達新店、內湖、南港與大佳河濱公園。可以看到只要是有高快速道路的地方,可及範圍就會往外延伸,這是因為高快速道路的行駛速度比一般道路快,因此在同樣的時間可以移動更遠的距離。因此同樣是 15 分鐘,待在市區只會到大安森林公園,但上了高快速道路都可以跑到新店了。
這邊容我重複一下上一個課程 快速建構地圖服務(八)- 認識 Matrix Routing 中的一句格言「看起來近的不一定近,看起來遠的也不一定遠」,而 HERE Isoline Routing,也是用來幫助您獲得正確空間/時間概念的方便工具。
接著我們來展示一下電動車的可及範圍與一般車輛有何不同,請按下左上角的「New Tab +」來新增一個「Calc Isoline」的分頁,這邊會是「Isoline 2」。
然後,在「Isoline 2」的起點位置輸入以下經緯度:23.912213,120.686272,這是一個位在南投市的地點,接著在「Range」中選擇「Consumption」,並在下方的「Value」中輸入「10000,20000,30000」(單位為 Wh)代表剩餘電量為 10000Wh、20000Wh、30000Wh。至於「Traffic Routing」,您可以自由選擇,因為這不是重點。
接著按下「Mode」下方的「Features」,會出現七種道路的迴避選項,請在「TOLLROADS」與「MOTORWAYS」都選擇「Strict Exclude」,以免高快速道路影響計算的結果。
接著下方的「Consumption」,請選擇「Default」。接著按下右下角的「Send」,就算出了從南投市出發的剩餘電量為 10000Wh、20000Wh、30000Wh三台電動車,能夠抵達的最遠範圍。這邊要留意的是,您會發現往西北方、西南方、北方的範圍,都比往東北方、東南方還要來的遠不少。為什麼?您應該已經猜到了,因為電動車的特性,下坡非常省電,甚至還可以回充,但上坡就非常耗電,因此比較往東北跟東南的範圍,都比往其他方向少很多。
如果把「Range」改成「DISTANCE」,出來的結果,往東與往西的方向就沒有那麼懸殊。
這樣的比較,是不是讓您更了解 HERE 在一般汽車路徑計算跟電動車路徑計算的獨到之處呢?
接著我們再來玩一個參數「Max Points」,這個參數有趣的地方在於,您可以依照您的需求來調整多邊形的精細度。請把裡面的值改成「50」,也就是說算出來的每個多邊形不能夠超過 50 個點,這樣出來的多邊形非常的粗略,但是也節省了回傳的時間與流量。因此您可以依照您的需求來調整這個參數。
同樣的,下方的「API CALL」中的 URL 也可以複製出來,稍做修改就可以使用,例如:
https://isoline.route.api.here.com/routing/7.2/calculateisoline.json
?mode=fastest;car;motorway:-3,tollroad:-3
&maxpoints=50
&rangetype=distance
&range=10000,20000,30000
&jsonattributes=41
&quality=1
&start=geo!stopOver!23.912213,120.686272
&app_code=pxIXqdtgOSwQDXSDfjLQpw
&app_id=cgZPrYfgRePXzXC3PbBp
修改過後就變成:
https://isoline.route.ls.hereapi.com/routing/7.2/calculateisoline.json
?mode=fastest;car;motorway:-3,tollroad:-3 // 最快汽車路徑,完全避開高快速公路與收費道路
&maxpoints=50 // 多邊形最多 50 個點
&rangetype=distance // 使用距離計算範圍
&range=10000,20000,30000 // 定義三個範圍分別為 10000、20000、30000
&jsonattributes=41 // 41 = 1(屬性首字元小寫)+8(在物件中加入「_type」屬性)+32(回傳路徑的形狀為 double 而非字串)
&quality=1 // 最佳品質
&start=geo!stopOver!23.912213,120.686272 // 起點
&apikey={APIKEY} // 您的 APIKEY
以上就是 HERE Isoline Routing 的介紹,我們已經介紹了 HERE Routing API 的三個主要功能:
再加上一個 快速建構地圖服務(六)- HERE Waypoints Sequence 路徑最佳排序 介紹過的 Waypoints Sequence 功能,就像是四大天王的組合,已經能夠回答幾乎所有空間關係的基本問題:
如果您是一個 Location Based Service (LBS / 適地性服務)的提供者,這四個主題絕對是您必須面對的難題,而 HERE Routing API 以及 Waypoints Sequence 就是協助您滿足客戶需求的最佳工具!
※ 想了解更多 Isoline Routing 的參數與使用方法,請到 HERE 開發者網站。
快速建構地圖服務(一) - 認識 HERE Studio / Data Hub
快速建構地圖服務(二) - 認識 HERE Data Hub CLI / API
快速建構地圖服務(三) - 使用 QGIS 玩轉 HERE Data Hub
快速建構地圖服務(四) - 當 Leaflet JS 遇見 Data Hub
快速建構地圖服務(五) - 整合 HERE 地點搜尋 API
快速建構地圖服務(六)- HERE Waypoints Sequence 路徑最佳排序
快速建構地圖服務(七)- 認識 HERE Routing API - 路徑規劃
快速建構地圖服務(八)- 認識 Matrix Routing
快速建構地圖服務(九)- Isoline Routing
快速建構地圖服務(十)- HERE Tour Planning 物流路徑預排與成本精算
快速建構地圖服務(十一)- HERE Route Matching GPS 軌跡分析
快速建構地圖服務(十二)- HERE Custom Locations 地圖資料倉儲與查詢
快速建構地圖服務(十三)- HERE Geofencing 地理圍籬
快速建構地圖服務(十四)- HERE Custom Routes 自建路網 + Vector Tile 向量圖磚 + Map Image API 靜態地圖
快速建構地圖服務(十五)- HERE Positioning 網路定位服務