百度地图jsAPI使用总结(四)散点地图之mapv

百度地图jsAPI使用总结(四)散点地图之mapv

在之前一篇说过echarts在结合百度地图做散点图,在数据量比较大的时候页面会非常的不流畅(大概1000+就不太行了),虽然百度地图api中可以利用BMap.PointCollection()加载海量点,但是如果有需要用颜色来区分数据种类的时候,这个方法就无法满足了。而mapv虽然视觉效果不如echarts,但上述需求却是可以很好的满足的。mapv是开源的,虽然没有什么完备的api文档,但是大家可以通过查看源码的方式来找到自己希望调用的方法。
源码

准备

引入资源

<script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=yourKey"></script>
<script src="http://mapv.baidu.com/build/mapv.js"></script>

开发

mapv图层散点数据格式

var points = [{
	Geometry:{
		//样式为点
		type : "Point",
		//点在地图中的经纬度
		Coordinates: [111.68,29.05] 
	},
	//点填充颜色
	fillStyle : "#00cc66",
	//点大小
	Size : 5
}];

mapv图层散点图配置项

var options1 = {
           draw : 'category',
           size : 3,
           //mapv层绑定方法
           methods : {
               //可以绑定点击方法(不限于点击点,点击其他位置也触发)
               click : function(item){
                   //item:点的信息,点中点的时候有值,否则为空
                   //item的内容是散点数据中全部内容
                   if(item){
                       console.log(item);
                   }
               },
               //鼠标移动事件
               mousemove:function(item){
					if(item){
						console.log(item);
					}
			   }
           }
       };

初始化图层

var dataSet = new mapv.DataSet(points);
var myLayer = new mapv.baiduMapLayer(map,dataSet,options1);

效果
在这里插入图片描述
按照上述代码进行编码就可以实现散点图效果了

mapv一些比较容易被使用到的api

mapv没有api文档,在GitHub上只有比较简略的介绍,在如下总结的api中有一些是我在查看源码的时候发现的方法

  • 图层隐藏
myLayer.hide()
  • 图层显示
myLayer.show()
  • 修改配置项
    参数的格式是object.options={/要修改的配置项/}
myLayer.update({
	options:{}
});
  • 重置配置项
    如果在原有的配置项上有追加的配置项,或者是删减一些配置项,应当使用setOptions方法
myLayer.setOptions({
	size:12
	//....配置项
});
  • 图层销毁
myLayer.destroy();
//这个方法的实现是myLayer.hide();myLayer.unbindEvent();unbindEvent()方法作用是解绑图层事件
  • 激活被销毁的图层
myLayer.show();
myLayer.bindEvent();
  • 刷新数据
    当散点数据有变化的时候可使用如下方法
dataSet.set(points);

mapv实现迁徙图效果

效果图
在这里插入图片描述

  • 实现原理
    这种迁徙图效果是由三个mapv图层叠加实现的
    这三个图层分别为端点,弧线,弧线上发光线
    实现代码如下

  • 端点图层

var pointData = [{
	geometry:{
		type: 'Point',
		coordinates:[/*经度*/,/*纬度*/]
		}
	}];
var pointOptions = {
                    shadowColor: 'rgba(55, 50, 250, 0.5)',
                    shadowBlur: 10,
                    size: 5,
                    zIndex: 10,
                    draw: 'simple',
                    fillStyle : 'green'
                };
var specialPointDataSet = new mapv.DataSet(pointData);                
var specialPointLayer = new mapv.baiduMapLayer(map, specialPointDataSet, pointOptions);                
  • 弧线图层
var fromCenter = {lng:/*经度*/,lat:/*纬度*/};//起始点
var toCenter = [lng:/*经度*/,lat:/*纬度*/];//终止点
//curve为弧线数据,其本质是点的数组
var curve = mapv.utilCurve.getPoints([fromCenter, toCenter]);
var lineData = [];
lineData.push({
                strokeStyle : 'blue',
                geometry: {
                    type: 'LineString',
                    coordinates: curve
                },
                count: 30 * Math.random()
            });
var lineDataSet = new mapv.DataSet(lineData);
var lineOptions = {
                 shadowColor: 'rgba(255, 250, 50, 1)',
                 shadowBlur: 20,
                 lineWidth: 2,
                 zIndex: 100,
                 draw: 'simple'
             }
var lineLayer = new mapv.baiduMapLayer(map, lineDataSet, lineOptions);            
  • 发光线图层
    发光线的实现本质是一组依次闪烁的点组成的
var timeData = [];
var curve = mapv.utilCurve.getPoints([fromCenter, toCenter]);
for (j = 0; j < curve.length; j++) {
     timeData.push({
         geometry: {
             type: 'Point',
             coordinates: curve[j]
         },
         count: 1,
         time: j
     });
 }
var timeDataSet = new mapv.DataSet(timeData);
var timeOptions = {
               fillStyle: 'rgba(255, 250, 250, 0.5)',
               zIndex: 200,
               size: 2.5,
               animation: {
                   type: 'time',
                   stepsRange: {
                       start: 0,
                       end: 50
                   },
                   trails: 10,
                   duration: 2,
               },
               draw: 'simple'
           }
var timeMapvLayer = new mapv.baiduMapLayer(map, timeDataSet, timeOptions);
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Vue.js是一个用于构建用户界面的开源JavaScript框架,可以简化开发过程并提高开发效率。百度地图JS API是百度地图提供的一套JavaScript API,可以在网页中集成地图功能。轨迹回放是指根据已经记录的轨迹数据,将轨迹在地图上以动画的形式重新播放出来。 在Vue中使用百度地图JS API进行轨迹回放,首先需要在Vue项目中引入百度地图的JS文件,并在Vue实例的mounted钩子函数中初始化地图。 在获取到轨迹数据后,可以使用百度地图提供的Polyline类创建一个折线对象,并将轨迹点添加到折线对象中。然后使用地图的addOverlay方法将折线对象添加到地图上,实现轨迹的显示。 为了实现轨迹的回放效果,可以使用Vue的定时器函数setInterval来定时改变折线对象的显示范围,从而实现轨迹的动画效果。可以通过设置折线对象的路径切片来控制每次显示的轨迹点数量,并随着时间的推移逐渐增加显示的点数,从而实现回放效果。 同时,为了提高回放的流畅度和体验,可以使用百度地图提供的动画效果类Effect来给轨迹点添加动画效果,比如平滑移动、旋转等,使得轨迹回放更加真实。 总而言之,利用Vue和百度地图JS API,可以很方便地实现轨迹回放功能。通过初始化地图、创建折线对象、定时改变折线对象的显示范围,再加上动画效果的设置,就能够实现一个带有回放功能的轨迹展示页面。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值