尝鲜云端地图服务 Azure Location Based Service Preview
? ? 就在不久之前,Azure發(fā)布了基于位置的服務(wù)(LBS, Location Based Service)。這個(gè)服務(wù)歸屬在Azure IoT服務(wù)類別下,猜測目的是便于提供有定位、導(dǎo)航和路徑規(guī)劃的IoT解決方案。LBS這個(gè)詞你肯定不會陌生,因?yàn)槟阌玫暮芏鄳?yīng)用都是用了LBS的服務(wù),從餓了么到陌陌,從小黃車到支付寶紅包…
??? 在Azure里啟用LBS服務(wù)很簡單,開啟之后除了提供訂閱的Key,幾乎也沒什么配置的地方。微軟給這個(gè)服務(wù)提供了開發(fā)使用文檔:https://docs.microsoft.com/zh-cn/azure/location-based-services/
??? 可是我更建議結(jié)合github上的示例代碼來研究這個(gè)服務(wù)是如何使用的。說明加上代碼加上相關(guān)的插件說明和Azure REST API,幾小時(shí)之內(nèi)你就能寫出自己的調(diào)用地圖的應(yīng)用。從邏輯原理上說,微軟提供了一套javascript/css 插件接口,以及一個(gè)支持地圖服務(wù)的網(wǎng)站。接下來我們就開始做第一件事。
???? ×××……是的,js和css所在的網(wǎng)站https://atlas.microsoft.com?我這里反正是不能訪問,×××之后才看到地圖…其實(shí)這也不是啥大問題,畢竟測試全球版Azure的你肯定有×××的辦法……
??? github上的示例有四個(gè),交互式搜索、靜態(tài)搜索、路徑和跟蹤路徑。交互式搜索能夠很快讓你知道這個(gè)服務(wù)的大概樣子;然后通過靜態(tài)搜索,能夠了解到地圖的各種對象例如map、popup、point等等;路徑能夠了解如何調(diào)用這個(gè)服務(wù)來計(jì)算從起點(diǎn)到終點(diǎn)的路由;而跟蹤路徑可以看到增加道路限制之后不同的路徑計(jì)算結(jié)果。
先看InteractiveSearch,把github上的代碼復(fù)制下來之后,將<insert-key>替換成在Azure里面添加LBS服務(wù)設(shè)置里顯示的兩個(gè)Key的任何一個(gè),保存為HTML文件,瀏覽器打開就能看到如下界面。代碼里hard conding了中心位置,默認(rèn)是在洛杉磯,順著10號公路一路開,就到了Santa Monica海灘,滿滿的回憶啊~在搜索框里可以進(jìn)行搜索。
???? 你會發(fā)現(xiàn)有很多的限制,后面我們再說原因。接下來,開始我們的學(xué)習(xí)之旅。看看第一個(gè)示例 Search。當(dāng)然先把<insert-key>給換了,后面就不重復(fù)了。打開代碼學(xué)習(xí)一下它是怎么工作的。其實(shí)流程基本就是構(gòu)造一個(gè)URL請求字串,然后把返回的數(shù)據(jù)進(jìn)行處理。默認(rèn)搜索的是加油站,我把它換成了hotel,提交給LBS的服務(wù)網(wǎng)站之后,按照提交的query進(jìn)行查詢,然后把返回的結(jié)果處理后顯示在網(wǎng)頁上。
??? 顯示過程使用了Popup方法,也就是代碼里的atlas.Popup(),可以在站點(diǎn)查詢所有LBS服務(wù)使用的方法:https://docs.microsoft.com/zh-cn/javascript/api/location-based-services-javascript/popup?view=azure-iot-typescript-latest
??? 定義的彈出顯示,除了名字“The Westin Bellevue”和地址,還顯示了經(jīng)緯度。這個(gè)酒店是前年參加MVP全球峰會我住的地方,滿滿的回憶+1。我們把經(jīng)緯度復(fù)制備用。
??? 接下來的Route路徑規(guī)劃示例,會顯示如何查詢從起點(diǎn)到終點(diǎn)的路徑查詢,并在地圖中顯示出來。一樣,我把默認(rèn)的加油站的經(jīng)緯度,改成了我們剛才查詢到的酒店的經(jīng)緯度。這里會看到,使用了atlas.data的Point函數(shù),這個(gè)函數(shù)對應(yīng)了Position,文檔顯示這是一個(gè)三維坐標(biāo),經(jīng)緯度是必須的,高度是可選的。可參考:
https://docs.microsoft.com/zh-cn/javascript/api/location-based-services-javascript/point?view=azure-iot-typescript-latest
https://docs.microsoft.com/zh-cn/javascript/api/location-based-services-javascript/position?view=azure-iot-typescript-latest
??? 這也就是說,IoT應(yīng)用可以直接把GPS讀取的位置信息處理后,傳遞給LBS服務(wù)進(jìn)行地圖展現(xiàn)。
??? 對于返回的數(shù)據(jù)繪制,使用了atlas.data的Feature,不過沒看到詳細(xì)的說明,我試探著把icon的描述從pin-round-blue改成了pin-round-red,于是地圖中起點(diǎn)Microsoft就從藍(lán)色變成了紅色。
??? 更復(fù)雜一點(diǎn)的例子,就是針對路徑查詢設(shè)置一些限制,使得路徑能夠規(guī)避一些不能/不適合通行的道路。這個(gè)例子是traceRoute。如代碼中高亮部分,對通行條件做了針對卡車的限制,因此查詢的兩條線路會導(dǎo)致不同的線路結(jié)果。
??? 找了一下,查詢限制說明可以參考:https://docs.microsoft.com/zh-cn/rest/api/location-based-services/route/getroutedirections?但我沒有發(fā)現(xiàn)示例代碼使用的參數(shù)。倒是說明站點(diǎn)有顯示:https://docs.microsoft.com/en-us/azure/location-based-services/tutorial-prioritized-routes,最終我在這里找到了說明:https://developer.tomtom.com/online-routing/online-routing-documentation-routing/common-routing-parameters
??? 別忘了,地圖的右下角寫著小小的TomTom~
??? 按照文檔說明,這個(gè)示例應(yīng)該顯示卡車走Evergreen Point Bridge,而汽車走90號公路。可是我運(yùn)行后是這樣的……
??? 我猜現(xiàn)在西雅圖是半夜,沒啥車,所以卡車汽車都走上面了。那怎么體現(xiàn)按照不同條件限制選擇不同線路呢?有辦法。
truckRouteUrl += “&routeType=shortest”
??? 我讓卡車去掉限制,走最短線路~這下效果出來了~
??????? 目前Azure LBS有挺多的限制,例如,中國的地圖暫時(shí)不可用~
那么哪些地方的地圖可以查詢到什么程度呢?可以參考:
????地圖編碼覆蓋區(qū)域,能夠查詢城鎮(zhèn),道路,門牌等
????交通覆蓋區(qū)域,能夠查詢路況信息,有事故標(biāo)注、流量情況。
??? 即使是美國的地圖,Azure LBS的和Bing的,也有差異。
??? Bing的地圖顯示建筑信息更全一點(diǎn),美國的地圖提供者是HERE,也就是最早的Nokia?
??? 如果你下載過Windows 10里的地圖,你就知道至少日本、朝鮮韓國的地圖是沒有的,而在Bing地圖中,日本的地圖供應(yīng)商是Zenrin。
??? 而國內(nèi)的地圖供應(yīng)商是Navinfo。
??? 有關(guān)地圖供應(yīng)商說明可參考:https://support.microsoft.com/zh-cn/help/17831/about-bing-data-suppliers
轉(zhuǎn)載于:https://blog.51cto.com/haohu/2068852
總結(jié)
以上是生活随笔為你收集整理的尝鲜云端地图服务 Azure Location Based Service Preview的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: box-shadow页面立体效果
- 下一篇: FPGA基础设计(10)Verilog行