文章前先直接上图需要实现的效果图,网上高德地图区域掩模的各种混合实现比较少,这里稍微记录一下自己实现过的效果供大家参考;
之前用的是高德地图1.4版本,实现区域掩模及3D效果,但是怎么把每个区域画出来(需求为街道边界也画出来),由于高德地图只有区县数据,所有需要自己再gis服务中抠出数据,数据格式跟geojson一样,
然后用画多边形方法let polygon = new AMap.Polygon({})遍历每个街道geojson;
区域掩盖的城市及区县轮廓实现方法:var district = new AMap.DistrictSearch(opts);district.search("广州市", (status, result) => {}),想画哪个区,直接把广州市改成该区名称即可,例如:"荔湾区";效果如下:
现在基本成型了,但是回到最前面的问题,想要实现每个区数据高亮展示,相对比较麻烦,我这边实现的折线是通过经纬度画的折线,数据展示面板是通过marker点,然后数据塞进去,这里讲一下实现步骤:
1.折线实现,折线是图片的话实现不了地图变大后矢量效果;所以用经纬度画折线
var newpath = [[lng1,lat1],[(lng1+lng2)/2,lat2],[lng2,lat2]];
this.polyline = new AMap.Polyline({
path: newpath,
strokeColor: "#1BACFF",
strokeOpacity: 1,
strokeWeight: 2,
strokeStyle: "solid",
});
map.add(this.polyline);
其中 [lng1,lat1]为该区中心点经纬度,[lng2,lat2]为面板该去区县需要展示位置的经纬度,然后在面板位置new AMap.Marker()一个点位,icon属性置空;在marker点上添加提示数据:
areaMarker.setLabel({
offset: new AMap.Pixel(20, 20), //设置文本标注偏移量
content: ‘我是XX区的数据’,
direction: "right", //设置文本标注方位
});
加上高亮的代码实现let polygon = new AMap.Polygon({})这是new出来的多边形,
Polygon.setOptions({
fillOpacity: 0.28,
fillColor: "#004EB7",
});设置了对应的高亮;这里只要透明度跟初始化地图时候的不一样即可实现高亮;
基本实现,现在实现自动轮播,那就需要写个自动轮播函数即可,
例如:
定时器
dingshiqi(){
var timer = null
clearInterval(timer)
timer = setInterval(() => {
定时器
},3000)
return timer
}
备注:这里有个问题,由于面板展示需要在区域掩模外面,使用高德地图1.4版本时候,超出区域掩模的都被隐藏,所以最后选用2.0版本才能正常展示,但是2.0版本又不支持添加3D高度面wall。