高德地图2.0适配

聚合篇

问题1:2.0默认不支持自定义marker,需要'AMap.Adaptor'适配器; 备注:1.4.15 聚合叫'MarkerClusterer', 2.0叫'MarkerCluster';

typescript 复制代码
AMapLoader.load({
	plugins: ["AMap.MarkerCluster", 'AMap.Adaptor']
})

问题2: 没有addMarker、removeMarker;且2.0的addData、setData对marker无效; 解决:每次更新的时候创建一个'MarkerCluster' 并把上一个'MarkerCluster'删除

typescript 复制代码
// 如果有就删除
if (curClusterToll && curClusterToll.setData) {
	curClusterToll.setData([]);
	curClusterToll = null;
}
// 创建新的聚合对象
curClusterToll = new (window as any).AMap.MarkerCluster(map, [...yourMarkers], {
 gridSize: 60, // 建议60不然太近的就展不开了
 minClusterSize: 2, 
 maxZoom: 12,
});

问题3:marker第一次加载,视窗内可视的marker的label是居中的,看不见的展开后label全是错位的;

解决:绑定'renderMarker',在显示的时候重新指定一下labe

typescript 复制代码
curClusterToll = new (window as any).AMap.MarkerCluster(map, [...yourMarkers], {
	gridSize: 60, 
	minClusterSize: 2, 
	maxZoom: 12,
	// API 将在绘制每个非聚合点的时候调用这个方法
	renderMarker: (context: any) => {
		/* 重新赋值label,也可以简写			
			context.marker.setLabel({...context.marker.getLabel()})
		*/
		const tmpLabel = context.marker.getLabel()
		context.marker.setLabel({...tmpLabel})
   }
});

Marker篇

问题1:当默认不想显示label,鼠标一上去显示label的时候位置偏移问题;

解决:当鼠标移入时、鼠标移动时添加监听; 备注:目前label会闪一下然后居中显示;比显示位置不对强;

typescript 复制代码
const markerLabel = {
        direction:'top',
        content: `<div class="site_marker_name">
			桃源收费站
		</div>`,
}
// 鼠标移入
marker.on('mouseover', () => {
	marker.setLabel({...markerLabel})
});
// 鼠标在marker中移动
marker.on('mousemove', () => {
	marker.setLabel({...markerLabel})
});
// 鼠标离开隐藏
marker.on('mouseout', () => {
	marker.setLabel({content: ``,})
})

问题2:label单独创建后给marker,渲染后会偏移; 解决: 直接吧label写在marker中

typescript 复制代码
// 1.4.15
let marker = new  (window as any).AMap.Marker({
})
marker.setLabel( {
	direction:'top',
	content: `<div class="site_marker_name">
		桃源收费站
	</div>`,
})
// 2.0调整后
let marker = new  (window as any).AMap.Marker({
	label: {
		direction:'top',
		content: `<div class="site_marker_name">
			桃源收费站
		</div>`,
	}
})

划线工具AMap.MouseTool

问题: 2.0版本无法通过鼠标左键双击和右键单击结束绘制 解决:地图监听鼠标双击和鼠标右键事件

typescript 复制代码
map.on('rightclick', (e: any) => {
       // 结束会议线
       handleEndDrawing();
})
map.on('dblclick', () => {
     // 结束会议线
    handleEndDrawing();
});
const handleEndDrawing = () => {
	mouseTool.close(true);
}
相关推荐
NiceCloud喜云4 小时前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
wordbaby5 小时前
React Native + RNOH:跨页面数据回传的最佳实践与避坑指南
前端·react native
丷丩5 小时前
MapLibre GL JS第22课:查看本地GeoJSON
前端·javascript·map·mapbox·maplibre gl js
Front思6 小时前
AI前端工程师需要具备能力+
前端·人工智能·ai
ZC跨境爬虫8 小时前
跟着 MDN 学CSS day_29:(掌握文本与字体样式的核心艺术)
前端·css·ui·html·tensorflow
李子琪。9 小时前
网络空间安全深度实战:CSRF 漏洞原理剖析与基于 Token 的纵深防御体系构建(全栈实验报告)
前端·安全·csrf
冰暮流星9 小时前
javascript之history对象介绍
前端·笔记
IT_陈寒9 小时前
Vite热更新失灵?你可能漏了这个配置
前端·人工智能·后端
丷丩9 小时前
MapLibre GL JS第19课:实时更新要素
前端·javascript·gis·map·mapbox·maplibre gl js
Mr.Daozhi9 小时前
RAG 进阶实战:跑通 Demo 后我连续翻了 6 次车,逐一修复才真正可用(含 Gradio Web 版)
前端·数据库·langchain·大模型·gradio·rag·科研工具