代码之家  ›  专栏  ›  技术社区  ›  Adithya

openlayer 6.4.3中的群集创建-未捕获类型错误:this.source.loadFeatures不是函数

  •  0
  • Adithya  · 技术社区  · 4 年前

    我正在尝试使用OL6.4.3创建集群。我的剧本是

    var cluster_data = {
                "type": "Feature",
              'features': [
                {
                  'type': 'Feature',
                  'geometry': {
                    'type': 'Point',
                    'coordinates': [686213.47091037, 1093486.3776117],
                  },
                },
                {
                  'type': 'Feature',
                  'geometry': {
                    'type': 'Point',
                    'coordinates': [687067.04391223, 1094462.7275206],
                  },
                },
                {
                  'type': 'Feature',
                  'geometry': {
                    'type': 'Point',
                    'coordinates': [687214.60645801, 1094362.868384],
                  },
                }
    
                ],
            };
    var features = new Array(3);
     var source = new ol.layer.Vector({
              features: new ol.format.GeoJSON().readFeatures(cluster_data),
    });
    
    var clusterSource = new ol.source.Cluster({
      distance: 40,
      source: source,
    });
    
    var styleCache = {};
    var clusters = new ol.layer.Vector({
      source: clusterSource,
      style: function (feature) {
        var size = feature.get('features').length;
        var style = styleCache[size];
        if (!style) {
          style = new Style({
            image: new CircleStyle({
              radius: 10,
              stroke: new Stroke({
                color: '#fff',
              }),
              fill: new Fill({
                color: '#3399CC',
              }),
            }),
            text: new Text({
              text: size.toString(),
              fill: new Fill({
                color: '#fff',
              }),
            }),
          });
          styleCache[size] = style;
        }
        return style;
      },
    });
    map.addLayer(clusters);
    

    我已经添加了其他3个瓷砖层 map.getLayers().extend([bm,road,landmark]); 在添加集群时。

    添加图层后得到的贴图是 enter image description here

    0 回复  |  直到 4 年前
        1
  •  1
  •   Mike    4 年前

    var source = new ol.layer.Vector({
    

    var source = new ol.source.Vector({
    

    此外,还应选择特征之前数据中的第一种类型

    "type": "FeatureCollection",
    

    如果您使用的是OpenLayers完整版 new Style new CircleStyle new Stroke new Fill new Text 应该是 new ol.style.Style new ol.style.Circle new ol.style.Stroke new ol.style.Fill new ol.style.Text

    <!DOCTYPE html>
    <html>
      <head>
        <link rel="stylesheet" href="https://openlayers.org/en/v6.4.3/css/ol.css" type="text/css">
        <!-- The line below is only needed for old environments like Internet Explorer and Android 4.x -->
        <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>
        <script src="https://openlayers.org/en/v6.4.3/build/ol.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.6.1/proj4.js"></script>
        <style>
          html, body, .map {
            margin: 0;
            padding: 0;
            width: 100%;
            height: 100%;
          }
        </style>
      </head>
      <body>
        <div id="map" class="map"></div>
        <script>
    
    proj4.defs("EPSG:32643","+proj=utm +zone=43 +datum=WGS84 +units=m +no_defs");
    ol.proj.proj4.register(proj4);
    
    var cluster_data = {
              "type": "FeatureCollection",
              'features': [
                {
                  'type': 'Feature',
                  'geometry': {
                    'type': 'Point',
                    'coordinates': [686213.47091037, 1093486.3776117],
                  },
                },
                {
                  'type': 'Feature',
                  'geometry': {
                    'type': 'Point',
                    'coordinates': [687067.04391223, 1094462.7275206],
                  },
                },
                {
                  'type': 'Feature',
                  'geometry': {
                    'type': 'Point',
                    'coordinates': [687214.60645801, 1094362.868384],
                  },
                }
    
                ],
            };
    
    var source = new ol.source.Vector({
              features: new ol.format.GeoJSON().readFeatures(cluster_data),
    });
    
    var clusterSource = new ol.source.Cluster({
      distance: 40,
      source: source,
    });
    
    var styleCache = {};
    var clusters = new ol.layer.Vector({
      source: clusterSource,
      style: function (feature) {
        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;
      },
    });
    
    var map = new ol.Map({
      target: 'map',
      layers: [
        new ol.layer.Tile({
          source: new ol.source.OSM()
        })
      ],
      view: new ol.View({
        projection: "EPSG:32643"
      })
    });
    
    map.addLayer(clusters);
    
    map.getView().fit(source.getExtent());
    map.getView().setZoom(map.getView().getZoom() - 6);
    
        </script>
      </body>
    </html>
    推荐文章