高德地图绘制两个marker 并且连线,点击拖拽marker 时及时更新连线,但是点击marker,也会存在小的偏移,此bug如何解决,请给出完整demo
时间: 2024-09-26 08:07:44 浏览: 80
在高德地图上绘制两个Marker并添加连线并实现实时更新,当用户点击并拖动Marker时,可以通过监听`AMap.event.MOVE`事件以及`AMap.event.CLICK`事件来处理。关于Marker的小偏移问题,这通常是由于地图缩放、位置计算等细节影响导致的,可以尝试优化地图定位和坐标转换。
以下是一个简单的JavaScript示例,使用了高德地图API:
```javascript
// 初始化地图
var map = new AMap.Map('container', {
zoom: 10,
center: [116.404, 39.915]
});
// 创建第一个Marker
var marker1 = new AMap.Marker({
position: map.getCenter(),
draggable: true,
title: 'Marker 1'
});
map.addMarker(marker1);
// 创建第二个Marker
var marker2 = new AMap.Marker({
position: [116.397, 39.928], // 示例位置
draggable: true,
title: 'Marker 2'
});
map.addMarker(marker2);
// 绘制连线
var line = new AMap.Polyline({
path: [marker1.getPosition(), marker2.getPosition()],
strokeColor: '#FF0000',
clickable: false, // 禁止直接点击线段
draggable: false // 线段不可拖动
});
map.add(line);
// 监听Marker的移动和点击事件
marker1.addEventListener(AMap.event.MOVE, onMove);
marker1.addEventListener(AMap.event.CLICK, onClick);
marker2.addEventListener(AMap.event.MOVE, onMove);
marker2.addEventListener(AMap.event.CLICK, onClick);
function onMove(e) {
var pos1 = e.target.getPosition();
var pos2 = marker2.getPosition();
// 更新连线路径
line.setPath([pos1, pos2]);
// 可在此处添加其他处理,例如计算距离或更新UI
}
function onClick(e) {
// 当点击Marker时,调整其位置,减少小偏移的影响
var targetPos = e.lnglat; // 获取点击位置
e.target.setPosition(targetPos);
onMove({target: e.target}); // 也需要更新连线
}
// 如果实际需求有变化,比如需要处理地图缩放,还需加入额外的判断和处理
```
阅读全文