欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

vue高德地图实现动态切换坐标点 vue高德地图实现点击坐标点展示自定义窗体

程序员文章站 2022-06-28 18:52:20
首先注册高德账号...

先来看下效果:

vue高德地图实现动态切换坐标点 vue高德地图实现点击坐标点展示自定义窗体

 

首先注册高德账号 获取到 高德密钥 key 

https://lbs.amap.com/ 

https://lbs.amap.com/api/javascript-api/summary

官网注册成为开发者 个人公司都可以 然后进去控制台

1.我的应用中创建新的应用

2.在应用中点击添加 创建新的key

vue高德地图实现动态切换坐标点 vue高德地图实现点击坐标点展示自定义窗体

vue高德地图实现动态切换坐标点 vue高德地图实现点击坐标点展示自定义窗体

下面开始实现你想要的功能:

我是基于vue开发的所以这里就用了vue-cli  可自行去vue官网安装cli脚手架

vue create vue-map 安装vue脚手架命令 下面是我的文件目录  Home.vue是主要实现功能的代码

vue高德地图实现动态切换坐标点 vue高德地图实现点击坐标点展示自定义窗体

在入口index.html中引入高德js文件  引入的cdn地址key的参数 就是你应用中创建的key

<!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>高德地图</title>
    <script src="https://webapi.amap.com/maps?v=1.4.15&key=高德申请的key"></script>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

在Home.vue 文件中进行开发

我这里写的大小800px的正方形。

<template>
  <div class="home">
    <div class="map" id="container"></div>
  </div>
</template>

<style lang="less" scoped>
.map{
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  margin: auto;
  width: 800px;
  height: 800px;
}
</style>

1. 初始化地图控件

