轉自:https://www.cnblogs.com/Marco-hui/p/12155995.html
1、前期准備
在正式開發之前,我們先做好以下准備:
- 在你的vue項目中引入element-ui (引入方法 戳這)
說明:本案例是結合element-ui進行開發,主要是為方便實現上面第8點功能,大家若是引入其他UI框架也可以,功能實現方法參照本案例自行修改即可。 - 申請百度地圖AK
前往 百度地圖開放平台控制台 ,登錄百度賬號,創建應用即得。
2、引入百度地圖
下面介紹如何在vue項目中引入百度地圖
方法一
第1步:在 index.html 中引入下面代碼,注意將你的AK代入
第2步:在 webpack.base.conf.js 添加externals.BMap配置,與entry平級,內容如下,
第3步:在組件中引入BMap
方法二
我們知道,vue-cli 3.0+ 的版本已經取消了webpack.conf這些文件了,所以上面的方法就不適用了。而且,方法一在index.html中全局引入百度api,有點耗性能。更多時候我們只希望在單個組件里按需引入即可,所以下面介紹的是以封裝的方法引入。
第1步:在你的項目js資源文件夾下新建loadBMap.js文件,內容如下:
第2步:在組件中引入loadBMap函數
第3步:在mounted中調用 loadBMap()
這樣就在當前組件中引入百度地圖 BMap 了,可以開始開發了。
四、功能解析
下面開始對上述所列 8 點功能進行詳細的代碼解析。
說明:本文用的是方法一引入百度地圖,源碼 用的是方法二
1、掛載百度地圖
首先需要給地圖分配一個容器,並設置寬高
根據需求,定義data參數
初始化地圖
到此,就可以在你的頁面上看到地圖啦!
2、封裝逆地址解析函數
參考百度地圖 逆地址解析 示例demo,封裝一個逆地址解析函數,供下面的功能調用。
3、設置圖像標注並綁定拖拽標注結束后事件
圖像標注Marker是百度地圖覆蓋物類中的其中一種,它用來標識當前坐標點的位置,也就是我們在地圖上所看到的小紅點(當然這個點也可以自定義圖標樣式,這里我們不說,有興趣的可以參考百度地圖覆蓋物示例 - 設置點的新圖標)。
設置圖像標注很簡單,只需要下面兩行代碼
這樣你就可以在地圖上看到小紅點啦,接下來我們給這個點綁定拖拽事件。
拖拽事件有三類,dragstart(開始拖拽時觸發)、dragging(拖拽過程中觸發)和dragend(拖拽結束時觸發),實際項目中我們更注重的是拖拽標注結束后的位置信息,因此我們在這給標注綁定拖拽結束后事件:
注意:這里我們將代碼寫在上面定義的 initMap 函數中,地圖初始化時一同執行即可
4、添加(右上角)平移縮放控件
百度地圖提供了很多的 控件類,方便我們查看和操作地圖。本案例只解析平移縮放控件NavigationControl 和 地圖定位控件GeolocationControl,其他控件可 參考示例 自行學習。
下面我們先引入平移縮放控件並將其位置置於右上角:
附:
anchor參數解析
BMAP_ANCHOR_TOP_LEFT | 控件將定位到地圖的左上角
BMAP_ANCHOR_TOP_RIGHT | 控件將定位到地圖的右上角
BMAP_ANCHOR_BOTTOM_LEFT | 控件將定位到地圖的左下角
BMAP_ANCHOR_BOTTOM_RIGHT | 控件將定位到地圖的右下角
type參數解析
BMAP_NAVIGATION_CONTROL_LARGE | 標准的平移縮放控件(包括平移、縮放按鈕和滑塊)
BMAP_NAVIGATION_CONTROL_SMALL | 僅包含平移和縮放按鈕
BMAP_NAVIGATION_CONTROL_PAN | 僅包含平移按鈕
BMAP_NAVIGATION_CONTROL_ZOOM | 僅包含縮放按鈕
5、添加(左下角)定位控件
下面我們引入地圖定位控件並將其位置置於左下角:
6、瀏覽器定位
參考百度地圖 瀏覽器定位 示例demo,進入頁面,我們將坐標定位到當前所在地坐標。
同樣在initMap中調用即可
7、綁定點擊地圖任意點事件
在地圖上選取地址。點擊地圖上任意點,都將獲取該點的地址信息。
8、結合element-ui實現輸入提示選取地址並定位功能
最后是本案例的主要功能,輸入框輸入關鍵字搜索地址,調用百度地圖LocalSearch服務進行檢索。
首先,我們需要寫入一個輸入框。這里利用的是element-ui的 <el-autocomplete>組件,該組件提供了fetch-suggestions屬性和select事件【參考文檔】,方便我們把檢索結果遍歷顯示出來並進行選擇操作。
接下來需提供兩個方法:
- querySearchAsync:搜索建議方法(參考百度地圖檢索示例 - 本地檢索的數據接口)
- handleSelect:點擊選中建議項時觸發的方法
最后再稍微處理一下autocomplete組件的下拉款樣式
至此,我們就完成了上面所有的功能點。
附:
項目源碼git地址:vue-admin-web
項目線上地址:vue-admin-web/BMap