高德地图实现marker标记,Text多点文本标记,标记信息窗体,手动选点功能

3 篇文章 0 订阅
该博客介绍了如何使用高德地图API在Vue环境中创建多点标记并显示信息窗体。通过示例代码展示了如何遍历数据生成标记点,以及监听点击事件展示信息。同时,还提供了手动选点功能,用户可以点击地图选择新的设备经纬度,并弹窗确认设置。
摘要由CSDN通过智能技术生成

1.marker标记,Text多点文本标记,标记信息窗体

效果:

代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <!-- import CSS -->
     <!-- vue引入高德地图实现多点标记,点击标记点出现信息窗体 -->
    <link rel="stylesheet" href="https://cache.amap.com/lbs/static/main1119.css"/>
    <link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css" />
</script>
</head>
<body>
  <div id="app">
   <div id="maps" style="width:900px;height: 550px"></div>
  </div>
</body>
      <!-- 获取鼠标点击经纬度 -->
    <script type="text/javascript" src="https://cache.amap.com/lbs/static/addToolbar.js"></script>
    <script src="https://a.amap.com/jsapi_demos/static/demo-center/js/demoutils.js"></script>
    <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=你的key&plugin=AMap.Geocoder"></script>
  <script>
    new Vue({
      el: '#app',
      data: function() {
        return { 
         tableData: [{
            equipmentNumber: '3014-341078',
            alarmNumber: '2345',
            equipmentPosition: '中环路1111',
            segmentNumber: '2345678974',
            segmentName: '名称11',
            naturalNumber: '234234234234-67867867',
            naturalName: '中环11',
            equipmentType: '综合检测1',
            latitude: '104.09576',
            longitude: '30.621637',
          },
          {
            alarmNumber: '345345',
            equipmentPosition: '中环路2222',
            segmentNumber: '2345678974',
            segmentName: '名称22',
            naturalNumber: '234234234234-6786',
            naturalName: '中环22',
            equipmentNumber: '3014-341077',
            equipmentType: '综合检测2',
            latitude: '104.094623',
            longitude: '30.620917'
          }
        ],
         }
      },
       mounted() {
      this.mapApi();//初始化
    },
      methods:{
      mapApi(){
        var map = new AMap.Map("maps", {
          resizeEnable: true,
          center: [Number(this.tableData[0].latitude), Number(this.tableData[0].longitude)], //初始地图中心点
          // zoom:13,//初始化地图级别
        }); //初始化地图
        //信息窗口实例
        var infoWindow = new AMap.InfoWindow({
          offset: new AMap.Pixel(0, -30)
        });
        //遍历生成多个标记点
        this.tableData.forEach((item, index) => {
          var marker = new AMap.Marker({
            position: [Number(item.latitude), Number(item.longitude)], //不同标记点的经纬度
            map: map
          });
          marker.content = `
                                   <div style='height:25px;background:#ECEFF4'></div>
                                   <div style='padding:5px 10px'>
                                   <div>设备编号:${item.equipmentNumber}</div>
                                   <div>电警编号:${item.alarmNumber}</div>
                                   <div>设备位置:${item.equipmentPosition}</div>
                                   <div>发布段编号:${item.segmentNumber}</div>
                                   <div>发布段名称:${item.segmentName}</div>
                                   <div>自然段编号:${item.naturalNumber}</div>
                                   <div>自然段名称:${item.naturalName}</div>
                                   </div>
                                   `;
          marker.on('click', markerClick);
          marker.emit('click', {
            target: marker
          }); //默认初始化不出现信息窗体,打开初始化就出现信息窗体
        })
        //多点文本标记 longitude:经度   30.621637
        var textMarker = [{
            longitude: 30.634723,
            latitude: 104.052144,
            text: '交管局1'
          },
          {
            longitude: 30.653332,
            latitude: 104.052488,
            text: '交管局2'
          }
        ];
        // //第一个点
        textMarker.forEach((item1, index1) => {
          var text = 'text' + index1;
          text = new AMap.Text({
            text: item1.text,
            anchor: 'center', // 设置文本标记锚点
            draggable: false,
            cursor: 'pointer',
            angle: 10,
            style: {
              'padding': '.75rem 1.25rem',
              'margin-bottom': '1rem',
              'border-radius': '.25rem',
              'background-color': 'transparent',
              'width': '15rem',
              'border-width': 0,
              'font-weight': 'bold',
              // 'box-shadow': '0 2px 6px 0 rgba(114, 124, 245, .5)',
              'text-align': 'center',
              'font-size': '18px',
              'color': '#881280'
            },
            position: [item1.latitude, item1.longitude]
          });

          text.setMap(map);
        })
        function markerClick(e) {
          console.log('进判断1111', e)
          infoWindow.setContent(e.target.content);
          infoWindow.open(map, e.target.getPosition());
        }
        map.setFitView();
      
      }
      }
    })
  </script>
