Mapbox GL基础(九):图标的加载与动画

实际项目中,时常会遇到具体点位以图片的形式展示,Mapbox官网提供很多图片样例,但是为了稳定并且满足原型设计的要求,我们需要将自己本地的图片上传到服务器然后实现加载,下面将对其进行说明。

1.加载服务器上的图标

大致流程为:
1.获取点位的经纬度以及其他的属性信息;
2.将本地图片上传到服务器,注意跨域的配置;
3.构建geojson格式的数据;
4.服务器图片的加载以及添加;
5.数据在地图上加载显示。
具体的代码和展示效果如下所示:

let pointList = [
  {lon:'125.37858',lat:'43.97377',color:'red'},
  {lon:'125.39490',lat:'43.97842',color:'green'},
] 
let picUrl = '图片服务器上的地址'
let jsonData = {
  'type':'FeatureCollection',
  'features':[]
}
pointList.forEach(point => {
  let Feature = {
    type: "Feature",
    geometry: {
      type: "Point",
      coordinates: [parseFloat(point.lon),parseFloat(point.lat)]
    },
    properties:point
  }
  jsonData.features.push(Feature)
})
mapBoxMap.loadImage(picUrl, (error, image) => {
  if (error) throw error;
  if (!mapBoxMap.hasImage('picName')) mapBoxMap.addImage('picName', image);
  mapBoxMap.addSource('pointPicSource', {
    'type': 'geojson',
    'data': jsonData
  });
  mapBoxMap.addLayer({
    'id': 'pointPicLayer',
    'type': 'symbol',
    'source': 'pointPicSource',
    'layout':{
      "icon-image":'picName',
      "icon-allow-overlap": true,
    },
  });
});

点位加载到地图

2.图标颜色的更改

时常会出现点位信息的颜色值(状态值)会有所不同,可能为了明显且美观,显示不同颜色的图片,如果采用加载多张图片的方式,显然不是最好的选择。Mapbox提供了一定的配置,来实现图标颜色的自定义,但是也要注意尽量选择实色且简单的图片文件。代码和效果如下:

if (!mapBoxMap.hasImage('picName')) mapBoxMap.addImage('picName', image,{ sdf: true });
//加入颜色配置
'paint':{
   'icon-color': ['get', 'color']
}

点位图片颜色更改

3.图标实现跳动

为了达到展示效果,时常需要实现选中点位的跳动,大致流程如下:
1.获取第一个跳动点位的经纬度以及其他的属性信息;
2.构建geojson格式的数据;
3.服务器图片的加载以及添加;
4.数据在地图上加载显示;
5.设置定时器,实现点位上下的跳动。
具体的代码和展示效果如下所示:

let jsonDataAnimated = {
  'type':'FeatureCollection',
  'features':[]
}
let FeatureAnimated = {
  type: "Feature",
  geometry: {
    type: "Point",
    coordinates: [parseFloat(pointList[0].lon),parseFloat(pointList[0].lat)]
  },
  properties:pointList[0]
}
jsonDataAnimated.features.push(FeatureAnimated)
mapBoxMap.loadImage(picUrl, (error, image) => {
  if (error) throw error;
  if (!mapBoxMap.hasImage('animatedPoint')) mapBoxMap.addImage('animatedPoint', image,{ sdf: true });
  mapBoxMap.addSource('animatedPointJson', {
    'type': 'geojson',
    'data': jsonDataAnimated
  });
  mapBoxMap.addLayer({
    'id': 'animatedPointJson',
    'type': 'symbol',
    'source': 'animatedPointJson',
    'layout':{
      "icon-image":'animatedPoint',
      "icon-allow-overlap": true,
      "icon-offset": [0, 0],
    },
    'paint':{
      'icon-color': ['get', 'color']
    }
  });
  let nowOffset= [0, 0]
  let jiajian = -4

  let animatedPoint = setInterval(()=>{
    nowOffset= [nowOffset[0],nowOffset[1]+jiajian]
    mapBoxMap.setLayoutProperty('animatedPointJson',"icon-offset",nowOffset)
    if(nowOffset[1] == -20){
      jiajian = 4
    }else if(nowOffset[1] == 0){
      jiajian = -4
    }
  },100)
});

点位跳动

4.根据选取,更改跳动点位

通常情况下,点位的跳动时常与右侧表格进行联动,当右侧选取其他点位时,此时要实现选取点位的跳动,具体实现代码如下

//animatedPoint 为选取点位的信息
let geojsonSource = mapBoxMap.getSource('animatedPointJson');
if(geojsonSource){
  geojsonSource.setData({
    "type": "FeatureCollection",
    "features": [{
      "type": "Feature",
      "properties": animatedPoint,
      "geometry": {
        "type": "Point",
        "coordinates": [ animatedPoint.lon, animatedPoint.lat ]
      }
    }]
  });
}
mapBoxMap.flyTo({
  center:[ animatedPoint.lon, animatedPoint.lat ],
  zoom:17,
})

总结

本文主要针对加载自己服务器的图标、颜色的变化和图标的跳动进行了说明,以后如果遇到新的功能再进行补充,接下来的章节将继续探索Mapbox。
欢迎关注星林社区,文章将同步更新在星林社区中!

Mapbox GL JS是一个基于WebGL的开源地图库,可用于构建交互式、可自定义的地图应用程序。它提供了强大的地图渲染引擎和丰富的地图功能。 首先,Mapbox GL JS具有强大的渲染引擎,可以高效地将地图数据渲染到Web浏览器上。它使用WebGL技术进行硬件加速,可以高效地绘制大量的矢量地图数据。同时,它支持矢量瓦片地图数据,可以以快速且流畅的方式加载和渲染地图。 另外,Mapbox GL JS提供了丰富的地图功能,可以满足不同的需求。它支持多种交互式的地图操作,如缩放、平移和旋转等。还可以添加自定义的标记、地图样式和图层,以及绘制矢量要素和线条等。此外,它还支持地图的地理编码和路径规划功能,方便用户进行地理位置的查询和导航。 Mapbox GL JS还支持地图的自定义样式,可以根据用户的需求进行个性化的地图设计。它提供了丰富的地图样式模板,用户可以根据自己的喜好选择合适的样式,还可以进行样式的自定义修改。用户可以设置地图的背景色、标记的图标和样式、地图图层的颜色和透明度等,以创建出符合自己需求的独特地图样式。 除了以上的功能,Mapbox GL JS还有许多其他的特性。例如,它支持地图数据的分层加载和动态更新,可以根据需要加载不同层级的地图数据,减少数据传输和渲染的负担。还可以进行地图的动画效果和过渡效果的设置,提升用户体验。此外,Mapbox GL JS还支持跨平台的开发,可以在不同的设备和浏览器上进行地图应用程序的开发和部署。 总之,Mapbox GL JS是一个功能强大且灵活的地图库,可以帮助开发者构建出交互式、可自定义的地图应用程序。无论是对于个人使用还是企业开发,它都提供了丰富的功能和灵活的扩展性,是一个值得推荐的技术工具。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值