赞
踩
百度地图又称LBS:LocationBussinessServer,是基于定义位置的商业服务,现在常用的地图有百度地图和高德地图居多
https://lbsyun.baidu.com/apiconsole/center#/home
第一步:登陆注册,获取密钥AK(需要自行注册百度地图,实名认证后创建获得)
第二步:引入百度地图js
<script src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak='自己的密钥'"></script>
第三步:创建地图的容器
<div id="container"></div>
第四步:初始化地图
var map = new BMapGL.Map("container");
第五步:创建一个地图中心点
var point = new BMapGL.Point(116.404, 39.915);
第六步:设置中心点和滚轮缩放
map.centerAndZoom(point, 15);
map.enableScrollWheelZoom(true);
全部代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> #container { width: 800px; height: 600px; } </style> </head> <body> <div id="container"></div> </body> <!-- 导入js --> <script src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=aEGXvr6KLo5v40cLlaCrPvZ0AKEOd18O"></script> <script> //初始化地图 var map = new BMapGL.Map("container"); //准备一个中心点(经纬度) var point = new BMapGL.Point(116.404, 39.915); //设置中心点和缩放级别 map.centerAndZoom(point, 15); //鼠标滚轮缩放 map.enableScrollWheelZoom(true); </script> </html>
运行效果图:
var scaleCtrl = new BMapGL.ScaleControl(); // 添加比例尺控件
map.addControl(scaleCtrl);
var zoomCtrl = new BMapGL.ZoomControl(); // 添加缩放控件
map.addControl(zoomCtrl);
var cityCtrl = new BMapGL.CityListControl(); // 添加城市列表控件
map.addControl(cityCtrl);
<!DOCTYPE html> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Baidu Map </title> <style type="text/css"> html { height: 100% } body { height: 100%; margin: 0px; padding: 0px } #container { height: 100% } </style> </head> <body> <div id="container"> </div> </body> <script src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=aEGXvr6KLo5v40cLlaCrPvZ0AKEOd18O"></script> <script> // var point = new BMap.Point(113.665,34.784); var map = new BMapGL.Map("container"); // 创建地图实例 var point = new BMapGL.Point(113.665, 34.784); // 创建点坐标 map.centerAndZoom(point, 15); var scaleCtrl = new BMapGL.ScaleControl(); // 添加比例尺控件 map.addControl(scaleCtrl); var zoomCtrl = new BMapGL.ZoomControl(); // 添加缩放控件 map.addControl(zoomCtrl); var cityCtrl = new BMapGL.CityListControl(); // 添加城市列表控件 map.addControl(cityCtrl); //添加一个点 var marker = new BMapGL.Marker(point); map.addOverlay(marker); map.addEventListener("click", e => { var p = new BMapGL.Point(e.latlng.lng, e.latlng.lat); var m = new BMapGL.Marker(p); map.addOverlay(m); console.log(e); }) </script> </html>
效果截图:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> html { height: 100% } body { height: 100%; margin: 0px; padding: 0px } #container { height: 100% } </style> </head> <body> <div id="container"></div> </body> <!-- 导入js --> <script src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=aEGXvr6KLo5v40cLlaCrPvZ0AKEOd18O"></script> <script> //初始化地图 var map = new BMapGL.Map("container"); //准备一个中心点(经纬度) var point = new BMapGL.Point(113.665, 34.784); //设置中心点和缩放级别 map.centerAndZoom(point, 15); //鼠标滚轮缩放 map.enableScrollWheelZoom(true); //添加一个点 var marker = new BMapGL.Marker(point); // 创建标注 //添加覆盖物 map.addOverlay(marker); // 将标注添加到地图中 //存储多个点 var line = []; var markers = []; //监听事件 map.addEventListener("click", e => { //创建点 var p = new BMapGL.Point(e.latlng.lng, e.latlng.lat); //创建标记 var m = new BMapGL.Marker(p); markers.push(m); //添加标记 map.addOverlay(m); //存储点 line.push(p) console.log(e); }); map.addEventListener("dblclick", e => { //把第0个点放到最后边 line.push(line[0]); //创建多边形 var polyline = new BMapGL.Polyline(line, { strokeStyle: "dashed", strokeColor: "blue", strokeWeight: 2, strokeOpacity: 0.5 }); //添加线 map.addOverlay(polyline); //清空点的列表 line = []; //清空点 markers.forEach(item => map.removeOverlay(item)); markers = []; }) </script> </html>
运行截图:(线的类型和颜色可以自己控制)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> html { height: 100% } body { height: 100%; margin: 0px; padding: 0px } #container { height: 100% } </style> </head> <body> <div id="container"></div> </body> <!-- 导入js --> <script src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=aEGXvr6KLo5v40cLlaCrPvZ0AKEOd18O"></script> <script> //初始化地图 var map = new BMapGL.Map("container"); //准备一个中心点(经纬度) var point = new BMapGL.Point(113.665, 34.784); //设置中心点和缩放级别 map.centerAndZoom(point, 15); //鼠标滚轮缩放 map.enableScrollWheelZoom(true); //添加一个点 var marker = new BMapGL.Marker(point); // 创建标注 //添加覆盖物 map.addOverlay(marker); // 将标注添加到地图中 //存储多个点 var line = []; var markers = []; //监听事件 map.addEventListener("click", e => { //创建点 var p = new BMapGL.Point(e.latlng.lng, e.latlng.lat); //创建标记 var m = new BMapGL.Marker(p); markers.push(m); //添加标记 map.addOverlay(m); //存储点 line.push(p) console.log(e); }); map.addEventListener("dblclick", e => { //把第0个点放到最后边 line.push(line[0]); //创建多边形 var polygone = new BMapGL.Polygon(line, { fillColor: "blue", strokeStyle: "dashed", strokeColor: "blue", strokeWeight: 2, strokeOpacity: 0.5 }); //添加线 map.addOverlay(polygone); //清空点的列表 line = []; //清空点 markers.forEach(item => map.removeOverlay(item)); markers = []; }) </script> </html>
运行截图:(面的颜色可以自己控制)
//绘制圆圈
var circle = new BMapGL.Circle(point, 2000, { strokeColor: "blue", });
//添加圆圈
map.addOverlay(circle);
运行截图:(颜色可以自己控制)
//添加标注
// var content = "label";
var label = new BMapGL.Label("中国前端学习基地", { // 创建文本标注
position: point, // 设置标注的地理位置
offset: new BMapGL.Size(0, 0) // 设置标注的偏移量
})
map.addOverlay(label); // 将标注添加到地图中
label.setStyle({
fontSize: "32px",
color: "red"
})
运行截图:
//信息窗口
var infoWindow = new BMapGL.InfoWindow(`<p>前端很简单,只有<strong>javascript,jquery</strong></p>
<img src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fp1.itc.cn%2Fq_70%2Fimages03%2F20210911%2Fbe6fde8058e8407c8a8f9c64e6391519.jpeg&refer=http%3A%2F%2Fp1.itc.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1669788564&t=84a66cf92e8a60210b4f39a33003c812" width="200">
`, opts); // 创建信息窗口对象
map.openInfoWindow(infoWindow, map.getCenter()); // 打开信息窗口
//map.getCenter()获取到地图的中心位置
marker.addEventListener("click", e => {
//单击显示
map.openInfoWindow(infoWindow, map.getCenter());
})
运行截图:(这里添加了一个p标签和一张图片)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> html { height: 100% } body { height: 100%; margin: 0px; padding: 0px } #container { height: 100% } </style> </head> <body> <input type="search" onchange="search(this)"> <div id="container"></div> </body> <!-- 导入js --> <script src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=aEGXvr6KLo5v40cLlaCrPvZ0AKEOd18O"></script> <script> //初始化地图 var map = new BMapGL.Map("container"); //准备一个中心点(经纬度) var point = new BMapGL.Point(113.665, 34.784); //设置中心点和缩放级别 map.centerAndZoom(point, 15); //鼠标滚轮缩放 map.enableScrollWheelZoom(true); //添加一个点 var marker = new BMapGL.Marker(point); // 创建标注 //添加覆盖物 map.addOverlay(marker); // 将标注添加到地图中 //创建一个本地搜索 var local = new BMapGL.LocalSearch(map, { renderOptions: { map: map } }); function search(e) { local.search(e.value); } </script> </html>
运行截图:(当在输入框输入内容,会搜索对应的关键字)
map.removeOverlay(覆盖物)
map.addEventListener("click", e => {})
map.addEventListener("dblclick", e => {})
注意:所有的覆盖物都可以添加事件
第一步:public/index.html引入
第二步:在组件中定义data
data() {
return {
map: null,//地图
point: null,//中心点
marker: null,//标记
keyword: "",//关键字
local: null,//搜索控件
};
},
第三步:mounted初始化项目
mounted() {
this.map = new window.BMapGL.Map(this.$refs.map);
this.point = new window.BMapGL.Point(113.665, 34.784);
this.map.centerAndZoom(this.point, 15);
//鼠标滚轮缩放
this.map.enableScrollWheelZoom(true);
//添加一个点
this.marker = new window.BMapGL.Marker(this.point);
//添加覆盖物
this.map.addOverlay(this.marker);
this.local = new window.BMapGL.LocalSearch(this.map, {
renderOptions: { map: this.map },
});
},
这里需要注意:
为什么第三方api需要加window呢?
答:echarts还是BMapGL都是挂载到window上的,如果直接使用早当前的组件里面没有导入这个BMapGL会报错(效果也会有,js会向上查找),基本上第三方组件,都需要在mounted组件渲染完毕后在执行初始化(确保js已经加载完毕)
第四步:监听数据变化,更新地图
watch: {
keyword: {
handler() {
if (this.keyword == "") {
//如果为空就清除搜索
this.local.clearResults();
//缩放到中心点
this.map.centerAndZoom(this.point, 15);
} else {
this.local.search(this.keyword);
}
},
},
},
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。