【高德地图进阶】--- 带图片的点(1)

在使用地图开发时相信用的最多的就是点,其中难免需要使用到自定义图片的点。
而且点还要具备,可点击,可携带数据等功能。

点的绘制

绘制带图片的点常见的方式有四种

  • AMap.Marker :使用地图 JS API中的marker,通过其icon属性指定图片链接
    • 特点:绘制简单,对图片无要求,可批量管理。
  • Loca.IconLayer:使用Loca 数据可视化
    • 特点:绘制简单,对图片无要求,可批量管理。
    • 缺点:点重叠,点击事件触发重叠后下面的点,而不是最上面的点 ,需要额外引入loca
  • SimpleMarker:使用AMapUI 组件库 ,该对象继承于AMap.Marker,功能类似
    • 特点:对图片无要求,可批量管理。
    • 缺点:需要额外引入
  • AMap.Object3D.RoundPoints:使用3d地图绘制圆点,然后填充纹理(不进行讲解了,不推荐使用)
    • 特点:无高度
    • 缺点:操作复杂,对图片有要求,点击事件需要计算,不可携带数据。

AMap.Marker

本章针对AMap.Marker进行讲解。
因为AMap.Marker有高度,在使用3d地图的时候,如果图片太小,会有一种悬浮在空中的效果。这时候要么把图片放大,要么把图片放在水滴图中。

直接上代码
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta
      name="viewport"
      content="initial-scale=1.0, user-scalable=no, width=device-width"
    />
    <title>图标点标记</title>
    <style>
      html,
      body,
      #container {
        height: 100%;
        width: 100%;
        margin: 0px;
      }
      .amap-icon img {
        width: 25px;
        height: 34px;
      }
    </style>
  </head>
  <body>
    <div id="container"></div>
    <script>
      window._AMapSecurityConfig = {
        securityJsCode: "xxxx",
      };
    </script>
    <script
      type="text/javascript"
      src="https://webapi.amap.com/maps?v=1.4.15&key=cccc"
    ></script>
    <script type="text/javascript">
      // 创建地图实例
      var map = new AMap.Map("container", {
        zoom: 13,
        center: [116.4, 39.92],
        resizeEnable: true,
        viewMode: "3D",
      });

      // 创建一个 Icon
      var startIcon = new AMap.Icon({
        // 图标尺寸
        size: new AMap.Size(32, 24),
        // 图标的取图地址
        image:
          "https://a.amap.com/Loca/static/manual/weathers/blizard.png",
        // 图标所用图片大小
        imageSize: new AMap.Size(32, 24),
      });

      // 将 icon 传入 marker
      var startMarker = new AMap.Marker({
        // 点的坐标
        position: [116.35, 39.89],
        // 指定点的icon,也可以是个url ,但这样就不能对图片进行设置了
        icon: startIcon,
        //启用点击事件 如果需要点击事件,必须开启
        clickable: true,
        //点额外携带的数据,用户自定义属性,支持JavaScript API任意数据类型
        extData: "222",
      });
      // 可以调用setExtData()设置自定义属性
      //startMarker.setExtData('222')
      
      // 创建覆盖物组,用于批量处理点 (控制显隐,点击事件等)
      let group = new AMap.OverlayGroup();
      //将组 挂载到地图上
      group.setMap(map);
      //将需要批量控制的点放到一个组中,通过控制组,就可以操作组内所有所有覆盖物
      group.addOverlay(startMarker);
      group.on("click", function (e) {
        //e.target触发事件的点对象
        console.log(e.target);
        //拿到点中携带的数据
        console.log(e.target.getExtData());
      });
    </script>
  </body>
</html>

在这里插入图片描述

从上图可以看出,正确的打印出了点的信息,以及点携带的数据,批量操作
该例中只演示了一个点,group可以存放多个点。
marker 中的 extData 用来携带额外的数据,通常点击 ‘点’ 之后,需要从点中拿到数据并发送请求。获取其他的数据。(也可以使用setExtData()添加数据,getExtData( )获取数据)
图中可能不太明显,实际图标离地面还有些距离,如果切换地图视角,点的位置会显得不是很准确


处理图标高度问题

设置offset , marker默认的offset是Pixel(-10,-34) ,只需要置为0即可

在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲸渔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值