首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenLayers 4缩放到集群

OpenLayers 4缩放到集群
EN

Stack Overflow用户
提问于 2017-07-08 05:05:44
回答 2查看 1.9K关注 0票数 1

我正在使用OpenLayers 4,并且有一个以ol.source.Cluster作为源的层。当我单击聚集点时,我希望放大组成该簇的原始点的范围。我的问题是我在任何地方都找不到这些原始点。

我试图从集群上使用的距离来计算一个范围,但结果并不令人满意。

你知道如何确定聚集点后面的原始点是什么吗?

代码语言:javascript
复制
<html>
  <head>
    <title>Cluster</title>
    <link rel="stylesheet" href="https://openlayers.org /en/v4.1.1/css/ol.css" type="text/css">
    <script src="https://openlayers.org/en/v4.1.1/build/ol.js"></script>
  </head>
  <body>
    <div id="map" class="map"></div>
    <script>

      var geojsonObject = {
        'type': 'FeatureCollection',
        'crs': {
          'type': 'name',
          'properties': {
            'name': 'EPSG:3857'
          }
        },
        'features': [{
          'type': 'Feature',
          'geometry': {
            'type': 'Point',
            'coordinates': [0, 0]
          }
        }, {
          'type': 'Feature',
          'geometry': {
            'type': 'Point',
            'coordinates': [9, 9]
          }
        },{
          'type': 'Feature',
          'geometry': {
            'type': 'Point',
            'coordinates': [10, 10]
          }
        }]
      };

      var source = new ol.source.Vector({
        features: (new ol.format.GeoJSON()).readFeatures(geojsonObject)
      });

      var clusterSource = new ol.source.Cluster({
        source: source,
        distance: 30
      });

      var layer = new ol.layer.Vector({
        source: clusterSource
      });

      var select = new ol.interaction.Select({
        layers: [layer]     
      });

      var view = new ol.View({
        center: [5, 5],
        zoom: 20
      });

      var map = new ol.Map({
        target: 'map',
        layers: [new ol.layer.Tile({
          source: new ol.source.OSM()
          }),layer],
        view: view
      });

      map.addInteraction(select);

      var selectedFeatures = select.getFeatures();

      selectedFeatures.on('add', function(event) {
        // event.target only contains the clustered point
        var feature = event.target.item(0);
      });   

    </script>
  </body>
</html>
EN

回答 2

Stack Overflow用户

发布于 2017-07-11 01:25:16

我自己在OpenLayers example中找到了答案。

在所选功能函数中,您可以执行以下操作

代码语言:javascript
复制
var originalFeatures = feature.get('features');

获取原始要素,然后在我的示例中缩放到范围

代码语言:javascript
复制
var extent = new ol.extent.createEmpty();
originalFeatures.forEach(function(f, index, array){
    ol.extent.extend(extent, f.getGeometry().getExtent());
});
map.getView().fit(extent, map.getSize());
票数 4
EN

Stack Overflow用户

发布于 2017-07-11 00:50:15

您可以从以下位置获取集群中的功能:

source.getFeatures()

您可以从以下位置获取范围:

source.getExtent()

其中,源是ol.source.Cluster的实例

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44979615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档