vue结合百度地图api实现地址检索、路线规划等功能
vue+百度地圖api
- 引入百度地圖api
- 獲取用戶當前位置
- 地址檢索(定位)
- 路線規劃
- 修改路線規劃中的圖標圖案
- 修改提示框等樣式
引入百度地圖api
在百度地圖開發平臺申請到自己的開發密匙
找到項目的根目錄index.html位置:
在項目的根目錄下的index.html文件中添加如下代碼:
創建一個div用于地圖展示
<template><div><div id="allmap" class="allmap"></div></div> </template>初始化創建地圖
mounted() {//初始化// 創建Map實例this.map = new BMap.Map("allmap");// 初始化地圖,設置中心點坐標和地圖級別this.map.centerAndZoom("成都", this.mapZoom);// 設置地圖顯示的城市 此項是必須設置的this.map.setCurrentCity("成都");// 啟用滾輪放大縮小,默認禁用this.map.enableScrollWheelZoom(true);// 啟用地圖慣性拖拽,默認禁用this.map.enableContinuousZoom(true);// 啟用地圖拖拽,默認啟用this.map.enableDragging(true);const cityControl = new BMap.CityListControl({/* 控件的停靠位置(可選,默認左上角)BMAP_ANCHOR_TOP_RIGHT 右上角BMAP_ANCHOR_BOTTOM_LEFT 左下角BMAP_ANCHOR_BOTTOM_RIGHT 右下角*/anchor: BMAP_ANCHOR_TOP_LEFT,// 控件基于停靠位置的偏移量(可選)offset: new BMap.Size(10, 5),});// 將控件添加到地圖上this.map.addControl(cityControl);},獲取用戶當前位置
Geolocation ( ) 構造函數,用于返回用戶當前的位置,會首先調用瀏覽器自帶的定位接口,如果失敗或不支持則調用高精IP定位(需要開通權限,否則調用普通定位)接口,如果用戶拒絕授權定位,則無法返回任何定位結果。
具體詳細信息可參考百度地圖JavaScript API v3.0類參考文檔1
例:
地址檢索(定位)
LocalSearch(location: Map | Point | String, opts: LocalSearchOptions)用于位置檢索、周邊檢索和范圍檢索。 創建一個搜索類實例,其中location表示檢索區域,其類型可為地圖實例、坐標點或城市名稱的字符串。當參數為地圖實例時,檢索位置由當前地圖中心點確定,且搜索結果的標注將自動加載到地圖上。
具體詳細信息可參考百度地圖JavaScript API v3.0類參考文檔1
例:
添加一個用于輸入地址信息的輸入框:
在methods中添加如下方法:
AddressSearch() {const _this = this// 創建Map實例this.map = new BMap.Map('map')// 初始化地圖,設置中心點坐標和地圖級別this.map.centerAndZoom(new BMap.Point(104.072242, 30.663711), this.mapZoom)// 設置地圖顯示的城市 此項是必須設置的this.map.setCurrentCity('成都')//建立一個自動完成的對象//Autocomplete是結果提示、自動完成類。var Aco = new BMap.Autocomplete({// 輸入框的idinput: "city",location: this.map,})Aco.addEventListener("onhighlight", function (e) {//鼠標放在下拉列表上的事件})Aco.addEventListener("onconfirm", function (e) {//鼠標點擊下拉列表后的事件var _value = e.item.value;// 拼裝的地址信息var myValue =_value.province +_value.city +_value.district +_value.street +_value.business;_this.setPlace(myValue);}) } setPlace(value) {const _this = this;//this.map.clearOverlays(); //清除地圖上所有覆蓋物// 創建一個檢索對象var local = new BMap.LocalSearch(_this.map, {//智能搜索onSearchComplete: function () {var getpo = local.getResults().getPoi(0).point; //獲取第一個智能搜索的結果_this.map.centerAndZoom(getpo, 18);_this.map.addOverlay(new BMap.Marker(getpo)); //添加標注},});local.search(e); },效果圖:
路線規劃
TransitRoute(location: Map | Point | String, opts: TransitRouteOptions) 創建一個公交導航實例。location表示檢索區域,類型可為地圖實例、坐標點或城市名稱的字符串。當參數為地圖實例時,檢索位置由當前地圖中心點確定;當參數為坐標時,檢索位置由該點所在位置確定;當參數為城市名稱時,檢索會優先在該城市內進行
具體詳細信息可參考百度地圖JavaScript API v3.0類參考文檔1
例:
添加用于輸入起點與終點信息的輸入框,以及進行規劃功能的按鈕
初始化兩個數據,用于儲存起點與終點的經緯度
data(){return {from: null,to: null,} }在methods中添加如下方法:
通過地址檢索的方式設立標注點,同時獲取到起點和終點的經緯度坐標
地址檢索:
效果圖:
修改路線規劃中的圖標圖案
方法如下:
//坐標圖案var startIcon = new BMap.Icon(require('../../../assets/images/坐標.png'),new BMap.Size(30, 120),{ anchor: new BMap.Size(10, 25) })var endIcon = new BMap.Icon(require('../../../assets/images/坐標.png'),new BMap.Size(30, 120),{ anchor: new BMap.Size(10, 25) })//起點終點圖案重新設置airplaneing.setMarkersSetCallback(function (result) {result[0].marker.setOffset(new BMap.Size(0, 40))result[0].marker.setIcon(startIcon)result[1].marker.setOffset(new BMap.Size(12, 45))result[1].marker.setIcon(endIcon)})//初始化地圖this.map.centerAndZoom('北京', 14)airplaneing.search(point1, point2)修改提示框等樣式
若發現結果提示框等信息的樣式出錯或消失,需要修改其樣式,可以通過按F12進行開發人員調試,在元素列表中找到我們要的元素,然后獲取其類名,對類名的進行css屬性的修改即可
需要注意的是,若style中有格式要求,如下圖所示
<style lang="less" scoped>則可能修改類名屬性操作無法正常實現效果
百度地圖JavaScript API v3.0類參考 ?? ?? ??
總結
以上是生活随笔為你收集整理的vue结合百度地图api实现地址检索、路线规划等功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 进程带宽限制,如何限制网络带
- 下一篇: mysql执行计划explain介绍_M