高德地圖的Web應(yīng)用

目前功能日漸豐富的web應(yīng)用或APP都需要使用到地圖定位茎匠、導(dǎo)航等功能褂傀,但是局限于自身的開發(fā)能力以及資源的限制柒室,往往需要借助其他地圖供應(yīng)商的數(shù)據(jù)或服務(wù)來滿足自己的需求履磨。因此許多在線地圖服務(wù)商在滿足自身需求的前提下蛉抓,作為第三方開放平臺(tái),為應(yīng)用程序開發(fā)者提供了諸多地圖服務(wù)的功能接口剃诅。
高德地圖是阿里巴巴旗下的地理位置服務(wù)平臺(tái)巷送,提供了豐富的地圖產(chǎn)品與服務(wù)。為各行各業(yè)制定了多種解決方案矛辕,尤其是貨運(yùn)和電商行業(yè)笑跛。目前我們系統(tǒng)用到的服務(wù)有地圖定位、地圖導(dǎo)航聊品、路線規(guī)劃飞蹂、POI搜索、地圖選點(diǎn)和物流軌跡等翻屈。

高德地圖的使用

地圖的引入和初始化以及一些基本圖層和事件在官方文檔都有陈哑,這里就不在描述了,接下來重點(diǎn)介紹我們項(xiàng)目中用的地圖的重點(diǎn)業(yè)務(wù)場(chǎng)景伸眶。附帶文檔地址:https://lbs.amap.com/

地圖拖拽選址

拖拽地圖需要實(shí)時(shí)獲取到標(biāo)記點(diǎn)所在的詳細(xì)地理位置惊窖,如下圖所示:


這里用到了高德地圖的 組件PositionPicker,用于在地圖上選取位置厘贼,并獲取所選位置的地址信息界酒,以及周邊POI、周邊道路涂臣、周邊路口等信息

    const positionPicker = new PositionPicker({
      mode: 'dragMap',
      map: mapObj//地圖初始化后的地圖對(duì)象
    });
    positionPicker.on('success', function (positionResult) {
      console.log(positionResult)
    });
    positionPicker.start();

拖拽成功后返回值positionResult包含的數(shù)據(jù)格式如下


圖中我們可以看到盾计,返回的信息包括的省市區(qū)的名稱和詳細(xì)地址变勇,最關(guān)鍵的還有縣區(qū)的行政編碼摘悴,通過此編碼可以推出市級(jí)和省級(jí)編碼悟狱。這樣通過地圖選址后的地址就可以轉(zhuǎn)換成三級(jí)省市區(qū)聯(lián)動(dòng)的下拉框數(shù)據(jù)岸浑。

地圖模糊搜索

在拖拽選址基礎(chǔ)上我們還需要能夠進(jìn)行模糊搜索直接定位到目標(biāo)地點(diǎn)附近呼猪。搜索需要用到高德地圖組件PoiPicker阱飘,在給定的輸入框上集成輸入提示和關(guān)鍵字搜索功能驹吮,方便用戶選取特定地點(diǎn)(即POI)依疼。

    const poiPicker = new PoiPicker({
      input: searchInputRef,// 搜索需要的輸入框DOM
      placeSearchOptions: {
        map: mapObj,// 初始化后的地圖對(duì)象
        pageSize: 10
      },
      searchResultsContainer: searchResultsRef,// 呈現(xiàn)搜索結(jié)果的DOM
      city: '西安',// 搜索的城市范圍
    });

初始化PoiPicker之前需要提前在地圖DOM對(duì)象處增加搜索輸入框和呈現(xiàn)搜索結(jié)果的容器剖煌,位置和樣式需要自己提前處理好材鹦。初始化完后輸入框輸入關(guān)鍵字,容器中則會(huì)呈現(xiàn)對(duì)應(yīng)的搜索結(jié)果耕姊。

搜索大明宮

監(jiān)聽搜索結(jié)果的選擇事件:

//監(jiān)聽poi選中信息
  poiPicker.on('poiPicked', function(poiResult) {
    //用戶選中的poi點(diǎn)信息
    const { source, item} = poiResult;
    if (source === 'suggest') {
        poiPicker.searchByKeyword(item.name);
    } else { console.log(item) }
  });

poiResult數(shù)據(jù)格式如下

{
    source: 'search',       //信息來源桶唐,search代表搜索服務(wù),suggest代表輸入提示,如果是輸入提示則需要再次進(jìn)行關(guān)鍵詞搜索
    item: {
        "id": "B000A8WXY0", //poi點(diǎn)的id
        "name": "***",      //名稱
        "location": lnglat, //經(jīng)緯度茉兰,AMap.LngLat實(shí)例,
        "address": "***",    //地址信息
        "adcode":""尤泽,//區(qū)縣編碼
        "adname":"",//區(qū)縣名稱
        "cityname":"",//市級(jí)名稱
        "pname":""坯约,//省名稱
    }
}

