HERE Maps JavaScript API集群标记点击取数与禁用自动缩放问题
问题1 统一获取点击数据、区分集群/噪声点
不要依赖data.c.a.data这类压缩后的内部属性,这类属性名会随SDK版本迭代发生变化,兼容性极差。
HERE Maps JS SDK 提供了官方方法可以直接区分两类标记,无需修改现有主题配置:
event.target.getData()返回的结果如果是集群对象,会携带isCluster()方法,调用返回true即为集群标记,返回false或不存在该方法即为噪声点(单个标记)- 集群数据可以通过官方提供的
getPoints()/getChildren()方法获取集群内所有原始数据点,噪声点可以直接获取你存入的原始数据
对应代码实现如下:
clusteredDataProvider.addEventListener('tap', function(event) { const targetData = event.target.getData(); let resultData = []; let isCluster = false; // 官方判断逻辑 if (typeof targetData.isCluster === 'function' && targetData.isCluster()) { isCluster = true; // 获取集群内所有数据点,根据需求拿取对应字段即可 resultData = targetData.getPoints(); } else { isCluster = false; // 噪声点直接返回存入的原始数据 resultData = [targetData.getData()]; } // 这里统一处理气泡展示逻辑,resultData统一为数组格式,集群是多个点,噪声点是单个元素的数组 console.log(isCluster, resultData); });
问题2 禁用集群点击自动缩放
你遇到的跳变缩放问题是SDK的集群Provider默认开启了点击自动缩放至集群范围的特性,当集群内的点地理分布跨度极大时,计算出来的适配缩放等级会和预期不符,出现跳变后回弹的问题,直接在初始化集群Provider的时候关闭该特性即可:
// 初始化H.clustering.Provider时添加zoomOnClick配置项,设为false const clusteredDataProvider = new H.clustering.Provider(YOUR_DATA_POINTS, { // 其他原有配置保持不变,比如theme、eps、minWeight之类的 zoomOnClick: false // 关闭点击自动缩放 });
如果已经初始化完成不想修改初始化配置,也可以在tap事件回调第一行加上event.stopPropagation()阻止默认冒泡触发缩放逻辑即可。
内容的提问来源于stack exchange,提问作者linuxoid
相关产品推荐
相关产品推荐

