all files / src/olHelpers/ extentUtil.ts

20% Statements 6/30
0% Branches 0/18
0% Functions 0/2
20.69% Lines 6/29
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78                                                                                                                                               
/**
 * Created by gavorhes on 7/18/2016.
 */
import provide from '../util/provide';
import ol = require('custom-ol');
import {LayerBaseVector} from "../layers/LayerBaseVector";
 
 
const nm = provide('util');
 
/**
 *
 * @param {Array<LayerBaseVector>|Array<ol.layer.Vector>|LayerBaseVector|ol.layer.Vector|*} layers - array of layers or single
 * @returns {ol.Extent|Array<number>|*} - collective extent
 */
export function calculateExtent(layers: ol.layer.Vector[]|LayerBaseVector[]): ol.Extent|Array<number>| ol.Extent| number[] {
    "use strict";
 
    let hasExtent = false;
 
    let minX = 10E100;
    let minY = 10E100;
    let maxX = -10E100;
    let maxY = -10E100;
 
    for (let lyr of layers) {
 
        /**
         * 
         * @type {ol.layer.Vector}
         */
        let olLayer = lyr['olLayer'] || lyr;
        
        
        if (olLayer.getSource().getFeatures().length > 0) {
            hasExtent = true;
            let ext = olLayer.getSource().getExtent();
            minX = ext[0] < minX ? ext[0] : minX;
            minY = ext[1] < minY ? ext[1] : minY;
            maxX = ext[2] > maxX ? ext[2] : maxX;
            maxY = ext[3] > maxY ? ext[3] : maxY;
        }
    }
 
    if (hasExtent) {
        return [minX, minY, maxX, maxY];
    } else {
        return undefined;
    }
}
 
nm.calculateExtent = calculateExtent;
 
 
/**
 * given one or an array of layers, fit to the map
 * @param layers - array of layers or single
 * @param  mp - the map to fit
 * @param [zoomOut=undefined] - levels to zoom out after fit
 */
export function fitToMap(layers: ol.layer.Vector[]|LayerBaseVector[], mp: ol.Map, zoomOut?: number){
    "use strict";
 
    let ext = calculateExtent(layers);
    
    if (typeof ext == 'undefined'){
        return;
    }
    
    mp.getView().fit(ext as ol.Extent, mp.getSize());
    
    if (typeof zoomOut == 'number'){
        mp.getView().setZoom(mp.getView().getZoom() - zoomOut);
    }
}
 
nm.calculateExtent = calculateExtent;