http://blog.csdn.net/gisshixisheng/article/details/46137015

概述:

在前面的博文中讲述过基于Arcgis for js如何实现聚类统计展示,在本文中讲述如何基于openlayers实现聚类统计的效果,Arcgis for js聚类统计的博文地址为:

http://blog.csdn.net/gisshixisheng/article/details/40867989

效果:

实现关键点:

实现代码:

1、数据格式

2、设置显示样式

  1. var style = new OpenLayers.Style({
  2. fillColor: "#ffcc66",
  3. strokeColor: "#ff9933",
  4. strokeWidth: 2,
  5. label: "${count}",
  6. fontColor: "#333333",
  7. fontFamily: "sans-serif",
  8. fontWeight: "bold"
  9. }, {
  10. rules: [
  11. new OpenLayers.Rule({
  12. minScaleDenominator: 100000000,
  13. symbolizer: {
  14. pointRadius: 7,
  15. fontSize: "9px"
  16. }
  17. }),
  18. new OpenLayers.Rule({
  19. maxScaleDenominator: 100000000,
  20. minScaleDenominator: 50000000,
  21. symbolizer: {
  22. pointRadius: 10,
  23. fontSize: "11px"
  24. }
  25. }),
  26. new OpenLayers.Rule({
  27. maxScaleDenominator: 50000000,
  28. symbolizer: {
  29. pointRadius: 13,
  30. fontSize: "13px"
  31. }
  32. })
  33. ]
  34. });

3、添加矢量图层

  1. var features = new Array();
  2. for (var i=0; i<data.length; i++) {
  3. features[i] = new OpenLayers.Feature.Vector(
  4. new OpenLayers.Geometry.Point(data[i].x, data[i].y),
  5. {
  6. count:data[i].count,
  7. name:data[i].name
  8. }
  9. );
  10. }
  11. var clusterLayer = new OpenLayers.Layer.Vector("Points", {
  12. styleMap: new OpenLayers.StyleMap(style)
  13. });
  14. clusterLayer.addFeatures(features);
  15. map1.addLayer(clusterLayer);

