zoukankan      html  css  js  c++  java
  • 高德地图进行线路规划绘制标记点操作(vue)

    需求:根据markers来绘制标记点且进行连线,不同的路线绘制不同的颜色。

    vue:
    //html
    <template>
    <div class="map-container">
    <div id="mapContainer"></div>
    </div>
    </tempalte>

    //js
    export default{
    name:'map',
    data(){
    return{
    map:{},
    markerList:[],
    driving:{}
    }
    },
    mounted(){
    this.mapInit();
    },
    methods:{
    mapInit(){
    this.map = new AMap.Map('mapContainer',{
    zoom:13
    })
    this.addMarker();
    let _this = this;
    AMap.plugin('AMap.Driving',function(){
    _this.driving = new AMap.Driving({
    map:_this.map
    })
    })
    },
    addMarker(type='default',paramMarkers,initType){
    let _this = this;
    _this.map.clearMap();
    let markers = [];
    let bgColors = [];
    if(type==='default'){
    markers = this.initMarkers(initType);//初始化标记点经纬度
    bgColors = ['#DC143C','#00af66'];
    }else{
    markers = paramMarkers;
    bgColors = ['#00af66','00cae9',...];
    }
    markers.forEach(function(item,index){
    item.forEach(function(itemMarker,indexMarker){
    if(type==='default'){
    const marker = new AMap.Marker({
    map:_this.map,
    position:[itemMarker.long,itemMarker.lat],
    offset:new AMap.Pixel(-13,-36),
    //设置文本内容
    content:`<div class="marker-point" style="background-color:${bgColors[indexMarker]}"></div>`
    })
    _this.map.add(marker);
    _this.markerList.push(marker);
    }else{
    const marker = new AMap.Marker({
    map:_this.map,
    position:[itemMarker.long,itemMarker.lat],
    offset:new AMap.Pixel(-13,-36),
    content:`<div class="marker-point" style="background-color:${bgColors[index]}"><span>
    ${indexMarker+1}</span></div>`
    })
    _this.map.add(marker);
    _this.markerList.push(marker);
    }
    })
    })
    _this.map.setFitView([...this.markerList]);
    //第一次进入这个页面不需要划线,只标记点即可。点击某个按钮时,触发划线动作及标点。
    if(type !== 'default'){
    _this.drivingRoute(markers,bgColors);
    }
    },
    drivingRoute(marker,color){
    let routeLineObj = {};
    let startLngLat = [];
    let endLngLat = [];
    let _this = this;
    //行驶路线规划
    function parseRouteToPath(route){
    let path = [];
    //eslint-disable-next-line
    for(let i=0,len=route.steps.length;i<len;i++){
    let step = route.steps[i];
    for(let j=0,lenj=step.path.length;j<lenj;j++){
    path.push(step.path[j]);
    }
    }
    return path;
    }
    function drawRoute(route,index){
    const path = parseRouteToPath(route);
    //生成 折线路线
    routeLineObj = new AMap.Polyline({
    zIndex:52,
    path,
    isOutline:true,
    outlineColor:'#ffeeee',
    borderWeight:2,
    strokeWeight:5,
    strokeColor:color[index]||'#A52A2A',
    lineJoin:'round'
    })
    routeLineObj.setMap(_this.map)
    }
    //因为这里marker放的是二维数组,所以进行了两次循环
    for(let i=0,len=marker.length;i<len;i++){
    for(let j=0,lenj=marker[i].length;j<lenj;j++){
    let markerItem = marker[i][j];
    let markerItemEnd = {};
    //这里进行了这个判断的目的,假设返回了7个点,希望按1->2->3->4->5->6->7的顺序连线
    if(j !== marker[i].length-1){
    markerItemEnd = marker[i][j+1];
    startLngLat = [markerItem.long,markerItem.lat]
    endLngLat = [markerItemEnd.long,markerItem.lat];
    this.driving.search(startLngLat,endLngLat,function(status,result){
    if(status === 'complete'){
    if(result.routes && result.routes.length){
    drawRoute(result.routes[0],i)
    }
    }
    })
    }
    }
    }
    },
    removeAllOverlay(){
    this.map.clearMap();
    this.markerList = [];
    },
    }
    }

    参考链接:https://blog.csdn.net/qq_29101609/article/details/106239155

    如果快乐太难,那祝你平安。
  • 相关阅读:
    W3C代码标准规范
    我们为什么要遵循W3C标准规范
    WEB标准:标准定义、好处、名词解释、常用术语、命名习惯、浏览器兼容、代码书写规范
    ThinkPHP框架下,给jq动态添加的标签添加点击事件移除标签
    ThinkPHP框架下,jq实现在div中添加标签并且div的大小会随之变化
    Windows下spark1.6.0本地环境搭建
    Mysql中使用SQL计算两个日期时间差值
    jquery正则表达式验证:手机号码
    jquery正则表达式验证:验证邮箱格式是否正确
    jquery正则表达式验证:整数12位,小数钱12位小数点后2位
  • 原文地址:https://www.cnblogs.com/sunnyeve/p/14358070.html
Copyright © 2011-2022 走看看