百度地图lite api 是专门为h5 绘制海量点设计的,但是偏偏忽略掉了点聚合的需求,所以需要自己动手,做一次二次改造。

我们知道点聚合需要引入开源库:

MarkerClusterer:  http://api.map.baidu.com/library/MarkerClusterer/1.2/src/MarkerClusterer.js

TextIconOverlay: http://api.map.baidu.com/library/TextIconOverlay/1.2/src/TextIconOverlay.js

由于是开源库,我们可以直接把代码撸下来保存直接放到自己的业务里使用

我们在  MarkerClusterer  addMarkers的时候浏览器会报错,

是因为lite api中的map对象及bounds对象缺乏两个方法:

map.getDistance  及   bounds.containsPoint

getDistance方法是计算两个点之间的直线距离,返回数值为米,这个方法网上就有

1 const EARTH_RADIUS = 6378137.0;2 const {PI} =Math;3

4 functiongetRad(d){5 return d*PI/180.0;

6 }7

8 functiongetDistance(start,end){9 let lat1 = +start.lat;10 let lat2 = +end.lat;11 let lng1 = +start.lng;12 let lng2 = +end.lng;13 if(lat1==lat2 && lng1 ==lng2){14 return 0;15 }16 let f = getRad((lat1 + lat2)/2);

17 let g = getRad((lat1 - lat2)/2);

18 let l = getRad((lng1 - lng2)/2);

19 let sg =Math.sin(g);20 let sl =Math.sin(l);21 let sf =Math.sin(f);22 let s,c,w,r,d,h1,h2;23 let a =EARTH_RADIUS;24 let fl = 1/298.257;

25 sg = sg*sg;26 sl = sl*sl;27 sf = sf*sf;28 s = sg*(1-sl) + (1-sf)*sl;29 c = (1-sg)*(1-sl) + sf*sl;30 w = Math.atan(Math.sqrt(s/c));

31 r = Math.sqrt(s*c)/w;

32 d = 2*w*a;33 h1 = (3*r -1)/2/c;34 h2 = (3*r +1)/2/s;35 return d*(1 + fl*(h1*sf*(1-sg) - h2*(1-sf)*sg));36 }

我们把这个方法赋到map对象上

1 var MarkerClusterer = function(map, options) {2 if (!map) {3 return;4 }5 map.getDistance = getDistance; //这里

6 this._map =map;7 this._markers =[];8 this._clusters =[];9

10 var opts = options ||{};11 this._gridSize = opts["gridSize"] || 60;12 this._maxZoom = opts["maxZoom"] || 18;13 this._minClusterSize = opts["minClusterSize"] || 2;14 this._isAverageCenter = false;15 if (opts['isAverageCenter'] !=undefined) {16 this._isAverageCenter = opts['isAverageCenter'];17 }18 this._styles = opts["styles"] ||[];19

20 var that = this;21 this._map.addEventListener("zoomend", function() {22 that._redraw();23 });24

25 this._map.addEventListener("moveend", function() {26 that._redraw();27 });28

29 var mkrs = opts["markers"];30 isArray(mkrs) && this.addMarkers(mkrs);31 };

map对象就补齐了

containsPoint 是计算点是否在bounds给定的区域中,这个更简单

1 var getExtendedBounds = function(map, bounds, gridSize) {2 bounds =cutBoundsInRange(bounds);3 var pixelNE =map.pointToPixel(bounds.getNorthEast());4 var pixelSW =map.pointToPixel(bounds.getSouthWest());5 pixelNE.x +=gridSize;6 pixelNE.y -=gridSize;7 pixelSW.x -=gridSize;8 pixelSW.y +=gridSize;9 var newNE =map.pixelToPoint(pixelNE);10 var newSW =map.pixelToPoint(pixelSW);11 let nb = newBMap.Bounds(newSW, newNE);12 //写在这里

13 nb.containsPoint = function(point){14 var lat =point.lat;15 var lng =point.lng;16 if(!point || !point.lat || !point.lng){17 return false;18 } else{19 return lat>this._swLat && lat < this._neLat && lngthis._swLng;20 }21 }22 returnnb;23 };

至此MarkerClusterer 改造完毕

然后是改造TextIconOverlay

由于lite api 返回的MarkerPane

1 TextIconOverlay.prototype.initialize = function(map) {2 this._map =map;3

4 this._domElement = document.createElement('div');5 this._updateCss();6 this._updateText();7 this._updatePosition();8

9 this._bind();10 //将markerMouseTarget 替换成markerPane

11 this._map.getPanes().markerPane.appendChild(this._domElement);12 return this._domElement;13 };

这样就可以了

