赞
踩
1.首先在public文件夹下得index.html文件中的head里面通过src引入百度api文件
<script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&type=webgl&ak=您的密钥"></script>
<link href="https://mapopen.cdn.bcebos.com/github/BMapGLLib/DrawingManager/src/DrawingManager.min.css" rel="stylesheet">
<script type="text/javascript" src="https://mapopen.cdn.bcebos.com/github/BMapGLLib/DrawingManager/src/DrawingManager.min.js"></script>
<script type="text/javascript" src="https://mapopen.cdn.bcebos.com/github/BMapGLLib/DistanceTool/src/DistanceTool.min.js"></script>
2.在需要用到百度地图的页面准备一个container容器,用来初始化地图
<div class="container" id="container" ref="containers">
3.在js里面写入初始化代码函数,并在mounted函数中进行回调
methods:{
//初始化地图方法
createBDmap() {
var map = new BMapGL.Map("container", { enableMapClick: false }); // 创建Map实例,GL版命名空间为BMapGL(鼠标右键控制倾斜角度)
map.centerAndZoom(new BMapGL.Point(114.xxx, 34.xxx), 15); // 初始化地图,设置中心点坐标和地图级别
map.enableScrollWheelZoom(true); // 开启鼠标滚轮缩放
var zoomCtrl = new BMapGL.ZoomControl(); // 添加缩放控件
map.addControl(zoomCtrl);
this.map = map
},
}
mounted(){
//页面渲染时回调执行
this.createBDmap()
}
1.添加一个点
addMarker(data) { //date表示传进来的数据,包括坐标、图标、文字等信息
let _this = this
// this.addLabel(data)
data.markBaiduLocation = _this.filterPoint(data.markBaiduLocation) //自定义方法,对坐标进行过滤,弄成百度需要的格式。
var myIcon = new BMapGL.Icon(data.iconUrl, new BMapGL.Size(25, 25)); //定义点位图标的样式大小,url地址,如不设置自动使用默认百度点样式
var point = new BMapGL.Point(data.markBaiduLocation[0].markLongitude, data.markBaiduLocation[0].markLatitude);
var marker = new BMapGL.Marker(point, {
icon: myIcon
});
_this.map.addOverlay(marker); //添加点到地图上
_this.addLabel(data.markBaiduLocation[0], data.title) //添加点的文字标注
marker.addEventListener("click", function () { //为点添加点击事件的监听
//在这里写入点击后进行的操作
})
},
2.添加一条线
addLine(data) { //date表示传进来的数据,包括坐标、图标、文字等信息 let _this = this data.markBaiduLocation = _this.filterPoint(data.markBaiduLocation) //与上述一样,对其坐标点进行过滤操作。(原数据字符格式,转化后为数组格式) var lineArray = [] // 线的点的集合 data.markBaiduLocation.forEach(item => { lineArray.push(new BMapGL.Point(item.markLongitude, item.markLatitude)) }) var polyline = new BMapGL.Polyline(lineArray, { strokeColor: "blue", //线条颜色 strokeWeight: 6, //线条宽度 strokeOpacity: 0.5, //边框透明度 // strokeTexture: { // width/height 需要是2的n次方 // url: data.iconUrl, // width: 16, // height: 64 // }, }); _this.map.addOverlay(polyline) //将绘制好的折线添加到地图上 _this.addLabel(data.markBaiduLocation[1], data.title) //添加文字标注 polyline.addEventListener("click", function () {//为线添加点击事件的监听 //在这里写入点击后进行的操作 }) }
3.添加一个多边形
addGon(data) { let _this = this let array = [] //计算中心点方法需要的数组 data.markBaiduLocation = _this.filterPoint(data.markBaiduLocation) var lineArray = [] // 面的点的集合 data.markBaiduLocation.forEach(item => { lineArray.push(new BMapGL.Point(item.markLongitude, item.markLatitude)) }) data.markBaiduLocation.forEach((item) => { array.push([item.markLatitude, item.markLongitude]) }) let latArray = _this.mapGetCenter(array) //计算出中心点,用来将文字标注放置中心 var polygon = new BMapGL.Polygon(lineArray, { strokeColor: "blue", strokeWeight: 2, strokeOpacity: 0.3, // strokeTexture: { // width/height 需要是2的n次方 // url: data.iconUrl, // width: 16, // height: 64 // }, }); _this.map.addOverlay(polygon) //将绘制好的添加到地图上 _this.addLabel01(latArray, data.title) //添加文字标注 polygon.addEventListener("click", function () {//为线添加点击事件的监听 //在这里写入点击后进行的操作 }) },
4.添加文字标注
addLabel(data, title) { var _this = this let x = title.length * 10 / 2 + 5 //计算文字偏移量(这个可有可无,看具体情况,小小的美化罢了) var point = new BMapGL.Point(data.markLongitude, data.markLatitude); var content = title var label = new BMapGL.Label(content, { // 创建文本标注 position: point, // 设置标注的地理位置 offset: new BMapGL.Size(-x, 15) // 设置标注的偏移量 }) _this.map.addOverlay(label) //添加到地图上 label.setStyle({ // 设置label的样式 color: '#000', fontSize: '14px', fontWeight: '600', border: '0' }) },
1.创建绘制工具
draw(e) { //传入绘制类型,eg:marker,polyline,polygon var _this = this //设置绘制工具样式 var styleOptions = { strokeColor: '#5E87DB', // 边线颜色 fillColor: '#5E87DB', // 填充颜色。当参数为空时,圆形没有填充颜色 strokeWeight: 2, // 边线宽度,以像素为单位 strokeOpacity: 1, // 边线透明度,取值范围0-1 fillOpacity: 0.2 // 填充透明度,取值范围0-1 }; var labelOptions = { borderRadius: '2px', background: '#FFFBCC', border: '1px solid #E1E1E1', color: '#703A04', fontSize: '12px', letterSpacing: '0', padding: '5px' }; // 实例化鼠标绘制工具 _this.drawingManager = new BMapGLLib.DrawingManager(_this.map, { // isOpen: true, // 是否开启绘制模式 enableCalculate: false, // 绘制是否进行测距测面 enableSorption: true, // 是否开启边界吸附功能 sorptiondistance: 20, // 边界吸附距离 circleOptions: styleOptions, // 圆的样式 polylineOptions: styleOptions, // 线的样式 polygonOptions: styleOptions, // 多边形的样式 rectangleOptions: styleOptions, // 矩形的样式 labelOptions: labelOptions, // label样式 }); switch (e) { case 'marker': { _this.drawingType = BMAP_DRAWING_MARKER; break; } case 'polyline': { _this.drawingType = BMAP_DRAWING_POLYLINE; break; } case 'polygon': { _this.drawingType = BMAP_DRAWING_POLYGON; break; } } // 进行绘制 if (_this.drawingManager._isOpen && _this.drawingManager.getDrawingMode() === drawingType) { _this.drawingManager.close(); } else { _this.drawingManager.setDrawingMode(_this.drawingType); _this.drawingManager.open(); } },
2.监听绘制事件
// 监听绘制完成事件
_this.drawingManager.addEventListener('overlaycomplete', function (e) {
_this.drawingManager.close() // 成功后关闭绘制工具
let type = e.drawingMode
if (e.drawingMode === 'marker') {
//写入操作
} else if (e.drawingMode === 'polyline') {
//写入操作
} else if (e.drawingMode === 'polygon') {
//写入操作
}
}
以上内容就是在vue中添加点线面的所有方法,以及手动绘制的一些操作,如果还有疑惑的小伙伴,请移步至百度地图api中进行查看
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。