记录下uniapp开发结合webview调用高德地图(路线规划,多路选择,双向通信)_uniapp 打车

2.web端开发

  1. web vue项目引入这个"@amap/amap-jsapi-loader": "^1.0.1"插件,
  2. 在你页面js中先挂载window上这个安全密钥
    window._AMapSecurityConfig = { securityJsCode: '生成的安全密钥', }
  3. 初始化地图:
     async initMap() {
       try {
         this.AMap = await this.AMapLoader.load({
           key: "你生成到的key",             
           version:"2.0",     
           plugins:[],
           // resizeEnable: true
           dragEnable: true,
         })
         this.mapInstance = await new this.AMap.Map("mapContainer",{  //设置地图容器id
           viewMode:"3D", //是否为3D地图模式
           zoom: 15, // 缩放级别
           pitch: 0, // 俯视角度
           center: new this.AMap.LngLat(this.myLocation.longitude,this.myLocation.latitude), //初始化地图中心点位置
         });
         // 画用自定义点
         this.selfMarker = await new this.AMap.Marker({
           map: this.mapInstance,
           position: [this.preLocation.longitude, this.preLocation.latitude],
           content: this.$refs.selfMarkerRef,  // 自定义地图锚点dom
           anchor: new this.AMap.Pixel(0,0),
           offset: new this.AMap.Pixel(-20,-20),
           size: new this.AMap.Size(20, 20)
         });
         // 自己走过的线(先定义)
         this.passedPolylineInstance =  new this.AMap.Polyline({
           map: this.mapInstance,
           strokeColor: "#b6bcb2",  //线颜色
           strokeWeight: 6,      //线宽
         });
         Promise.all([this.AMap,this.mapInstance,this.selfMarker,this.passedPolylineInstance]).then(res=>{
           this.getPositionByAmap()
           // 路线规划
           this.routePlan()
         })
       } catch (err) {

       }
      },

  1. 高德获取定位信息
	// 获取定位
      getPositionByAmap() {
        if(this.AMap) {
          this.AMap.plugin('AMap.Geolocation',  () => {
           let geolocation = new this.AMap.Geolocation({
              // enableHighAccuracy: true,//是否使用高精度定位,默认:true
              noIpLocate: 3,           // 禁止ip定位
              maximumAge: 300,           //定位结果缓存0毫秒,默认:0
              convert: true,           //自动偏移坐标,偏移后的坐标为高德坐标,默认:true
              showButton: false,        //显示定位按钮,默认:true
              showMarker: false,        //定位成功后在定位到的位置显示点标记,默认:true
              showCircle: false,        //定位成功后用圆圈表示定位精度范围,默认:true
              panToLocation: false,     //定位成功后将定位到的位置作为地图中心点,默认:true
              zoomToAccuracy:false      //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
            });
           if(positionTimer) {
             clearInterval(positionTimer)
           }
            positionTimer = setInterval(()=>{
              geolocation.getCurrentPosition((status,result) =>{
                if(status === 'complete') {
                  this.myLocation.longitude = result.position.lng
                  this.myLocation.latitude = result.position.lat
                  if(this.selfMarker) {
                    this.selfMarker.setPosition([this.myLocation.longitude, this.myLocation.latitude])
                  }
                }
              });
            },1000)
          });
        }
      }
      
      // 获取当前城市adcode行政编码
      this.cityInfo  =  await new Promise((resolve,reject)=>{
            this.AMap.plugin('AMap.Geocoder', () => {
                new this.AMap.Geocoder({ city: '',radius: 1000 }).getAddress([this.fromAppInfo.fromLongitude, this.fromAppInfo.fromLatitude],
                  (status, result) => {
                  if (status === 'complete' && result.regeocode) {

                    let address = result.regeocode.addressComponent;
                    address.adcode = adcodeDeal.dealAdCode(address.adcode)
                    // 直辖市去除
                    resolve(address)
                  }else{
                    resolve({adcode: null})
                  }
                });
            })
          })

  1. 绘制路线