</html>

2实现.手动选点功能

效果:

代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <!-- import CSS -->
     <!-- vue引入高德地图实现多点标记,点击标记点出现信息窗体 -->
    <link rel="stylesheet" href="https://cache.amap.com/lbs/static/main1119.css"/>
    <link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css" />
</script>
</head>
<body>
  <div id="app">
   <div id="maps" style="width:900px;height: 550px"></div>
  </div>
</body>
      <!-- 获取鼠标点击经纬度 -->
    <script type="text/javascript" src="https://cache.amap.com/lbs/static/addToolbar.js"></script>
    <script src="https://a.amap.com/jsapi_demos/static/demo-center/js/demoutils.js"></script>
    <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=你的key&plugin=AMap.Geocoder"></script>
  <script>
    new Vue({
      el: '#app',
      data: function() {
        return { 
        street:'',
        lng:'',
        lat:'',
         tableData: [{
            equipmentNumber: '3014-341078',
            alarmNumber: '2345',
            equipmentPosition: '中环路1111',
            segmentNumber: '2345678974',
            segmentName: '名称11',
            naturalNumber: '234234234234-67867867',
            naturalName: '中环11',
            equipmentType: '综合检测1',
            latitude: '104.09576',
            longitude: '30.621637',
          },
          {
            alarmNumber: '345345',
            equipmentPosition: '中环路2222',
            segmentNumber: '2345678974',
            segmentName: '名称22',
            naturalNumber: '234234234234-6786',
            naturalName: '中环22',
            equipmentNumber: '3014-341077',
            equipmentType: '综合检测2',
            latitude: '104.094623',
            longitude: '30.620917'
          }
        ],
         }
      },
       mounted() {
      
    },
      methods:{
             //打开编辑详情
      editors() {
        var map = new AMap.Map("maps", {
          resizeEnable: true,
           scrollWheel: true,
          center: [Number(this.tableData[0].latitude), Number(this.tableData[0].longitude)], //初始地图中心点
          // zoom:13,//初始化地图级别
        }); //初始化地图
        //遍历生成多个标记点
        this.tableData.forEach((item, index) => {
          var marker = new AMap.Marker({
            position: [Number(item.latitude), Number(item.longitude)], //不同标记点的经纬度
            map: map,
            icon: new AMap.Icon({            
                        image: "https://img2.baidu.com/it/u=2387934474,2979420926&fm=26&fmt=auto",
                        size: new AMap.Size(20, 20),  //图标大小
                        imageSize: new AMap.Size(20,20)
                    })   
          });
        })
        //多点文本标记 longitude:经度   30.621637
        var textMarker = [{
            longitude: 30.634723,
            latitude: 104.052144,
            text: '交管局1'
          },
          {
            longitude: 30.653332,
            latitude: 104.052488,
            text: '交管局2'
          }
        ];
        // //第一个点
        textMarker.forEach((item1, index1) => {
          var text = 'text' + index1;
          text = new AMap.Text({
            text: item1.text,
            anchor: 'center', // 设置文本标记锚点
            draggable: false,
            cursor: 'pointer',
            angle: 10,
            style: {
              'padding': '.75rem 1.25rem',
              'margin-bottom': '1rem',
              'border-radius': '.25rem',
              'background-color': 'transparent',
              'width': '15rem',
              'border-width': 0,
              'font-weight': 'bold',
              // 'box-shadow': '0 2px 6px 0 rgba(114, 124, 245, .5)',
              'text-align': 'center',
              'font-size': '18px',
              'color': '#881280'
            },
            position: [item1.latitude, item1.longitude]
          });
          text.setMap(map);
        })
         map.setFitView();
        this.$confirm('确认变更该设备经纬度信息?', '确认变更位置', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          const _this = this;
          var geocoder = new AMap.Geocoder({
            city: "010", //城市设为北京,默认:“全国”
            radius: 1000 //范围,默认:500
          });
          var marker1 = new AMap.Marker();
          function regeoCode() {
            var lnglat = [_this.lng, _this.lat];
            console.log('进11111', lnglat);
           map.add(marker1);
            marker1.setPosition(lnglat);
            geocoder.getAddress(lnglat, function(status, result) {
              if (status === 'complete' && result.regeocode) {
                var address = result.regeocode.formattedAddress;
                //获取街道地址
                _this.street = result.regeocode.addressComponent.street;
                console.log('地址', _this.street);
                _this.$confirm('是否设置设备?'+data.equipmentNumber+'经纬度到指定位置?'+'该位置坐标为'+_this.lng+','+_this.lat+'.发布路段为'+_this.street+' 自然路段为:'+_this.street, '更改设备经纬度', {
                          confirmButtonText: '继续',
                          cancelButtonText: '取消',
                          type: 'warning'
                        }).then(() => {
                        }).catch(() => {
                          this.$message({
                            type: 'info',
                            message: '已取消'
                          });          
                        });
              } else {
                log.error('根据经纬度查询地址失败')
              }
            });
          }
          //获取鼠标点击位置经纬度
          map.on('click', function(e) {
            console.log('经纬度', e)
            _this.lng = e.lnglat.lng;
           _this.lat = e.lnglat.lat;
            regeoCode();
          })

        }).catch(() => {
          this.$message({
            type: 'info',
            message: '已取消删除'
          });
        });
      },
      }
    })
  </script>
