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

上一章讲述了AMap.Marker,这一章使用第二种方式Loca来绘制带图片的点。
经过测试 ,该api 在点击事件上有些问题。如果你的点会有重叠的可能,请谨慎使用该api。

代码
<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>IconLayer 天气预报</title>
    <style>
      html,
      body,
      #container {
        margin: 0;
        padding: 0;
        width: 100%;
        height: 100%;
      }
    </style>
  </head>
  <body>
    <div id="container"></div>
  </body>
  <script>
    window._AMapSecurityConfig = {
      securityJsCode: "xxxx",
    };
  </script>
  <script
    language="javascript"
    src="https://webapi.amap.com/maps?v=1.4.15&key=cccc"
  ></script>
  <!-- 一定要引入 -->
  <script
    language="javascript"
    src="https://webapi.amap.com/loca?v=1.3.2&key=cccc"
  ></script>
  <script>
    //设置点的数据 通常都是通过http请求获取,数据的key是任意的,也可以携带其他任意数据,每一个元素就是一个点,
    //通过点击事件,可以获取点对应的数组元素对象。借此可以实现点携带额外数据的功能
    var districts = [
      {
        name: "北京市",
        center: "116.407394,39.904211",
        icon: "https://a.amap.com/Loca/static/manual/weathers/cloudy.png",
      },
      {
        name: "天津市",
        center: "116.407394,40",
        icon: "https://a.amap.com/Loca/static/manual/weathers/blizard.png",
      },
    ];
   
    // 创建地图实例
    var map = new AMap.Map("container", {
      showIndoorMap: false,
      viewMode: "3D",
      center:[116.407394,39.904211],
      resizeEnable: true,
      showLabel:false
    });
    //创建layer
    var layer = new Loca.IconLayer({
      //挂载到地图
      map: map,
      //开启事件支持,需要点击事件,必须设置为true
      eventSupport: true
    });
    //给layer设置数据
    // 第一个参数是点位的对象数组,第二个参数指定第一个参数中的对象中哪个key是坐标数据
    layer.setData(districts, {
      //设置key 这样就会把districts中的每个元素的center作为点坐标数据
      lnglat: "center",
    });
    //设置点的样式
    layer.setOptions({
      //用于指定图片的路径、base64URI 或者 Image DOM 对象
      source: function (res) {
        //res 是 遍历 districts 中的当前元素
        var i = res.index;
        // return 当前遍历到的点的图片 districts中的icon是图片的url ,当然你可以使用其他方式,总之返回什么 点就显示什么
        return res.value.icon;
      },
      // 设置点的样式 
      style: {
        size: 28,
        //透明度
        opacity: 0.9,
      },
    });
    layer.on("click", function (ev) {
      console.log("点位", ev);
    });
    // 渲染
    layer.render();
  </script>
</html>

在这里插入图片描述

每一个layer中都可以存放多个点,通过layer可以控制点的显隐 点击事件等。
但是有个bug,layer是通过遍历的方式将点渲染到地图上,也就是说如果点坐标相同,后渲染的点会盖住先渲染的点,但是点击事件的触发,他是通过地图的点击事件获取点击的坐标,通过这个坐标遍历点数组判断是否点击到了layer中的点,但它并不是从数组的尾向头遍历,这就导致触发了先渲染的点的点击事件。从视觉上看点击的是最上面的点,触发的却是最下面的点的点击事件

高德地图Android SDK中实现自定义图层,首先需要熟悉SDK提供的API和相关类库。可以通过《高德地图Android SDK自定义图层实现指南》来了解详细的操作步骤和代码示例,这份资源将为你提供从基础到进阶的全面知识,帮助你成功添加透明图片到地图上。 参考资源链接:[高德地图Android SDK自定义图层实现指南](https://wenku.csdn.net/doc/6wo2fi38b7?spm=1055.2569.3001.10343) 具体步骤包括: 1. 初始化地图视图:使用MapView加载地图。 2. 实现TileProvider:自定义一个类实现TileProvider接口,并重写getTile()方法。在此方法中,根据传入的瓦片坐标和缩放级别从本地或远程获取相应的透明图片。 3. 加载透明图片图片可以预先准备好,并存储在服务器上,或者通过网络动态加载。确保图片格式适合地图展示,通常是透明的PNG或JPEG格式。 4. 添加TileOverlay:在得到图片之后,通过MapView的addTileOverlay()方法将图片作为瓦片添加到地图上。 5. 管理图层:可以设置自定义图层的可见性,以及调整加载策略,比如设置缓存机制,以优化性能。 实现自定义图层后,你可以将特定区域的特色标识、实时信息、虚拟元素或数据可视化内容覆盖在基础地图上,从而增强应用的功能性和用户体验。 为了深入理解和掌握高德地图Android SDK中的自定义图层以及其他高级功能,如定位、覆盖物、标记等,建议在解决当前问题后,继续阅读《高德地图Android SDK自定义图层实现指南》。这份资源不仅涵盖了自定义图层的实现,还包括了其他丰富的地图功能,能够帮助你在地图应用开发中持续进步。 参考资源链接:[高德地图Android SDK自定义图层实现指南](https://wenku.csdn.net/doc/6wo2fi38b7?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

鲸渔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值