Openlayersによる集約表示


本論文の例では、Openlayersの統合表示を実現するための具体的なコードを共有します。
1、集約表示
集約表示とは、異なる地図解像度において、表示点を集約的に示す方法であり、その目的は、現在のウィンドウにロードされている表示点の数を減らすことで、クライアントのレンダリング速度を高め、ArcGISに類似した点の絞りとなる。
2、コード実現

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 <title></title>
 <script src="../lib/ol/ol.js"></script>
 <script type="text/javascript">
 window.onload = function () {
  //     
  var map = new ol.Map({
  target: 'map',
  layers: [
   new ol.layer.Tile({
   source: new ol.source.OSM()
   })
  ],
  view: new ol.View({
   center: new ol.proj.fromLonLat([116.28, 39.54]),
   zoom: 8
  })
  });
 
  //       
  //10000        ,50000        ,100000           
  var count = 10000;
  //        
  var features = new Array(count);
  //     
  var e = 8500000;
 
  for (var i = 0; i < count; i++) {
  //    
  var coordinates = [3 * e * Math.random() - e, 2 * e * Math.random() - e];
  //     
  features[i] = new ol.Feature(new ol.geom.Point(coordinates));
  }
 
  //        
  var source = new ol.source.Vector({
  //  
  features:features
  });
 
  //          
  var clusterSource = new ol.source.Cluster({
  //         
  distance: 40,
  //   
  source:source
  });
 
  //    
  var styleCache = {};
  //       
  var clusters = new ol.layer.Vector({
  //   
  source: clusterSource,
  //  
  style: function (feature, resolution) {
   //              
   var size = feature.get('features').length;
   //    
   var style = styleCache[size];
   //            
   if (!style) {
   style = [
    //     
    new ol.style.Style({
    //   
    image: new ol.style.Circle({
     //    
     radius: 10,
     //  
     stroke: new ol.style.Stroke({
     color: '#fff'
     }),
     //  
     fill: new ol.style.Fill({
     color: '#3399cc'
     })
    }),
    //    
    text: new ol.style.Text({
     //    
     text: size.toString(),
     //  
     fill: new ol.style.Fill({
     color: '#fff'
     })
    })
    })
   ];
   styleCache[size] = style;
   }
   return style;
  }
  });
  //          map 
  map.addLayer(clusters);
 
  //          
  document.getElementById('addFeatures').onclick = function () {
  //             
  var currentFeatures = clusterSource.getSource().getFeatures();
  //                 
  if (currentFeatures.length == 0) {
   clusterSource.getSource().addFeatures(features);
   clusters.setSource(clusterSource);
   map.addLayer(clusters);
  }
  };
 
  //           
  document.getElementById('removeFeatures').onclick = function () {
  //               
  clusterSource.getSource().clear();
  // map         
  map.removeLayer(clusters);
  };
 };
 </script>
</head>
<body>
 <input type="button" name="name" value="      " id="addFeatures" />
 <input type="button" name="name" value="      " id="removeFeatures" />
 <div id="map"></div>
</body>
</html>
3、結果の展示
初期化画面

地図の解像度を勝手に変更しても、表示点の数は変わります。

左上の集約ラベル除去ボタンをクリックすると、画面上のすべての表示が空になります。

左上の集約ラベルを追加するボタンをクリックすると、画面上に重合表示を追加します。

以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。