高德地图api2.0点聚合及点标记事件

这篇具有很好参考价值的文章主要介绍了高德地图api2.0点聚合及点标记事件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在使用高德地图API的过程中,发现2.0版本的点聚合和之前版本的使用上有很大的区别,在此做一下点聚合的使用以及点标记的事件的记录。

在2.0之前的版本,MarkerClusterer插件的使用如下:

new AMap.MarkerClusterer(
    //地图实例对象
    map:Map,  
    //marker类构造对象
    markers:Array<Marker>,    
    //点聚合属性,具体可查阅https://lbs.amap.com/api/javascript-api/reference/plugin#AMap.MarkerClusterer
    opts:MarkerClustererOptions 
)

而2.0版本对MarkerClusterer进行了改动

new AMap.MarkerClusterer(
    //地图实例对象
    map:Map,  
    //经纬度数组对象
    dataOptions:Array   
    //点聚合属性
    markerClusterOptions:Object 
)

dataOptions:[
    {
        weight: Number, //权重(可选)以权重高的点为中心进行聚合
        lnglat: Array //经纬度数组 string[] | number[]
    }
]

在2.0版本中,markerClusterOptions去掉了minClusterSize 集合的最小数量,zoomOnclick 点击聚合点时是否散开;对renderClusterMarker属性进行了修改,去掉了renderClusterMarker:function的markers属性;新增了renderMarker: function 用于实现非聚合点的自定义设置

new AMap.MarkerClusterer(map, marker, { 
    gridSize: number, //聚合计算时网格的像素大小,默认60
    //minClusterSize 聚合的最小数量(已弃用)
    maxZoom: number, //最大聚合级别,超出级别不进行聚合,默认18
    averageCenter: boolean, //聚合点的图标位置是否是所有聚合内点的中心点,默认true,如果有权重则以权重高的为中心进行聚合
    clusterByZoomChange: boolean, //地图缩放过程中是否聚合,默认false
    styles: Array<Object>, //聚合后点标记样式
    //styles包含以下属性
        //url{string} (必选)图标的url地址
        //size{AMap.Size} (必选)图标的图片大小
        //offset{AMap.Pixel} (可选)图标相对于左上角的偏移量
        //imageOffset{AMap.Pixel} (可选)图片在可视区域的偏移量
        //textColor{String} (可选)文字颜色,默认#000000
        //textSize{Number} (可选)文字大小,默认10
    renderClusterMarker: (cluster: any) => {
        cluster.count //当前聚合点下marker的数量
        cluster.marker //当前聚合点的marker对象
    },
    renderMarker: (context: any) => {
        context.marker //非聚合点的marker对象
    }
    //zoomOnClick 点击聚合点时是否散开(已弃用)
})        

点聚合及点标记的鼠标移入、移出、点击效果的实现(只提供思路,不进行数据效果实现)文章来源地址https://www.toymoban.com/news/detail-649886.html

const markerData: any[] //获取的标记坐标等信息
const markers: [{
    weight: number, //权重
    lnglat: number[] | string [], //经纬度
    extData:object //其他需要传递的信息,如id、name等
}] = [] 

markerData.map((item: any) => {
    markers.push({
        weight: item.weight,
        lnglat: [item.lon, item.lat],
        extData: {
            id: item.id,
            icon: url,
            markerIcon: url
        }
    })
})

const clu = new AMap.MarkerClusterer(map, markers, {
    //聚合点自定义样式交互
    renderClusterMarker: (cluster: any) = {
        //marker点标记API
        //自定义聚合样式
        //cluster.data[0].extData可获取到传入的其他数据
        cluster.marker.setAnchor('bottom-center');
        cluster.marker.setIcon(new AMap.Icon({ image: cluster.data[0].extData.markerIcon }));
        cluster.marker.setLabel({
            content: `<span style="cursor: pointer;">${cluster.count}</span>`,
            direction: 'center',
            offset: new AMap.Pixel(0, -5),
        })
        //添加鼠标移入放大效果
        cluster.marker.on('mouseover', () => {
            cluster.marker.setIcon(
                new AMap.Icon({
                    image: cluster.marker.getIcon()._opts.image,
                    size: new AMap.Size(40, 50), //根据image分辨率计算放大后尺寸
                    imageSize: new AMap.Size(40, 50),
                }),
            );
            cluster.marker.setLabel({
                content: `<span style="cursor: pointer;font-size: 20px;">${cluster.count}</span>`,
                direction: 'center',
                offset: new AMap.Pixel(0, -5),
            });
        });
        //鼠标移出还原
        cluster.marker.on('mouseout', () => {
            cluster.marker.setIcon(
                new AMap.Icon({
                    image: cluster.marker.getIcon()._opts.image,
                    size: new AMap.Size(32, 40),
                    imageSize: new AMap.Size(32, 40),
                }),
            );
            cluster.marker.setLabel({
                 content: `<span style="cursor: pointer;">${cluster.count}</span>`,
                 direction: 'center',
                 offset: new AMap.Pixel(0, -5),
            });
        });
    },
    //非聚合点自定义样式交互
    renderMarker: (context: any) => {
        context.marker.setAnchor('bottom-center');
        context.marker.setOffset(new AMap.Pixel(0, 0));
        context.marker.setIcon(new AMap.Icon({ image: context.data[0].extData.markerIcon }));
        context.marker.setLabel({
            content: `<img src=${context.data[0].extData.icon} style="cursor: pointer;" />`,
            direction: 'center',
            offset: new AMap.Pixel(0, -5),
        });
        //鼠标移入移出同上,不再重复
        //marker鼠标点击事件
        context.marker.on('click', () => {
            const params = context.data[0].extData;
            console.log(params.id) //id
        });
    }
})
//添加聚合点点击事件
clu.on('click', (data: any) => {
    //判断是否是聚合点,不是聚合点就执行单个点击方式
    if (data.clusterData.length <= 1) return;
    //计算所有聚合点的中心点
    let alng = 0,
        alat = 0;
    for (const m of data.clusterData) {
        alng += m.lnglat.lng;
        alat += m.lnglat.lat;
    }
    const lat = alat / data.clusterData.length;
    const lng = alng / data.clusterData.length;
    //以中心点固定倍数放大地图,达到展开聚合点的效果
    map.setZoom(10);
    map.setCenter([lng, lat]);
});

