npm i vue-baidu-map --save
会遇到跨域的问题就需要引入jsonp来解决(只能解决get请求,刚好这里的请求都是get请求)
npm i vue-jsonp -S
//main.js import BaiduMap from "vue-baidu-map"; import { VueJsonp } from "vue-jsonp"; Vue.use(VueJsonp); Vue.use(BaiduMap, { ak: "你在百度开发者文档中申请的key" });
ps:我这里申请的是服务端的key
//xxxx.vue <template> <baidu-map class="map" :center="this.frameCenter" :zoom="this.zoom"> <baidu-map class="map" :center="this.frameCenter" :zoom="this.zoom"> <!-- 放大缩小 --> <bm-navigation type="BMAP_NAVIGATION_CONTROL_SMALL" anchor="BMAP_ANCHOR_TOP_RIGHT"></bm-navigation> <!-- 标记点 --> <bm-marker :position="{ lng: markers.lng, lat: markers.lat }" :dragging="true" @dragend="getMapCenter"> </bm-marker> </baidu-map> </baidu-map> </template>
zoom设置的事比例尺大小。center是地图显示位子的中心,center的值可以是经纬度,也可以是详细的地址
我的需求是要根据省市区地图自动跳转,然后最后拖拽标记点获取该地点的经纬度
百度地图的行政区划查询服务功能是在2021年3月3号才出来的,好像存在跨域问题(试过好几次都这样,也可能是太菜了)
这里我就想了一个骚操作调用的是高德地图的数据,emmmmm~~反正数据源的问题解决了
//xxx.vue this.$jsonp("http://api.map.baidu.com/geocoding/v3/", { address: '湖北省武汉市xxxx', output: "json", ak: "你在百度开发者文档中申请的key" }) .then(res => { console.log(res) }) .catch(err => { console.log(err); });
可能会出现的问题就是有写地址名字差不太多就会导致,标记点不在画框内,将上面的逆地址解析简单的封装一下,然后用获得的经纬度去做定位要更加准确一些。