在vue+webpack项目中引入高德地图API
vue+webpack引入高德地图及使用相关功能1.申请key(高德地图API官网介绍的比较详细http://lbs.amap.com/api/javascript-api/summary/)2.引入高德地图(在index.html中引入JSAPI)(如果点击地图报错,后面拼接callback=init试试)<script type="text/javascript&quo
vue+webpack引入高德地图及使用相关功能
1.申请key
(高德地图API官网介绍的比较详细http://lbs.amap.com/api/javascript-api/summary/)
2.引入高德地图
(在index.html中引入JSAPI)(如果点击地图报错,后面拼接callback=init试试)
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.4&key=您申请的高德key值&callback=init"></script>
//引用高德组件UI,有需要可以使用(1.0版本)
<script src="//webapi.amap.com/ui/1.0/main.js"></script>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您申请的百度key值"></script>
<script> //初始化地图(如果点击地图报错,后面拼接callback=init) function init() { } </script>
3.修改配置文件
(注意:在build/webpack.base.conf.js 加入如下配置,负责vue中使用import会报错。 如果如下导入还AMap报错,请使用window.AMap)
externals: {
'AMap':'AMap',
'BMap':'BMap',
'AMapUI':'AMapUI'
// 'AMap': 'window.AMap'
}
4.在自己定义的vue组件中引入AMap
<template>
<div id="Sharingrouter">
<div id="container" ref="container">
</div>
<div id="panel"></div>
</div>
</template>
<script>
var map;
export default {
data() {
return {
}
},
mounted() {
this.init();
},
methods: {
init() {
var map = new AMap.Map("container", {
resizeEnable: true,
center: [116.397428, 39.90923],//地图中心点
zoom: 12 //地图显示的缩放级别
});
//添加构造器 AMap.plugin(['AMap.Driving', 'AMap.Transfer', 'AMap.Walking'], function () { map.addControl(new AMap.Driving()); map.addControl(new AMap.Transfer()); map.addControl(new AMap.Walking()); }); } } </script> <style>
/*如果没有地图可能是容器没有设置宽高*/
#container { width: 100%; height: 100%; position: absolute; cursor: pointer; }</ style >
5.高德地图常用的方法
(1)显示地图
选定地图的div容器
<div id="container" style="width:500px; height:300px"></div>
var map = new AMap.Map('container', {
resizeEnable: true,
zoom:11,
center: [116.397428, 39.90923]
});
(2)地图常用控件
工具条 | ToolBar | 集成了缩放、平移、定位等功能按钮在内的组合控件 |
比例尺 | Scale | 展示地图在当前层级和纬度下的比例尺 |
定位 | Geolocation | 用来获取和展示用户主机所在的经纬度位置 |
鹰眼 | OverView | 在地图右下角显示地图的缩略图 |
类别切换 | MapType | 实现默认图层与卫星图、实施交通图层之间切换的控 |
举例:AMap.plugin(['AMap.ToolBar','AMap.Scale','AMap.OverView'],
function(){
map.addControl(new AMap.ToolBar());
map.addControl(new AMap.Scale());
map.addControl(new AMap.OverView({isOpen:true}));
});
(3)点标注使用自定义的图标来标记
var icon = new AMap.Icon({
image : 'http://vdata.amap.com/icons/b18/1/2.png',//24px*24px
//icon可缺省,缺省时为默认的蓝色水滴图标,
size : new AMap.Size(24,24)});
var marker = new AMap.Marker({
icon : icon,//24px*24px
position : provinces[i].center.split(','),
offset : new AMap.Pixel(-12,-12),
map : mapObj
});
参数名称 | 类型 | 说明 |
---|---|---|
size | Size | 图标尺寸,默认值(36,36) |
imageOffset | Pixel | 图标取图偏移量。当image使用了图片精灵时,可通过size和imageOffset配合,显示图标的指定范围 |
image | String | 图标的取图地址。默认为蓝色图钉图片 |
imageSize | Size | 修改原始图片的大小,将拉伸或压缩图片,等同于CSS中的background-size属性。可用于实现高清屏的高清效果 |
(4)输入提示
<input id="tipinput"/>
//输入提示
var auto = new AMap.Autocomplete({
input: "tipinput"
});
(5)地点规划+步行路线规划
//步行导航
var walking = new AMap.Walking({
map: map,
panel: "panel"
});
walking.search([
{keyword: '北京市地震局(公交站)',city:'北京'},
{keyword: '亦庄文化园(地铁站)',city:'北京'}
]);
6.个人在项目中封装了用到的方法
// (1) 自己定义坐标点样式 icon() {
// arrXY是存储点过的坐标点数组 for (var i = 0; i < this.arrXY.length; i++) { // 加坐标点 var icon = new AMap.Icon({ image: 'http://imgp.timeprints.net/end1.png',//24px*24px //icon可缺省,缺省时为默认的蓝色水滴图标, size: new AMap.Size(22, 26), offset: new AMap.Pixel(0, 0) }); new AMap.Marker({ position: this.arrXY[i], //marker所在的位置 map: map, //创建时直接赋予map属性 icon: icon, offset: new AMap.Pixel(-12, -12) }); } },
// (2) 定义编辑折线 editLine() { var arr = new Array();//arrX和arrY经纬度坐标数组 for (var i = 0; i < this.arrX.length - 1; i++) { arr.push(new AMap.LngLat(this.arrX[i], this.arrY[i])); arr.push(new AMap.LngLat(this.arrX[i + 1], this.arrY[i + 1])); //定义折线对象 this.polyline = new AMap.Polyline({ path: arr, //设置折线的节点数组 strokeColor: "#004ea2", strokeWeight: 6, }); this.polyline.setMap(map);//地图上添加折线 //构造折线编辑对象,并开启折线的编辑状态 map.plugin(["AMap.PolyEditor"], () => { this.polylineEditor = new AMap.PolyEditor(map, this.polyline); }); } },
// (3) 定义定位获取当前位置 geol() { //添加构造器 AMap.plugin(['AMap.Geolocation'], function () { map.addControl(new AMap.Geolocation()) }) var geolocation = new AMap.Geolocation({ enableHighAccuracy: true,//是否使用高精度定位,默认:true timeout: 10000, //超过10秒后停止定位,默认:无穷大 maximumAge: 0, //定位结果缓存0毫秒,默认:0 convert: true, //自动偏移坐标,偏移后的坐标为高德坐标,默认:true showButton: false, //显示定位按钮,默认:true // buttonPosition: 'LB', //定位按钮停靠位置,默认:'LB',左下角 buttonOffset: new AMap.Pixel(10, 20),//定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20) showMarker: false, //定位成功后在定位到的位置显示点标记,默认:true showCircle: false, //定位成功后用圆圈表示定位精度范围,默认:true panToLocation: true, //定位成功后将定位到的位置作为地图中心点,默认:true zoomToAccuracy: true //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false }); // 一定要add添加 map.addControl(geolocation); geolocation.getCurrentPosition(); AMap.event.addListener(geolocation, 'complete', (suc) => { // 如果在北京就定位 if (suc.addressComponent.citycode == '010') { this.locatX = suc.position.M this.locatY = suc.position.O } else { this.locatX = 116.397428 this.locatY = 39.90923 } });//返回定位信息 AMap.event.addListener(geolocation, 'error', (err) => { console.log(err); }); //返回定位出错信息 },
(4)定义步行路线(驾车公交类似具体查看高德官网API) walker() { if (this.index === 2) { // 每次执行将存储步行路线坐标的数组清空 this.arrSortX = []; this.arrSortY = []; // 遍历点击的坐标数组 for (var i = 0; i < this.arrX.length - 1; i++) { // this.arrSortX=[]; // this.arrSortY=[]; // 步行路线 var walking = new AMap.Walking({ map: map, panel: "panel", autoFitView: false, hideMarkers: true }); // 该方法获取步行路线,以及获取该段路线的坐标(并进行剖点处理) walking.search([this.arrX[i], this.arrY[i]], [this.arrX[i + 1], this.arrY[i + 1]], (status, result) => { console.log(result.routes); if (result.routes[0].steps.length <= 8) { for (var j = 0; j < result.routes[0].steps.length; j++) { this.arrSortX.push(result.routes[0].steps[j].start_location.M); this.arrSortX.push(result.routes[0].steps[j].end_location.M); this.arrSortY.push(result.routes[0].steps[j].start_location.O); this.arrSortY.push(result.routes[0].steps[j].end_location.O); } } else { for (var j = 0; j < result.routes[0].steps.length; j += 3) { this.arrSortX.push(result.routes[0].steps[j].start_location.M); this.arrSortX.push(result.routes[0].steps[j].end_location.M); this.arrSortY.push(result.routes[0].steps[j].start_location.O); this.arrSortY.push(result.routes[0].steps[j].end_location.O); } } // 记录每一次点击获取的坐标个数 记录每段路线获取的所有坐标点的长度 try { this.indexLength = this.arrSortX.length if (i == (this.arrX.length - 1)) { this.indexLengthArr.push(this.indexLength) } } catch (e) { console.log(e); } }); } } },
更多推荐
所有评论(0)