Ol3自定义点聚合

作者: 何庆欢 | 来源:发表于2017-01-11 21:10 被阅读192次

    对于点聚合这个需求,在Openlayers3中有现成的类来实现,就是ol.source.Cluster类。具体的参数说明有兴趣的可以去参考官网的API,这里就不多说了。在官网的示例中,点聚合默认在每个聚合点的圆中间显示所聚合的要素的数量:

官网示例

     但是在实际需求中,我们可能要根据自己的业务来筛选所聚合的要素的某一个来显示特定的信息,而不仅仅是显示要素的数量。比如,我要显示的是每个聚合点所聚合的要素中某个属性在当前聚合点中值最大的一个,并显示最大值,把聚合点的Property设置为最大值所对应的要素的Property。这样就稍微有点麻烦了。

    最初,我是在每一次分辨率变化重新聚合后,遍历所有聚合点,并遍历每个聚合点所聚合的子要素,找出满足筛选条件的子要素来打到目的。但是这种做法有很大的性能问题。在官网上的例子中是2万个点聚合的实例没有一点卡顿,被我这么一弄,我本地1800多个点就有点卡顿了,而且比较影响体验。最后不得不去github下载源码查看点聚合是怎么实现的,在观看源码过程中,我发现了一个createCluster_方法,这正是我想要找到的东西。源码如下:

ol.source.Cluster中createCluster_方法

从源码中可以发现,createCluster_方法正是创建聚合点的方法,其中还有一个遍历要聚合的子要素的过程,我们暂且不管for循环里面的代码做的事什么,我们完全可以把自己的业务加到这个for循环内,实现之前我要实现的功能。就这样我在源码中做了如下修改(Cluster的源码位置在openlayers/src/ol/source/cluster.js):

修改后的源码

    大功造成,上面标注的部分就是我加上去的代码,短短的几行代码就实现了我刚才所说的需求,而且对聚合的性能影响甚微。需要注意的是,修改完的源码要重新编译才能正常使用,至于编译的方法可以去看公瑾的文章:OpenLayers3自定义编译   在这篇文章中,最后编译的命令是用的自定义的配置文件编译的,如果没有自定义编译需求,可以直接用openlayers目录中config/ol.json这个配置文件来完全编译。

相关文章

  • Ol3自定义点聚合

    对于点聚合这个需求,在Openlayers3中有现成的类来实现,就是ol.source.Cluster类。具体...

  • Pandas的聚合函数

    定义DataFrame 1.内置聚合函数 2.自定义聚合函数 3.字典传递给聚合函数

  • openlayers3瓦片加载的源码浅析与小结

    本文适用于对ol3的使用有一定了解,目的是为了对ol3瓦片加载部分有更深入的了解。ol3源码极其庞大,本文仅仅只包...

  • ol3加载arcserver rest服务

    近日做完ol3加载arcserver rest服务,做一个总结,因为发现自己亲手写的ol3记载瓦片的小结,竟然自己...

  • User Defined Aggregate Functions

    自定义聚合函数实例: mark:https://docs.databricks.com/spark/latest/...

  • Flink SQL 自定义UDAF

    1.创建一个测试用例的数据源(每隔12秒生成一个随机数) 自定义聚合函数,实现中位数计算 自定义聚合函数需要继承 ...

  • User-defined Aggregates

    前言:User-defined Aggregates,自定义聚合。聚合本身是指将一个group归为一个条目的行为比...

  • Spark实例-自定义聚合函数

    Spark自定义聚合函数时,需要实现UserDefinedAggregateFunction中8个方法: inpu...

  • Hive 用户自定义函数 UDF,UDAF

    Hive有UDF:(普通)UDF,用户自定义聚合函数(UDAF)以及用户自定义生表函数(UDTF)。它们所接受的输...

  • sql server 自定义函数

    函数分为系统函数,自定义函数。 系统函数 如聚合函数,max(),min() 等等系统提供的函数。 自定义函数 自...

网友评论

本文标题:Ol3自定义点聚合

本文链接:https://www.haomeiwen.com/subject/jxwrbttx.html