程序完整代码为;

    1. <!DOCTYPE html>
    2. <html>
    3. <head lang="en">
    4. <meta charset="UTF-8">
    5. <title>openlayers map</title>
    6. <link rel="stylesheet" href="http://localhost/olapi/theme/default/style.css" type="text/css">
    7. <style>
    8. html, body{
    9. padding:0;
    10. margin:0;
    11. height:100%;
    12. width:100%;
    13. overflow: hidden;
    14. font-size: 12px;
    15. }
    16. #map1{
    17. width: 100%;
    18. height: 100%;
    19. float: left;
    20. border-right: 1px solid #000000;
    21. }
    22. </style>
    23. <script src="http://localhost/olapi/OpenLayers.js"></script>
    24. <script src="http://localhost/olapi/lib/OpenLayers/Lang/zh-CN.js"></script>
    25. <script src="http://localhost/jquery/jquery-1.8.3.js"></script>
    26. <script>
    27. var map1, vectors;
    28. OpenLayers.Feature.Vector.style['default']['strokeWidth'] = '2';
    29. $(function(){
    30. var bounds = new OpenLayers.Bounds(
    31. 73.45100463562233, 18.16324718764174,
    32. 134.97679764650596, 53.531943152223576
    33. );
    34. var options = {
    35. controls: [],
    36. maxExtent: bounds,
    37. maxResolution: 0.2403351289487642,
    38. projection: "EPSG:4326",
    39. units: 'degrees'
    40. };
    41. map1 = new OpenLayers.Map('map1', options);
    42. map1.addLayer(getWms("china"));
    43. map1.addControl(new OpenLayers.Control.Zoom());
    44. map1.addControl(new OpenLayers.Control.Navigation());
    45. map1.zoomToExtent(bounds);
    46. addCluster();
    47. });
    48. function getWms(layer){
    49. return new OpenLayers.Layer.WMS(
    50. "Geoserver layers - Tiled",
    51. "http://localhost:8081/geoserver/lzugis/wms",
    52. {
    53. "LAYERS": layer,
    54. "STYLES": '',
    55. format: 'image/png'
    56. },
    57. {
    58. buffer: 0,
    59. displayOutsideMaxExtent: true,
    60. isBaseLayer: true,
    61. yx : {'EPSG:4326' : true}
    62. }
    63. );
    64. }
    65. function addCluster(){
    66. var style = new OpenLayers.Style({
    67. fillColor: "#ffcc66",
    68. strokeColor: "#ff9933",
    69. strokeWidth: 2,
    70. label: "${count}",
    71. fontColor: "#333333",
    72. fontFamily: "sans-serif",
    73. fontWeight: "bold"
    74. }, {
    75. rules: [
    76. new OpenLayers.Rule({
    77. minScaleDenominator: 100000000,
    78. symbolizer: {
    79. pointRadius: 7,
    80. fontSize: "9px"
    81. }
    82. }),
    83. new OpenLayers.Rule({
    84. maxScaleDenominator: 100000000,
    85. minScaleDenominator: 50000000,
    86. symbolizer: {
    87. pointRadius: 10,
    88. fontSize: "11px"
    89. }
    90. }),
    91. new OpenLayers.Rule({
    92. maxScaleDenominator: 50000000,
    93. symbolizer: {
    94. pointRadius: 13,
    95. fontSize: "13px"
    96. }
    97. })
    98. ]
    99. });
    100. var data = [{name:"乌鲁木齐",x:87.5758285931,y:43.7822116460,count:10},
    101. {name:"拉萨",x:91.1629975040,y:29.7104204643,count:30},
    102. {name:"西宁",x:101.797302689,y:36.5936423859,count:50},
    103. {name:"兰州",x:103.584297498,y:36.1190864503,count:70},
    104. {name:"成都",x:104.035508297,y:30.7141790950,count:90},
    105. {name:"重庆",x:106.519115206,y:29.4789248520,count:60},
    106. {name:"贵阳",x:106.668071385,y:26.4573115457,count:20}];
    107. var features = new Array();
    108. for (var i=0; i<data.length; i++) {
    109. features[i] = new OpenLayers.Feature.Vector(
    110. new OpenLayers.Geometry.Point(data[i].x, data[i].y),
    111. {
    112. count:data[i].count,
    113. name:data[i].name
    114. }
    115. );
    116. }
    117. var clusterLayer = new OpenLayers.Layer.Vector("Points", {
    118. styleMap: new OpenLayers.StyleMap(style)
    119. });
    120. clusterLayer.addFeatures(features);
    121. map1.addLayer(clusterLayer);
    122. }
    123. </script>
    124. </head>
    125. <body>
    126. <div id="map1"></div>
    127. </body>
    128. </html>

(转)基于openlayers实现聚类统计展示的更多相关文章

  1. 聚类:层次聚类、基于划分的聚类(k-means)、基于密度的聚类、基于模型的聚类

    一.层次聚类 1.层次聚类的原理及分类 1)层次法(Hierarchicalmethods)先计算样本之间的距离.每次将距离最近的点合并到同一个类.然后,再计算类与类之间的距离,将距离最近的类合并为一 ...

  2. 基于密度的聚类之Dbscan算法

    一.算法概述 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法.与划分和层次 ...

  3. 【机器学习】DBSCAN Algorithms基于密度的聚类算法

    一.算法思想: DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法.与划分和层 ...

  4. 一款基于jquery的手风琴图片展示效果

    今天要给大家分享一款基于jquery的手风琴图片展示效果.这款图片的展示效果鼠标经过前是灰色的,当鼠标经过时图片变大且变为彩色.效果图如下: 在线预览   源码下载 实现的代码. html代码: &l ...

  5. DBSCAN聚类︱scikit-learn中一种基于密度的聚类方式

    一.DBSCAN聚类概述 基于密度的方法的特点是不依赖于距离,而是依赖于密度,从而克服基于距离的算法只能发现"球形"聚簇的缺点. DBSCAN的核心思想是从某个核心点出发,不断向密 ...

  6. PHP+jQuery中国地图热点数据统计展示实例

    一款PHP+jQuery实现的中国地图热点数据统计展示实例,当鼠标滑动到地图指定省份区域,在弹出的提示框中显示对应省份的数据信息. 首先在页面中加一个div#tip,用来展示地图信息的提示框和#map ...

  7. 简单易学的机器学习算法—基于密度的聚类算法DBSCAN

    简单易学的机器学习算法-基于密度的聚类算法DBSCAN 一.基于密度的聚类算法的概述 我想了解下基于密度的聚类算法,熟悉下基于密度的聚类算法与基于距离的聚类算法,如K-Means算法之间的区别.    ...

  8. 简单易学的机器学习算法——基于密度的聚类算法DBSCAN

    一.基于密度的聚类算法的概述     最近在Science上的一篇基于密度的聚类算法<Clustering by fast search and find of density peaks> ...

  9. jQuery+PHP+Ajax动态数字统计展示实例

    jQuery+PHP+Ajax实现的一款动态数字统计展示实例,本例是在页面上动态展示了当前在线用户数,当然了,你可以应用到其他更多场景中. 首先我们在#number放置要统计的数字: <div ...