到了这里,关于高德地图api2.0点聚合及点标记事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 高德地图自定义图标的点标记Marker--初体验(二)

    本文以Marker为主,其他点标记方法大差不差 通过上两篇文章我们已经了解到如何引入高德地图并进行初始化了,本文主要讲解普通 点标记Marker ,Marker 类型推荐在数据量为 500 以内时使用。若数据量大于 500 ,推荐使用 LabelMarker 海量点 , 官方Marker说明文档 vue引入高德地图多种

    2023年04月08日
    浏览(27)
  • vue对高德地图的简单使用:点击标记并获取经纬度和详细地址

    目录 第一步:先按部就班,进入高德开放平台,跟着步骤注册账号,创建应用 第二步:用npm下载包,初始化地图 第三步:实现点击地图添加标记 第四步:点击获取详细地址 第五步:搜索获取相关地区提示 第六步:全部代码(把密钥和key替换可直接运行)   高德地图有AP

    2024年02月06日
    浏览(42)
  • 141:vue+leaflet 利用高德逆地理编码,点击地图标记marker,popup地址信息

    第141个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中利用高德逆地理编码,点击地图标记marker,popup地址信息 。主要利用高德地图的api将坐标转化为地址,然后在点击的位置,弹出弹窗,在里面显示出地址信息。 直接复制下面的 vue+leaflet源代码,操作2分钟即

    2024年01月24日
    浏览(34)
  • vue 高德地图 —— 点标记、信息弹窗、网页导航、获取经纬度及当前城市信息

    新建 components/amap.vue 文件,封装高德地图组件: 接下来,在需要使用的组件中引入 amap.vue :

    2023年04月15日
    浏览(47)
  • 高德地图js api

    官网:开发 | 高德地图API vue-amap 基于vue的高德地图:组件 | vue-amap 注意事项:地图盒子一定要有宽高!!!!! 在项目中安装 default-passive-events,并引入 main.js 中, 这个包的作用是通过添加 passive,来阻止 touchstart 事件,让页面更加流畅。 事件使用 ***.on(‘事件名比如:(cli

    2024年02月04日
    浏览(34)
  • Vue 高德地图(@amap/amap-jsapi-loader)的基本使用:添加标记、POI关键字搜索、路线规划...(方法一)

    具体的步骤可以参考我的上一篇博客,有详细说明如何注册申请高德的Key、秘钥,初始化地图等等 vue-amap : vue-amap 基于 Vue 2.x 与高德的地图组件 高德官方介绍:地图 JS API Web服务API简介 高德Web服务API向开发者提供HTTP接口,开发者可通过这些接口使用各类型的地理数据服务,

    2024年01月18日
    浏览(39)
  • 申请高德地图API【流程记录】

    现在我们需要使用高德地图的api进行功能的实现,这就需要我们申请一个高德地图的key 1.进入官网 登录账号 点击高德开放平台 | 高德地图API (amap.com)。进行登录 选择控制台 注册为开发者 填写邮箱获取验证码后,进行支付宝扫码进行实名认证 注册完成 点击确认即可 2.申请

    2024年01月17日
    浏览(29)
  • 高德API JS 高德地图获取多个坐标点的中心点

    我需要: 在地图上展示多个地点 地图缩放到合适的大小,要求刚好能显示全部点位 边缘留有一部分间隔。 做成如图所示这样。 经过一下午的研究,弄出来了。 需要以下这些 AMap 的类库: AMap.Bounds() 区域 AMap.LngLat() 点坐标(基础点位) AMap.setBounds() 设置地图区域,这会自动

    2024年02月07日
    浏览(36)
  • Vue3+Vite连接高德地图JS API——地图显示、输入搜索

    1、进入高德地图API官网(https://lbs.amap.com/): 2、注册登录。 3、进入控制台。 4、点击“应用管理”,点击“我的应用”,创建新应用。 5、添加Key,服务平台选择“Web端(JS API)”,白名单不要填写,勾选阅读并同意。 点击提交后,就能看到Key已经生成,记住这里的Key和安

    2024年01月17日
    浏览(34)
  • uniapp上高德(百度)地图API的使用(APP安卓)

    前言 由于在app中没有document,window等对象,所以使用在pc端传统方法引入的方式,将会发现无法引用成功,会出现白屏现象。 目前有两种解决方式: 使用uniapp的web-view方式(百度地图) 使用renderjs来调用document等js对象(高德地图) map.vue: 中间实时显示地图上图标的个数,以及

    2023年04月10日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包