</html>

转发请注明原创噢~~~~
看完记得点个赞哟!!!

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以在高德地图Marker对象中添加鼠标事件监听器,来实现鼠标移入显示label详细信息功能。具体的实现步骤如下: 1. 创建Marker对象时,设置label属性为一个AMap.Text对象,用于显示详细信息。 ```javascript var marker = new AMap.Marker({ position: [lng, lat], label: { content: '详细信息', offset: new AMap.Pixel(0, -20) // 设置label偏移量,使其显示在Marker上方 } }); ``` 2. 给Marker对象添加mouseover和mouseout事件监听器,在鼠标移入和移出时显示或隐藏label。 ```javascript marker.on('mouseover', function (e) { marker.setLabel({ content: '详细信息', offset: new AMap.Pixel(0, -20), visible: true // 显示label }); }); marker.on('mouseout', function (e) { marker.setLabel({ visible: false // 隐藏label }); }); ``` 完整的代码示例: ```javascript var map = new AMap.Map('container', { zoom: 13, center: [116.397428, 39.90923] }); var markers = [ {lnglat: [116.405285, 39.904989], info: '北京市'}, {lnglat: [121.472644, 31.231706], info: '上海市'}, {lnglat: [113.280637, 23.125178], info: '广州市'}, {lnglat: [114.066112, 22.548515], info: '深圳市'} ]; for (var i = 0; i < markers.length; i++) { var marker = new AMap.Marker({ position: markers[i].lnglat, label: { content: markers[i].info, offset: new AMap.Pixel(0, -20) } }); marker.on('mouseover', function (e) { marker.setLabel({ content: e.target.getExtData().info, offset: new AMap.Pixel(0, -20), visible: true }); }); marker.on('mouseout', function (e) { marker.setLabel({ visible: false }); }); marker.setExtData(markers[i]); // 将详细信息存储在Marker对象的扩展数据中 marker.setMap(map); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值