至此熊咽,我們可以看到最終獲取到的數(shù)據(jù)與上述拖拽選址得到的結(jié)果一致,滿足業(yè)務(wù)需求闹丐。
溫馨提示:一些直轄市或者省轄縣可能會(huì)出現(xiàn)行政編碼不滿足省市區(qū)3級(jí)聯(lián)動(dòng)下拉框横殴,需要進(jìn)行特殊處理,這里不在贅述卿拴。

地理編碼服務(wù)

有時(shí)候可能會(huì)做一些老數(shù)據(jù)的兼容處理衫仑,在我們系統(tǒng)中一些地址信息老數(shù)據(jù)只省市區(qū)和詳細(xì)地址兩個(gè)字符串,沒有省市區(qū)的行政編碼巍棱,這種在后續(xù)業(yè)務(wù)處理上會(huì)非常困難惑畴,所以我們要盡可能的將這些老數(shù)據(jù)解析為帶行政編碼的數(shù)據(jù)蛋欣,這個(gè)時(shí)候就需要地圖的地理編碼服務(wù)航徙。

AMap.plugin('AMap.Geocoder', function() {
  var geocoder = new AMap.Geocoder()

  geocoder.getLocation('北京市海淀區(qū)蘇州街', function(status, result) {
    if (status === 'complete' && result.info === 'OK') {
      // result中對(duì)應(yīng)詳細(xì)地理坐標(biāo)信息
    }
  })
})

其中 result信息如表格所示

屬性 類型 說明
info String 成功狀態(tài)說明
geocodes Array.<Geocode> 地理編碼結(jié)果,僅地理編碼返回
resultNum Number 地理編碼結(jié)果數(shù)目陷虎,僅地理編碼返回
regeocode ReGeocode 逆地理編碼結(jié)果到踏,僅逆地理編碼返回

geocodes中包含的信息就是每一個(gè)地理坐標(biāo)對(duì)象

屬性 類型 說明
addressComponent AddressComponent 地址組成元素
formattedAddress String 格式化地址規(guī)則:地址信息=基本行政區(qū)信息+具體信息;基本行政信息=省+市+區(qū)+鄉(xiāng)鎮(zhèn)
location LngLat 坐標(biāo)
adcode String 區(qū)域編碼
level String 給定地址匹配級(jí)別尚猿,返回匹配最詳細(xì)級(jí)別窝稿,如:“北京市海淀區(qū)蘇州街”匹配級(jí)別為“道路”詳見匹配級(jí)別列表

addressComponent則包含了上述拖拽選址和模糊搜索的地理位置字段,有province凿掂、city伴榔、citycodedistrict庄萎、adcode等踪少,根據(jù)這些字段,可以精確的獲取到省市區(qū)名稱和編碼糠涛,這樣新的地理數(shù)據(jù)就轉(zhuǎn)換好了援奢。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市忍捡,隨后出現(xiàn)的幾起案子集漾,更是在濱河造成了極大的恐慌,老刑警劉巖砸脊,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件具篇,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡凌埂,警方通過查閱死者的電腦和手機(jī)驱显,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人秒紧,你說我怎么就攤上這事绢陌。” “怎么了熔恢?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵脐湾,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我叙淌,道長(zhǎng)秤掌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任鹰霍,我火速辦了婚禮闻鉴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘茂洒。我一直安慰自己孟岛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布督勺。 她就那樣靜靜地躺著渠羞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪智哀。 梳的紋絲不亂的頭發(fā)上次询,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音瓷叫,去河邊找鬼屯吊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛摹菠,可吹牛的內(nèi)容都是我干的盒卸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辨嗽,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼世落!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起糟需,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤屉佳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后洲押,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體武花,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年杈帐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了体箕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片专钉。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖累铅,靈堂內(nèi)的尸體忽然破棺而出跃须,到底是詐尸還是另有隱情,我是刑警寧澤娃兽,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布菇民,位于F島的核電站,受9級(jí)特大地震影響投储,放射性物質(zhì)發(fā)生泄漏第练。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一玛荞、第九天 我趴在偏房一處隱蔽的房頂上張望娇掏。 院中可真熱鬧,春花似錦勋眯、人聲如沸婴梧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽志秃。三九已至,卻和暖如春嚼酝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背竟坛。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國打工闽巩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人担汤。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓涎跨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親崭歧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子隅很,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容