在开发中使用到了百度地图进行开发,用于展示企业位置。由于数据量庞大,如果使用marker,将会造成界面卡顿,处理慢的问题。

在查看百度地图API示例是发现了海量点这个东西,还别说对于大数量的点加载起来也很快。于是就使用海量点进行开发。

但是从demo中仅能获取到点击坐标的经度、纬度。无法再获取到其他信息,用户自定义的数据也不行。

于是从万能的网上寻求解决办法,有位朋友的解决方式是获取到经度、纬度之后,通过经度和纬度循环比对,找出自己的用户数据,也算是一种解决方案。但是这种方案的弊端非常明显,首先如果数据量巨大,循环需要花费大量的时间。其次对于位置相同的点,无法区分到底是哪条数据。

后来去官方论坛上,发现好多人也遇到了这个问题,并且暂时还没有解决方案,版主基本的回答是暂时还没有、不可以...

后来在无意的试验中找到了解决方法,废话少说,上代码!

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <title>加载海量点</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
  7. <style type="text/css">
  8. html,body{
  9. margin:0;
  10. width:100%;
  11. height:100%;
  12. background:#ffffff;
  13. }
  14. #map{
  15. width:100%;
  16. height:100%;
  17. }
  18. #panel {
  19. position: absolute;
  20. top:30px;
  21. left:10px;
  22. z-index: 999;
  23. color: #fff;
  24. }
  25. #login{
  26. position:absolute;
  27. width:300px;
  28. height:40px;
  29. left:50%;
  30. top:50%;
  31. margin:-40px 0 0 -150px;
  32. }
  33. #login input[type=password]{
  34. width:200px;
  35. height:30px;
  36. padding:3px;
  37. line-height:30px;
  38. border:1px solid #000;
  39. }
  40. #login input[type=submit]{
  41. width:80px;
  42. height:38px;
  43. display:inline-block;
  44. line-height:38px;
  45. }
  46. </style>
  47. <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script>
  48. <script type="text/javascript" src="http://developer.baidu.com/map/jsdemo/data/points-sample-data.js"></script>
  49. </head>
  50. <body>
  51. <div id="map"></div>
  52. <script type="text/javascript">
  53. var map = new BMap.Map("map", {});                        // 创建Map实例
  54. map.centerAndZoom(new BMap.Point(105.000, 38.000), 5);     // 初始化地图,设置中心点坐标和地图级别
  55. map.enableScrollWheelZoom();                        //启用滚轮放大缩小
  56. if (document.createElement('canvas').getContext) {  // 判断当前浏览器是否支持绘制海量点
  57. var points = [];  // 添加海量点数据
  58. for (var i = 0; i < data.data.length; i++) {
  59. var p = new BMap.Point(data.data[i][0], data.data[i][1]);
  60. p.data = "http://blog.csdn.net/wang_song_yan";
  61. points.push(p);
  62. }
  63. var options = {
  64. size: BMAP_POINT_SIZE_SMALL,
  65. shape: BMAP_POINT_SHAPE_STAR,
  66. color: '#d340c3'
  67. }
  68. var pointCollection = new BMap.PointCollection(points, options);  // 初始化PointCollection
  69. pointCollection.addEventListener('click', function (e) {
  70. //alert('单击点的坐标为:' + e.point.lng + ',' + e.point.lat);  // 监听点击事件
  71. alert(e.point.data);
  72. });
  73. map.addOverlay(pointCollection);  // 添加Overlay
  74. } else {
  75. alert('请在chrome、safari、IE8+以上浏览器查看本示例');
  76. }
  77. </script>
  78. </body>
  79. </html>

上面的代码源自官方API示例,我在BMap.Point对象里面加了一个data属性,然后在点击事件中获取到BMap.Point对象,然后取出它的data数据。执行效果如下:

其中data属性仅仅是作为测试用,您可以存任何你想存放的数据。

最新文章

  1. 工厂模式 - Factory
  2. Android 摇一摇 之 震动片
  3. 多表利用DIH批量导入数据并建立索引注意事项
  4. Android WIFI 操作
  5. 实验吧_密码忘记了(vim编辑器+代码审计)&amp;天网管理系统(php弱比较+反序列化)
  6. Linux提权:从入门到放弃
  7. 使用 redis-dump 批量导入导出数据
  8. JavaScript的cookie和sessionStorage 、localStorage
  9. 解决css3不支持同时缩放和旋转的办法
  10. hdu 2433 Travel
  11. 处理内容有&amp;特殊字符thinkphp返回xml无法解析的问题&lt;![CDATA[xxx]]&gt;
  12. 大数据平台的技术演化之路 诸葛io平台设计实例
  13. js,jsp里将数据库Date类型获取出来后格式化显示于界面
  14. JQuery可以轻松实现数字框
  15. Working out
  16. 【vps搬家】--总结--费元星
  17. CentOS7下php安装mcrypt扩展
  18. Spring入门案例 idea创建Spring项目
  19. 10.11cdy考试题
  20. 目标检测之vibe---ViBe(Visual Background extractor)背景建模或前景检测

热门文章

  1. android:logo
  2. elasticsearch入门使用(一)es 6.2.2安装,centos 7
  3. Windows下,RabbitMQ安装、卸载以及遇到的坑
  4. 前端跨域调请求 nginx反向代理
  5. python多线程(一)
  6. MyReport报表引擎1.2.0.1新功能
  7. xgboost原理及并行实现
  8. memcache的学习路线图
  9. android studio——Could not find method externalNativeBuild()
  10. 怎样查询锁表的SQL