随机推荐

  1. 联赛前集训日记Day3

    考试 竟然出了道莫比乌斯函数的应用?? 简直没法玩 刷题 莫比乌斯函数摆在面前,咋能很快改完啊 生活 GGGGGGGGGGG 自己浪过头了,开回家一周 这车翻得猝不及防,然而自己作的,自己受,只是给别 ...

  2. 【DEBUG】 Visual Studio 2005 DEBUG集

    一. fatal error C1083: 无法打开包括文件:"stdint.h": No such file or directory stdint.h是c99标准的头文件,vc ...

  3. 在django里用xlwt作EXCEL导出功能

    参考了以前kevin的代码,搞起来快呀,哈哈哈,,阿里亚多.... 代码的意思比较明白,不注释,几乎自解释... 就是定义EXCEL时,比较硬生生的,一步一步没有快捷的方法. 另外就是取时间出来时,如 ...

  4. UVA 11825 状态压缩DP+子集思想

    很明显的状态压缩思想了.把全集分组,枚举每个集合的子集,看一个子集是否能覆盖所有的点,若能,则f[s]=max(f[s],f[s^s0]+1).即与差集+1比较. 这种枚举集合的思想还是第一次遇到,果 ...

  5. 大学,助你成长or 让你堕落?

    不管是论坛.贴吧.还是博客,都或多或少能够看到诸如对大学教育的反思.抨击之类的文章.至于什么是大学,大学又该怎样度过.大学是助你成长还是让你堕落了?我想这应该是一个见仁见智的问题.作为一个过来人,结合 ...

  6. LeetCode 234 Palindrome Linked List(回文链表)(*)(?)

    翻译 给定一个单链表,确定它是否是回文的. 跟进: 你能够在O(n)时间和O(1)空间下完毕它吗? 原文 Given a singly linked list, determine if it is ...

  7. 01背包模板、全然背包 and 多重背包(模板)

    转载请注明出处:http://blog.csdn.net/u012860063 贴一个自觉得解说不错的链接:http://www.cppblog.com/tanky-woo/archive/2010/ ...

  8. luogu2320 鬼谷子的钱袋

    题目大意 鬼谷子决定将自己的金币数好并用一个个的小钱袋装好,以便在他现有金币的支付能力下,任何数目的金币他都能用这些封闭好的小钱的组合来付账.求钱袋数最少,并且不有两个钱袋装有相同的大于1的金币数的装 ...

  9. C# WINFORM 局域网PING 工具(技术改变世界-cnblog)

    WINFORM 局域网PING 工具(技术改变世界-cnblog) 需求: 1.实时更新 日期时间 2.可以ping多个IP 地址,必须判断 IP地址的正确性,不能为广播地址 3.对ping结果的显示 ...

  10. Microsoft ASP.NET SignalR

    SignalR类似与JavaScript实时框架,如Socket.IO.SignalR能够完成客户端向服务器的异步通信,并同时支持服务器向浏览器客户端推送事件.SignalR的连接通过日益流行的Web ...