百度地图点聚合功能php,百度地图js lite api 支持点聚合
百度地图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 支持点聚合相关推荐
- 类似百度输入框自动联想功能遇到的问题:Opera浏览器不支持拼音输入法时的keyup事件
这个问题也许很多人都遇到过了,在百度能搜到很多遇到相同问题的人,但解决办法都是一个(下面是载自其他网页): [ 问题ZcT345站长站 在开启输入法的情况下,三个浏览器的具体问题如下:ZcT345站长 ...
- php地图找房代码,地图搜租房功能实现
这次给大家带来地图搜租房功能实现,地图搜租房功能实现的注意事项有哪些,下面就是实战案例,一起来看一下. layout: post title: 半个小时教你写一个毕设之地图搜租房 category: ...
- 疫情地图 | EXCEL制作疫情风险地地图
本案例演示使用[小O地图EXCEL版]制作疫情风险地图. 本示例主要执行步骤 1.使用[地图任务]功能,将风险地址转换为经纬度坐标 2.使用[地图绘图]功能,标注风险地址至地图上 3.使用[地图可视化 ...
- 百度地图点聚合功能如何提高性能
点聚合提高加载效率 百度示例上面的点聚合功能加载到一万个点就有点卡了,下面进入代码部分 map_juhe.html <!DOCTYPE html> <html lang=" ...
- 每天导航超4亿公里,百度地图整合AI功能
9月19日,百度地图召开"AI出行更简单 百度地图十一全民畅行节"发布会上.百度地图在AI技术平台体系(AIG)内,越来越深度地与AI结合,更加顺畅地为百度地图进行定制化AI,同时 ...
- 推荐百度地图的新功能--“三维”
强烈推荐百度地图的新功能:"三维".三维比普通二维平面地图生动,比实际的卫星图漂亮,很有玩虚拟城市游戏的感觉.最关键的是:在"三维"地图里,所有的建筑物的形状都 ...
- android 百度地图 在线建议查询,Android 百度地图 SDK v3_3_0 (五) ---POI搜索和在线建议查询功能...
目前百度地图SDK所集成的检索服务包括:POI检索.公交信息查询.线路规划.地理编码.在线建议查询.短串分享. 本篇博客将先介绍POI检索和在线建议查询(在地图地位功能基础上实现的,还不知道定位的童靴 ...
- 百度地图开发-检索功能
转载请注明作者. 注:本人在找工作,地点在北京. 百度地图SDK开发(三)检索功能 目前百度地图SDK所集成的检索服务包括:POI检索.公交信息查询.线路规划.地理编码.行政区边界数据检索.在线建议查 ...
- java安卓百度地图查找便利店_Android 百度地图POI搜索功能实例代码
在没介绍正文之前先给大家说下poi是什么意思. 由于工作的关系,经常在文件中会看到POI这三个字母的缩写,但是一直对POI的概念和含义没有很详细的去研究其背后代表的意思.今天下班之前,又看到了POI这 ...
最新文章
- 《SpringBoot揭秘:快速构建微服务体系》—第2章2.4节本章小结*
- 大数据开发上岗基本要求
- java虚拟机MyEclipse_Eclipse和MyEclipse运行环境java虚拟机jvm设置,自己设置jre
- Memcache安装 2
- 单位人勾心斗角,我是老实人该怎么办?
- [网络安全自学篇] 九十三.《Windows黑客编程技术详解》之木马开机自启动技术(注册表、计划任务、系统服务)
- vue中echarts3d 使用(3d地图上有柱状图数据,吉林省)
- 最基本财务基础知识,财务知识基础
- hotmail邮箱设置
- [Vulkan教程]概述
- 一张图解释什么是遗传算法_通俗易懂地解释遗传算法
- 比较好的Java 网站
- 公司被收购以后,我怎么办?
- 20190121——不羡神仙 Java设计模式
- SystemVerilog中随机的constrain语法
- python spss,有没有一个Python模块打开SPSS文件?
- 期末前端web大作业:用DIV+CSS技术设计的动漫网站——关于我转生成史莱姆这件事 6页
- 【AI科幻】地球陨落·准备
- 用VScode做vue开发好用的小工具(推荐)
- 赶紧自查这个插件!黑客可能远程控制你的谷歌浏览器
热门文章
- 字节、字、bit、bite的关系
- linux7创建vsftp服务器,Centos 7 FTP(vsftp)服务安装及配置
- HyperLynx(二十五)电源完整性之直流压降分析(二)
- sql中完全依赖,部分依赖,传递依赖关系
- LVT, RVT(SVT, NVT), HVT 的区别
- R语言Bootstrap、百分位Bootstrap法抽样参数估计置信区间分析通勤时间和学生锻炼数据
- 虚拟机服务器校园网访问设置,配置VMware虚拟机用绕过校园网达到无线上网配置方法...
- 通过游戏策划阶段防治游戏外挂(超长)
- Google 百度 图标收藏(三)
- 部署(Discuz!论坛系统) 建论坛库