开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第34天,点击查看活动详情、
信息窗体是我们在地图中常用的特性之一,在点击点位的时候,可以弹出信息窗体,得到点位的具体信息,我们在手机中使用的高德地图,点击某个点,弹出信息,是一样的到底,从官方的
API中能够知道如何添加,但是其并不能添加多个信息窗体,下面我们了解完信息窗体以后来看一下如何实现多个信息窗体~
- 这一篇是本系列第六篇,前五篇大家可以点击链接访问
高德地图jsApi的使用
高德地图jsApi的点和线配置
高德地图jsApi的右键设置
高德地图jsApi的点位新增
高德地图jsApi的图例
完成代码请查看代码仓库
信息窗体
高德地图的信息窗体是描述一个点位信息的图层,我们可以在实例化图形的时候,给对应的点位添加对应的描述信息,需要注意的是,信息窗体和右键菜单不属于同一个类型图层。
- 比如这是官方给我们的一个示例:
我们可以自定义信息窗体内容,也可以直接使用内容的自定义,我们可以在官网的demo中查看其实现的方式,我依照于我之前的项目来进行一个设置,需要实现的效果如下:
可以看到,我们的点位上面有一个窗体,窗体左键点击,弹出,不影响我们之前右键的逻辑,而线上的窗体可以通过右上角关闭,打开以后是直接显示的,正常来讲需要做到点击这条线路,打开线路上的窗体,但是我并没有找到线的点击事件~,大家如果有方案,还请指教哦~ (完整代码可以到代码层库 clone 比对)
-
- 实现点位信息窗体
// 配置信息窗体点击事件 外层代码
var infoWindow = new AMap.InfoWindow({offset: new AMap.Pixel(0, -10)});
function markerClick(e) {
infoWindow.setContent(e.target.contents);
infoWindow.open(map, e.target.getPosition());
}
// 抽离点位信息设置 这段代码是添加在 setMarker 方法中
markerd.contents = `<div>${marker.name}供给点</div><div>出口压力:100kPa</div><div>供给量:10m³</div><div>位置:经度${marker.position[0]},纬度${marker.position[1]}</div><div></div>`;
markerd.on('click', markerClick);
if(marker.name === '新疆'){
// 触发上面的点击事件
markerd.emit('click', {target: markerd});
}
-
- 添加固定窗体信息
- 原理上使用的其实还是新增一个点位,只不过点位用了自定义的
content, 我们把内容设置成为一个窗体就好了 - 这其中右上角的关闭按钮事件,是我们自己添加的,这类其实就是获取我们这个点的实例,然后调用
remove方法即可 - 覆盖物管理官方文档
// 测试点位 代码放在外层
let testP = new AMap.Marker({
map: map,
content:`<a class="amap-info-close" id="testP_btn">×</a><div class="test_container"><div>西宁至乌鲁木齐管段</div>
<div>管径:159mm</div><div>壁厚:8.2mm</div><div>管内径:142.6mm</div>
<div>流量:5km</div><div>起点压力:100kPa</div><div>终点压力:86.2kPa</div><div>流速:17.4m/s</div>
<div>流向:乌鲁木齐至西宁</div></div>`,
position:[93,46]
})
document.getElementById('testP_btn').addEventListener('click',()=>{
map.remove(map.getAllOverlays('marker')[0])
})
// 结尾我们需要把原来的 map.add(polyline) 改成 map.add([...polyline,testP]), 方便我们获取点位对象