// 规划绘制路线
      drawRoute(planingRoutes) {
        // 解析线路
        const parseRouteToPath = (route) => {
          let path = []
          let continuityPath = []
          for (let i = 0, l = route.steps.length; i < l; i++) {
            let step = route.steps[i]
            const arrayOfCoordinates = step.polyline.split(";").map(coord => coord.split(","));
            path.push(arrayOfCoordinates.flat())
          }
          path = path.flat()

          for(let i=0;i < path.length -1;i++) {
            continuityPath.push([Number(path[i]),Number(path[i+1])])
            i++
          }
          return continuityPath
        }
        planingRoutes.forEach(itemRoute=>{
          this.routeLines.push(parseRouteToPath(itemRoute))
        })
        // 开始图标
        this.startMarker = new this.AMap.Marker({
          position: [this.routeLines[0][0][0],this.routeLines[0][0][1]],
          // icon: 'https://webapi.amap.com/theme/v1.3/markers/n/start.png',
          map: this.mapInstance,
          content: this.$refs.startMarkerRef,
          // offset: new this.AMap.Pixel(-80, -40),
          anchor: new this.AMap.Pixel(0,0),
          offset: new this.AMap.Pixel(-80,-50),
          size: new this.AMap.Size(100, 100)
        })
        // 结束图标
        this.endMarker = new this.AMap.Marker({
          position: [this.routeLines[0][this.routeLines[0].length-1][0],this.routeLines[0][this.routeLines[0].length-1][1]],
          // icon: 'https://webapi.amap.com/theme/v1.3/markers/n/end.png',
          map: this.mapInstance,
          content: this.$refs.endMarkerRef,
          // offset: new this.AMap.Pixel(-80, -40),
          anchor: new this.AMap.Pixel(0,0),
          offset: new this.AMap.Pixel(-80,-50),
          size: new this.AMap.Size(100, 100)
        })
        // 画线
        this.routeLinesInstance = []
        this.routeLines.forEach((path,index)=>{
          let polyline = new this.AMap.Polyline({
            path: path,
            isOutline: true,
            outlineColor: '#366d33',
            borderWeight: index === 0 ? 2 : 1,
            strokeWeight: index === 0 ? 5: 4,
            showDir: true,
            strokeOpacity: index === 0 ? 0.9 : 0.3,
            strokeColor: index === 0 ? '#45ed45' : '#30aa30',
            lineJoin: 'round',
            extData: {
              isSelect: index === 0,
              index: index
            }
          })
          polyline.hide()
          this.routeLinesInstance.push(polyline)
          this.mapInstance.add(polyline);
        })
        // 注册事件 实现点击切换线路
        this.routeLinesInstance.forEach((polyline,index)=>{
          polyline.on('click', (e) => {
            polyline.setOptions({
              borderWeight: 2,
              strokeWeight: 5,
              strokeOpacity: 0.9,
              strokeColor: '#45ed45',
              extData: {
                isSelect: true,
                index: index
              }
            })

            let otherPath= this.routeLinesInstance.filter((item,ind) =>ind !== index)
            otherPath.forEach(item=>{
              item.setOptions({
                borderWeight: 1,
                strokeWeight: 4,
                strokeOpacity: 0.3,
                strokeColor: '#30aa30',
                extData: {
                  isSelect: false,
                  index: item.getExtData().index,
                }
              })
            })
            // 变更路线
            this.$eventBus.$emit('changeRouteLine')
            // 调整视野达到最佳显示区域
            this.mapInstance.setFitView([ this.startMarker, this.endMarker, ...this.routeLinesInstance ], false, [70,260,60,60])
          })
        })
        this.routeLinesInstance[0].show()
        this.startMarker.show()


### 一、网安学习成长路线图


网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/aa7be04dc8684d7ea43acc0151aebbf1.png)


### 二、网安视频合集


观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/f0aeee2eec7a48f4ad7d083932cb095d.png)


### 三、精品网安学习书籍


当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/078ea1d4cda342f496f9276a4cda5fcf.png)


### 四、网络安全源码合集+工具包


光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/e54c0bac8f3049928b488dc1e5080fc5.png)


### 五、网络安全面试题


最后就是大家最关心的网络安全面试题板块  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/15c1192cad414044b4dd41f3df44433d.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/b07abbfab1fd4edc800d7db3eabb956e.png)  



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值