помощью OpenLayers 3 зум в сочетании степени

Я использую openlayers 3 для создания карты с векторными объектами сверху. Пока все идет хорошо.

у меня есть несколько векторных слоев, сгруппированных в переменную projecten.

var projecten = new ol.layer.Group({

            title: 'Projecten',
            layers: [

                new ol.layer.Vector({
                title: 'EVZ Den Dungen',
                source: new ol.source.GeoJSON(
                            /** @type {olx.source.GeoJSONOptions} */ ({
                              object: EVZDenDungen,
                              projection: 'EPSG:3857'
                        })),
                style: function(feature, resolution) {
                    return lookup[feature.get('landschapselement')];
                }
                }),

                new ol.layer.Vector({
                title: 'EVZ Croy',
                source: new ol.source.GeoJSON(
                            /** @type {olx.source.GeoJSONOptions} */ ({
                              object: EVZCroy,
                              projection: 'EPSG:3857'
                        })),
                style: function(feature, resolution) {
                    return lookup[feature.get('landschapselement')];
                }
                }),

                new ol.layer.Vector({
                title: 'Natuurcompensatie Gasselsbroek',
                source: new ol.source.GeoJSON(
                            /** @type {olx.source.GeoJSONOptions} */ ({
                              object: NatuurcompensatieGasselsbroek,
                              projection: 'EPSG:3857'
                        })),
                style: function(feature, resolution) {
                    return lookup[feature.get('landschapselement')];
                }
                }),

                new ol.layer.Vector({
                title: 'Ebben',
                source: new ol.source.GeoJSON(
                            /** @type {olx.source.GeoJSONOptions} */ ({
                              object: Ebben,
                              projection: 'EPSG:3857'
                        })),
                style: function(feature, resolution) {
                    return lookup[feature.get('landschapselement')];
                }
                }),

                new ol.layer.Vector({
                title: 'Zionsburg',
                source: new ol.source.GeoJSON(
                            /** @type {olx.source.GeoJSONOptions} */ ({
                              object: Zionsburg,
                              projection: 'EPSG:3857'
                        })),
                style: function(feature, resolution) {
                    return lookup[feature.get('landschapselement')];
                }
                })


            ]
})

теперь я хочу как-то перебирать переменные projecten, перебирать слои один за другим, получать экстент каждого векторного слоя и останавливаться, когда достигнут последний слой. Тогда я хочу увеличить этот объем.

Это моя основная настройка (я не умею javascript и циклы):

projecten.getLayers()
     for (var i = 0, ii = layers.length; i < ii; ++i) {
         layer = layers[i];
         ol.extent.boundingExtend(extent, layer.getBounds());
     }
    map.getView().fitExtent(extent,map.getSize());

есть идеи о том, как я могу заставить это работать?

1 ответов


вы должны быть в состоянии сделать это:

var extent = ol.extent.createEmpty();
projecten.getLayers().forEach(function(layer) {
  ol.extent.extend(extent, layer.getSource().getExtent());
});
map.getView().fitExtent(extent, map.getSize());

использовать ol.extent.createEmpty() функции для инициализации степени. Затем пройдите через коллекцию слоев и используйте ol.extent.extend() для создания экстента, который включает все объекты во всех ваших векторных источниках. Наконец, установите вид карты в этом объеме.

есть несколько вещей, чтобы отметить здесь. The group.getLayers() метод возвращает ol.Collection слоев. Это похож на обычный JavaScript Array за исключением того, что это заметно. Вы можете использовать collection.forEach() метод для итерации по каждому слою в коллекции.

Также обратите внимание, что вы должны позвонить source.getExtent() чтобы получить экстент всех загруженных в данный момент объектов в источнике.

наконец, ссылки выше актуальны для версии 3.5.0 и выше. Вам нужно будет адаптировать свой код для работы с ol.source.Vector объекты вместо экспериментальных (и теперь удалено)ol.source.GeoJSON объекты. Вижу 3.5.0 выпуске подробнее об обновлении до Нового векторного API.