百度地图点聚合功能php,百度地图js lite api 支持点聚合相关推荐

  1. 类似百度输入框自动联想功能遇到的问题:Opera浏览器不支持拼音输入法时的keyup事件

    这个问题也许很多人都遇到过了,在百度能搜到很多遇到相同问题的人,但解决办法都是一个(下面是载自其他网页): [ 问题ZcT345站长站 在开启输入法的情况下,三个浏览器的具体问题如下:ZcT345站长 ...

  2. php地图找房代码,地图搜租房功能实现

    这次给大家带来地图搜租房功能实现,地图搜租房功能实现的注意事项有哪些,下面就是实战案例,一起来看一下. layout: post title: 半个小时教你写一个毕设之地图搜租房 category: ...

  3. 疫情地图 | EXCEL制作疫情风险地地图

    本案例演示使用[小O地图EXCEL版]制作疫情风险地图. 本示例主要执行步骤 1.使用[地图任务]功能,将风险地址转换为经纬度坐标 2.使用[地图绘图]功能,标注风险地址至地图上 3.使用[地图可视化 ...

  4. 百度地图点聚合功能如何提高性能

    点聚合提高加载效率 百度示例上面的点聚合功能加载到一万个点就有点卡了,下面进入代码部分 map_juhe.html <!DOCTYPE html> <html lang=" ...

  5. 每天导航超4亿公里,百度地图整合AI功能

    9月19日,百度地图召开"AI出行更简单 百度地图十一全民畅行节"发布会上.百度地图在AI技术平台体系(AIG)内,越来越深度地与AI结合,更加顺畅地为百度地图进行定制化AI,同时 ...

  6. 推荐百度地图的新功能--“三维”

    强烈推荐百度地图的新功能:"三维".三维比普通二维平面地图生动,比实际的卫星图漂亮,很有玩虚拟城市游戏的感觉.最关键的是:在"三维"地图里,所有的建筑物的形状都 ...

  7. android 百度地图 在线建议查询,Android 百度地图 SDK v3_3_0 (五) ---POI搜索和在线建议查询功能...

    目前百度地图SDK所集成的检索服务包括:POI检索.公交信息查询.线路规划.地理编码.在线建议查询.短串分享. 本篇博客将先介绍POI检索和在线建议查询(在地图地位功能基础上实现的,还不知道定位的童靴 ...

  8. 百度地图开发-检索功能

    转载请注明作者. 注:本人在找工作,地点在北京. 百度地图SDK开发(三)检索功能 目前百度地图SDK所集成的检索服务包括:POI检索.公交信息查询.线路规划.地理编码.行政区边界数据检索.在线建议查 ...

  9. java安卓百度地图查找便利店_Android 百度地图POI搜索功能实例代码

    在没介绍正文之前先给大家说下poi是什么意思. 由于工作的关系,经常在文件中会看到POI这三个字母的缩写,但是一直对POI的概念和含义没有很详细的去研究其背后代表的意思.今天下班之前,又看到了POI这 ...

最新文章

  1. 《SpringBoot揭秘:快速构建微服务体系》—第2章2.4节本章小结*
  2. 大数据开发上岗基本要求
  3. java虚拟机MyEclipse_Eclipse和MyEclipse运行环境java虚拟机jvm设置,自己设置jre
  4. Memcache安装 2
  5. 单位人勾心斗角,我是老实人该怎么办?
  6. [网络安全自学篇] 九十三.《Windows黑客编程技术详解》之木马开机自启动技术(注册表、计划任务、系统服务)
  7. vue中echarts3d 使用(3d地图上有柱状图数据,吉林省)
  8. 最基本财务基础知识,财务知识基础
  9. hotmail邮箱设置
  10. [Vulkan教程]概述
  11. 一张图解释什么是遗传算法_通俗易懂地解释遗传算法
  12. 比较好的Java 网站
  13. 公司被收购以后,我怎么办?
  14. 20190121——不羡神仙 Java设计模式
  15. SystemVerilog中随机的constrain语法
  16. python spss,有没有一个Python模块打开SPSS文件?
  17. 期末前端web大作业:用DIV+CSS技术设计的动漫网站——关于我转生成史莱姆这件事 6页
  18. 【AI科幻】地球陨落·准备
  19. 用VScode做vue开发好用的小工具(推荐)
  20. 赶紧自查这个插件!黑客可能远程控制你的谷歌浏览器

热门文章

  1. 字节、字、bit、bite的关系
  2. linux7创建vsftp服务器,Centos 7 FTP(vsftp)服务安装及配置
  3. HyperLynx(二十五)电源完整性之直流压降分析(二)
  4. sql中完全依赖,部分依赖,传递依赖关系
  5. LVT, RVT(SVT, NVT), HVT 的区别
  6. R语言Bootstrap、百分位Bootstrap法抽样参数估计置信区间分析通勤时间和学生锻炼数据
  7. 虚拟机服务器校园网访问设置,配置VMware虚拟机用绕过校园网达到无线上网配置方法...
  8. 通过游戏策划阶段防治游戏外挂(超长)
  9. Google 百度 图标收藏(三)
  10. 部署(Discuz!论坛系统) 建论坛库