<script>
// @ is an alias to /src
export default {
  name: 'Home',
  components: {
    
  },
  data () {
    return {
      map: '',
      infoWindow: '',
      marker: '',
      timer: '',
      n: 0,
      list: [
        {
          name: '杭州雷峰塔景区',
          longitude: '120.148849',
          latitude: '30.230934',
          people: Math.floor(Math.random() * 100000)
        },
        {
          name: '杭州西湖区河坊街',
          longitude: '120.092207',
          latitude: '30.274405',
          people: Math.floor(Math.random() * 100000)
        },
        {
          name: '杭州西湖断桥残雪',
          longitude: '120.151195',
          latitude: '30.258105',
          people: Math.floor(Math.random() * 100000)
        },
        {
          name: '杭州西湖风景名胜区-曲院风荷',
          longitude: '120.135502',
          latitude: '30.251182',
          people: Math.floor(Math.random() * 100000)
        },
        {
          name: '杭州西湖风景名胜区-曲院风荷',
          longitude: '120.135502',
          latitude: '30.251182',
          people: Math.floor(Math.random() * 100000)
        },
        {
          name: '银泰百货(西湖店)',
          longitude: '120.165667',
          latitude: '30.243768',
          people: Math.floor(Math.random() * 100000)
        },
        {
          name: '湘湖国家旅游度假区',
          longitude: '120.209336',
          latitude: '30.133265',
          people: Math.floor(Math.random() * 100000)
        },
        {
          name: '杭州动物园',
          longitude: '120.133069',
          latitude: '30.212224',
          people: Math.floor(Math.random() * 100000)
        }
      ]
    }
  },
  methods: {
    // 初始化地图控件方法
    initMap() {
      this.map = new AMap.Map(document.getElementById("container"), {
        mapStyle: 'amap://styles/darkblue',
        resizeEnable: false,
        center: [this.list[0].longitude, this.list[0].latitude],//地图中心点
        zoom: 13,//地图显示的缩放级别
        keyboardEnable: false,
        zoomEnable: true,
        dragEnable: true,
        animateEnable: true
      });
      // 循环初始化所有坐标点
      this.list.forEach(v => {
        this.initMarker({ lng: v.longitude, lat: v.latitude }, v)
      })
      // 通过定时器对地图坐标进行轮播
      this.setInter()
    },
    // 初始化坐标点的icon
    initMarker(location, item) {
      // console.log('Location', location, item)
      // 生成坐标点icon
      let icon = new AMap.Icon({
        size: new AMap.Size(20, 26),
        image: require("../assets/images/dn-marker-icon.png"),
        imageSize: new AMap.Size(20, 26)
      });
      // 坐标点 生成方法
      this.marker = new AMap.Marker({
        icon: icon, // 坐标点图标
        position: [location.lng, location.lat], // 左边点的经纬度
        offset: new AMap.Pixel(0, -30) // 坐标点偏移量
      });
      // 坐标点添加点击事件 用来打开自定义窗口 也可直接添加窗口自动全部打开状态
      this.marker.on('click', (e) => {
        // console.log('marker 添加点击事件:', e, e.pixel.x, e.pixel.y)
        this.initInfoWindow(location.lng, location.lat, item)
        // 点击当前标点移动至地图中心点
        this.setCenter(location.lng, location.lat)
        this.infoWindow.open(this.map, e.lnglat)
      })
      // 初始化坐标点自定义窗口
      this.initInfoWindow(location.lng, location.lat, item)
      // 打开窗口的方法 这里也可以通过 点击坐标点打开
      this.infoWindow.open(this.map, {Q: location.lat, R: location.lng, lat: location.lat, lng: location.lng})
      // 
      this.marker.setMap(this.map)
    },
    // 初始化信息窗体
    initInfoWindow(lng, lat, item) {
      // console.log('创建了信息窗体')
      this.infoWindow = new AMap.InfoWindow({
        isCustom: true,  //使用自定义窗体
        anchor: 'bottom-center',
        content: this.createInfoWindow(item),
        offset: new AMap.Pixel(0, -20),
        autoMove: true,
        closeWhenClickMap: false
      });
    },
    // 创建信息窗体
    createInfoWindow(item) {
      return `
        <div class="dn-info-window">
          <div class="dn-info-name">${item.name}</div>
          <div class="dn-info-num">实时人数:<span>${item.people}</span></div>
        </div>
      `
    },
    // 轮循坐标点方法
    setInter() {
      this.timer = setInterval(() => {
        // 轮播当前标点移动至地图中心点
        this.setCenter(this.list[this.n].longitude, this.list[this.n].latitude)
        this.initMarker({ lng: this.list[this.n].longitude, lat: this.list[this.n].latitude }, this.list[this.n])
        if (this.n == (this.list.length - 1)) {
          this.n = 0
        } else {
          this.n++
        }
      }, 10000)
    },
    // 当前标点移动至地图中心
    setCenter (long, lati) {
      this.map.setCenter([long, lati])
    }
  },
  mounted () {
    this.initMap()
  },
  beforeDestroy () {
    clearInterval(this.timer)
  }
}
</script>

样式代码


<style lang="less" scoped>
.map{
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  margin: auto;
  width: 800px;
  height: 800px;
}
// 自定义窗体的样式  
/deep/.info-window {
  padding: 10px;
  background: rgba(4, 77, 145, 0.753);
  color: #3196FA;
  border-radius: 10px;
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
  -ms-border-radius: 10px;
  -o-border-radius: 10px;

  .info-name {
    font-size: 16px;
    font-family: PingFang SC;
    font-weight: 500;
    color: #FFFFFF;
  }

  .info-num {
    font-size: 14px;
    font-family: PingFang SC;
    font-weight: 400;
    color: #A5A3A1;

    >span {
      font-size: 14px;
      color: #3196FA;

      &.active-color {
        color: #EF4864;
      }
    }
  }
}

</style>

这篇文章主要记录自己使用高的地图的方法。欢迎大家下方指导。 下篇更新高德地图搜索地点功能 

本文地址:https://blog.csdn.net/weixin_38356321/article/details/109527638