谷歌地图中经纬度相同的多个标记如何全部正常显示?
谷歌地图同经纬度标记重叠无法全部展示的解决方法
该问题本质不是谷歌地图未渲染重复经纬度的标记,而是坐标完全一致的标记会在图层上完全重叠,仅最后渲染、层级最高的标记可见,其余标记都被遮挡在下层。
你可以根据业务场景选择以下任意一种解决方案:
- 方案1:微小坐标偏移拆分
对经纬度重复的点位添加极微小的坐标偏移,偏移量控制在0.00001~0.00005度之间,对应实际距离误差仅为1~5米,几乎不会影响位置的准确性,同时可以让重叠的标记错开显示。
参考实现代码:// 先按经纬度对原数组分组 const locationGroup = new Map(); originalData.forEach(item => { const posKey = `${item.latitude}-${item.longitude}`; if (!locationGroup.has(posKey)) { locationGroup.set(posKey, []); } locationGroup.get(posKey).push(item); }); // 生成带偏移的标记渲染数据 const renderMarkerList = []; locationGroup.forEach((itemList, posKey) => { const [baseLat, baseLng] = posKey.split('-').map(Number); itemList.forEach((item, idx) => { // 仅对重复的条目添加偏移,首个条目保留原坐标 const offsetLat = idx > 0 ? baseLat + idx * 0.00001 : baseLat; const offsetLng = idx > 0 ? baseLng + idx * 0.00001 : baseLng; renderMarkerList.push({ ...item, latitude: offsetLat, longitude: offsetLng }); }); }); - 方案2:同位置聚合标记
统计每个经纬度对应的条目数量,同位置仅生成1个标记,在标记图标上标注该位置的条目总数,用户点击标记后弹窗展示所有对应条目的详细信息,适合重复点位较多的场景。 - 方案3:信息窗内容合并
提前按经纬度对数组做分组,每个经纬度对应所有匹配的条目,生成标记时每个经纬度仅创建1个标记,点击标记弹出的信息窗内列出该位置所有条目的信息,无需创建多个重叠标记。
内容的提问来源于stack exchange,提问作者Sai Charan
相关产品推荐
相关产品推荐

