在开发web项目的过程中使用到了百度地图,由于要在地图中画出很多点比较影响加载速度,查看官方文档,发现有提供加载海量点的功能BMap.PointCollection,用这个加快速度,但是官方文档中提供的demo中仅能获取到点击坐标的经度、纬度。无法再获取到其他信息,用户自定义的数据也不行。要想在点的点击事件中获取到其他information,思考后有两种解决方案:

**1. 获取到经度、纬度之后,通过经度和纬度,循环原先的数据集进行比对,判断出点中的地图点,从而找出开发者需要的数据。
这种方法在数据集的size适中时可以使用,不会对运行速度有太大的影响,但是弊端非常明显,首先如果数据量巨大,循环需要花费大量的时间,这显然与我们之前想要提升性能相违背。其次有可能出现位置相同的点,那可能会出现得到错误的information。
2. BMap.PointCollection中的元素为BMap.Point, JavaScript是弱类型的,我们可以让BMap.Point在加入到点集合BMap.PointCollection之前携带数据,那么数据会存储到BMap.PointCollection中,在点击这个点是就可得到BMap.Point,从而得到它携带的除经纬度之外的信息数据。 优选此方案
示例:**

重要代码如下:

$(document).ready(function(){// 百度地图API功能 -122.3695400,"olat":47.6646100  116.404, 39.915var map = new BMap.Map("container", {});map.centerAndZoom(new BMap.Point(-122.3695400, 47.6646100), 15);map.enableScrollWheelZoom();$('#show').click (function () {var start_date=$('#start_date').val();var start_time=$('#start_time').val();var end_date=$('#end_date').val();var end_time=$('#end_time').val();var city=$('#daddress').val();var url = "<%=basePath %>data/list";                $.ajax({type: "post",url: url,data: {"start_date":start_date,"start_time":start_time,"end_date":end_date,"end_time":end_time,"city":city},cache: false,async : false,dataType: "json",success: function (data ,textStatus, jqXHR){                       map.centerAndZoom(new BMap.Point(data[0].olon, data[0].olat), 14);map.clearOverlays();       //清除地图上所有覆盖物if(document.createElement('canvas').getContext) { // 判断当前浏览器是否支持绘制海量点var points = []; // 添加海量点数据for(var i = 0; i < data.length; i++) {var point=new BMap.Point(data[i].olon, data[i].olat);point.id = data[i].id;point.otime = data[i].otime;point.dtime = data[i].dtime;point.dlon = data[i].dlon;point.dlat = data[i].dlat;point.distance = data[i].distance;point.ofuel = data[i].ofuel;point.dfuel = data[i].dfuel;point.fuelConsumption = data[i].fuelConsumption;point.oaddress = data[i].oaddress;point.daddress = data[i].daddress;points.push(point);                             }var options = {size: BMAP_POINT_SIZE_BIG,    //BMAP_POINT_SIZE_SMALLshape: BMAP_POINT_SHAPE_STAR,color: '#D84C29'}var pointCollection = new BMap.PointCollection(points, options); // 初始化PointCollectionpointCollection.addEventListener('click', function(e) {// 监听点击事件/*                             var p=e.point;alert('单击点的坐标为:' + p.lng + ',' + p.lat+' \r   '+p.oaddress + ',' + p.daddress+'   ');   */var point = new BMap.Point(e.point.lng, e.point.lat);var opts = {width: 200,     // 信息窗口宽度height: 150,     // 信息窗口高度title: "Title", // 信息窗口标题enableMessage: false//设置允许信息窗发送短息};var infowindow = new BMap.InfoWindow(p.oaddress + ',' + p.daddress, opts);map.openInfoWindow(infowindow, point);}); map.addOverlay(pointCollection); // 添加Overlay} else {alert('请在chrome、safari、IE8+以上浏览器查看');}/*                      if("true"==data.flag){alert("合法!");return true;}else{alert("不合法!错误信息如下:"+data.errorMsg);return false;} */},error:function (XMLHttpRequest, textStatus, errorThrown) {      alert("请求失败!");}});}) ;});

BMap添加海量点数据,BMap.Point携带数据相关推荐

  1. 使用高德地图2D/3D SDK添加海量描点Marker以及视图中显示所有描点、我的定位添加呼吸动画

    高德地图SDK添加海量描点.我的定位呼吸动画 一.添加海量描点 1.高德2D SDK添加实现 1)初始化MarkerOverlay 2)设置海量描点数据 4)Marker点击监听 5)MarkerOv ...

  2. Avue 点击事件触发新增,新增携带数据

    一. 新增按钮设置为false option: {addBtn: false,//设置不显示新增按钮column[{label: "预警类型",prop: "typeId ...

  3. R语言ggplot2可视化:ggplot2可视化时间序列数据并在末尾数据点添加数值标签(number label)

    R语言ggplot2可视化:ggplot2可视化时间序列数据并在末尾数据点添加数值标签(number label) 目录

  4. R语言生成数据及其95%置信区间数据(或者其它区间)、使用geom_ribbon函数为ggplot2图像手动添加置信区间的阴影区域using geom_ribbon to create shaded

    R语言生成数据及其95%置信区间数据(或者其它区间).使用geom_ribbon函数为ggplot2图像手动添加置信区间的阴影区域(using geom_ribbon to create shaded ...

  5. seaborn使用violinplot函数可视化小提琴图、并在violinplot函数中设置inner参数来添加横线(inner=“stick“)显示数据的稠密程度

    seaborn使用violinplot函数可视化小提琴图.并在violinplot函数中设置inner参数来添加横线(inner="stick")显示数据的稠密程度(Seaborn ...

  6. R语言为散点图添加凸包(convex hull):数据预处理(创建一个包含每组数据凸包边界的数据集)、ggplot2使用geom_polygon函数为可视化图像添加凸包(convex hull)

    R语言为散点图添加凸包(convex hull):数据预处理(创建一个包含每组数据凸包边界的数据集).ggplot2使用geom_polygon函数为可视化图像添加凸包(convex hull) 目录

  7. R语言dplyr包为dataframe添加数据列实战( Add Columns):基于mutate()函数添加一个或者多个数据列(尾部添加、头部添加、条件生成、某个具体数据列的前后)

    R语言dplyr包为dataframe添加数据列实战( Add Columns):基于mutate()函数添加一个或者多个数据列(尾部添加.头部添加.条件生成.某个具体数据列的前后) 目录

  8. Python之Pandas:利用pandas实现行数据添加,即将字典格式的数据,按照行数据,从头开始循环添加到dataframe中

    Python之Pandas:利用pandas实现行数据添加,即将字典格式的数据,按照行数据,从头开始循环添加到dataframe中e中 目录 利用pandas实现行数据添加,即将字典格式的数据,按照行 ...

  9. DataContract 添加到 DataContractSet,因为已经存在数据协定名称也为命名空间

    因为我使用了泛型数据合同,使用的名字又是同一个,所以就会报个错误, System.InvalidOperationException: 在调用 WSDL 导出扩展过程中引发异常: System.Ser ...

最新文章

  1. IM消息送达保证机制实现(二):保证离线消息的可靠投递
  2. java 五子棋项目_Java项目如何实现五子棋小游戏
  3. scala 数组合并_Scala程序合并两个数组或数组缓冲区
  4. 腾讯视频怎么打开个人直播后台播放功能
  5. 2天驾驭div+css_老婆竟然只知道几个css伪类,不行得惩罚她了
  6. python中从键盘输入的代码_python如何从键盘获取输入实例
  7. python全栈测试题(一)
  8. do还是doing imagine加to_朗华环保环保管家科普之系列133:关于溶解氧DO,你真正了解吗?...
  9. 深信服SCSA安全工程师题库(方便大家复习备考)
  10. Samsung SSD Magician 4.1三星固态硬盘优化工具官方中文版
  11. 最新微信视频强制分享系统源码+引流裂变分享
  12. linux常见通配符的含义,linux通配符含义
  13. ES3~ES7的数组方法
  14. MySQL中用生日计算年龄
  15. STM32HAL库微秒延时函数的实现---DWT和SysTick
  16. 基于php的校园电影网站系统
  17. Postgresql 按30分钟统计分组
  18. 用PYTHON做一个动态钟表
  19. 电脑进入BIOS界面快捷键是什么
  20. Ubuntu18.04中如何更换为清华的镜像源

热门文章

  1. 枚举算法5——填数游戏
  2. day21组合III电话号码的字母组合
  3. CTR --- FNN原理,及tf2实现
  4. CSP-S 蒟蒻啊qaq
  5. int[]是什么类型?
  6. 218. 天际线问题
  7. ES6中...省略号的意思
  8. 微服务化之无状态化和容器化
  9. cad化工设备绘图_化工CAD制图基础篇,管道布置图学起来
  10. 电脑鸿蒙系统怎么连接无线网络,手提电脑怎样连接WiFi?