当地图上点太多的时候你就会想到要用点的聚合,这个点改如何聚合呢?
聚合原理:在地图上画网格,然后有点落在这个网格里就标注,没有就不标注。如果有多个点落在这个网格,仍然只标注一个点。
网上介绍的大体上都有这样一个弊端:当你移动地图的时候,之前聚合的点有可能散开,多个散点有可能聚合。
那么怎样才能实现拖动地图的时候之前标注的点不变动呢?
解决办法:
网格一:在整个地图上画网格
网格二:在当前视窗上画网格
当然这两个网格的小格子边长要一样
想办法把网格一和网格二重叠,即网格二中的格子在网格一中一定有一个与之重叠的格子。然后在网格二上面marker即可
----------- 2016-02-16 --------
犹豫了好久,今天决定补上源码。
聚合从毕业实习到如今,从不会js到现在陆陆续续写了3个版本,三个版本代码逻辑都不一样,优化程度也不一样,它们见证了我js学习的提升,同时也有运行效率上的深度提升。
第一个版本,虽然说js是完全面向对象的,但是我写的时候完全没有面向对象的觉悟(因为还在蹒跚学步)
第二个版本,如果说第一个版本是因为工作需要,那么第二个版本完全是处于个人爱好了,因为我想要把聚合写成面向对象的,同时提高聚合的效率。
第三个版本,也就是现在这个版本(高德地图版本,前两版是PGIS版的),代码更加精简,逻辑更加清楚。
由于前两版本已经用于工作,故无法贴出源码,第三个版本是我前天写的,跟以前的版本逻辑完全不一样,因此奉上代码,请各位看官指正。
高德地图自带了聚合的API,我这里只是借用高德地图的平台写了自己的聚合。
精华部分请看marksCluster.js
【目录结构】
【marksCluster.html】
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" >
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>聚合与离散</t