UNPKG

ol-extent

Version:

a JavaScript library for openlayers extent

291 lines (277 loc) 7.1 kB
import ol from 'openlayers' /** * 获取所有图层(内部处理) * @param layers * @returns {Array} */ const getAllLayersInternal = function (layers) { let _target = []; if (layers.length > 0) { layers.forEach(layer => { if (layer instanceof ol.layer.Group) { let layers = layer.getLayers().getArray(); let _layer = getAllLayersInternal(layers); if (_layer) { _target = _target.concat(_layer); } } else { _target.push(layer); } }) } return _target; }; /** * 获取所有图层(将图层组里面的图层解析出来) * @param map * @returns {Array} */ const getAllLayers = function (map) { let targetLayers = []; if (map) { const layers = map.getLayers().getArray(); targetLayers = getAllLayersInternal(layers); } return targetLayers; }; /** * 根据图层名获取底图 * @param layerName * @returns {*} */ const getBaseLayerByLayerName = (layerName) => { let currentLayer = null; let layers = getLayersArrayByKeyValue('isBaseLayer', true); if (layers && layers.length > 0) { layers.every(layer => { if (layer.get('layerName') === layerName) { currentLayer = layer; return false; } else { return true; } }) } return currentLayer }; /** * 获取底图图层组 */ const getBaseLayers = () => { return (getLayersArrayByKeyValue('isBaseLayer', true)) }; /** * 通过layerName获取图层 * @param map * @param layerName * @returns {*} */ const getLayerByLayerName = function (map, layerName) { let targetLayer = null; if (map) { const layers = map.getLayers().getArray(); targetLayer = getLayerInternal(layers, 'layerName', layerName); } return targetLayer; }; /** * 内部处理获取图层方法 * @param layers * @param key * @param value * @returns {*} */ const getLayerInternal = function (layers, key, value) { let _target = null; if (layers.length > 0) { layers.every(layer => { if (layer instanceof ol.layer.Group) { let layers = layer.getLayers().getArray(); _target = getLayerInternal(layers, key, value); if (_target) { return false; } else { return true; } } else if (layer.get(key) === value) { _target = layer; return false; } else { return true; } }) } return _target; } /** * 根据相关键值键名获取图层集合 * @param layers * @param key * @param value * @returns {Array} */ const getLayersArrayInternal = function (layers, key, value) { let _target = []; if (layers.length > 0) { layers.forEach(layer => { if (layer instanceof ol.layer.Group) { let layers = layer.getLayers().getArray(); let _layer = getLayersArrayInternal(layers, key, value); if (_layer) { _target = _target.concat(_layer); } } else if (layer.get(key) === value) { _target.push(layer); } }) } return _target; }; /** * 通过键名键值获取图层(注意键名键值必须是set(key, value)) * @param map * @param key * @param value * @returns {*} */ const getLayerByKeyValue = function (map, key, value) { let targetLayer = null; if (map) { const layers = map.getLayers().getArray(); targetLayer = getLayerInternal(layers, key, value); } return targetLayer; }; /** * 通过键名键值获取图层集合(注意键名键值必须是set(key, value)) * @param map * @param key * @param value * @returns {Array} */ const getLayersArrayByKeyValue = function (map, key, value) { let targetLayers = []; if (map) { const layers = map.getLayers().getArray(); targetLayers = getLayersArrayInternal(layers, key, value); } return targetLayers; }; /** * 通过要素获取图层 * @param map * @param feature * @returns {*} */ const getLayerByFeature = function (map, feature) { let targetLayer; if (map && feature instanceof ol.Feature) { const layers = map.getLayers().getArray(); targetLayer = _getLayerByFeatureInternal(layers, feature); } return targetLayer; }; /** * 处理要素获取图层方法 * @param layers * @param feature * @returns {*} * @private */ const _getLayerByFeatureInternal = function (layers, feature) { let _target; layers.every(layer => { if (layer && layer instanceof ol.layer.Vector && layer.getSource) { let source = layer.getSource(); if (source.getFeatures) { let features = source.getFeatures(); features.every(feat => { if (feat === feature) { _target = layer; return false; } else { return true; } }) } return false; } else if (layer instanceof ol.layer.Group) { let layers = layer.getLayers().getArray(); _target = _getLayerByFeatureInternal(layers, feature); if (_target) { return false; } else { return true; } } else { return true; } }); return _target; }; /** * 创建临时图层 * @param map * @param layerName * @param params * @returns {*} */ const createVectorLayer = function (map, layerName, params) { if (map) { let vectorLayer = getLayerByLayerName(map, layerName); if (!(vectorLayer instanceof ol.layer.Vector)) { vectorLayer = null; } if (!vectorLayer) { if (params && params.create) { vectorLayer = new ol.layer.Vector({ layerName: layerName, params: params, layerType: 'vector', source: new ol.source.Vector({ wrapX: false }), style: new ol.style.Style({ fill: new ol.style.Fill({ color: 'rgba(67, 110, 238, 0.4)' }), stroke: new ol.style.Stroke({ color: '#4781d9', width: 2 }), image: new ol.style.Circle({ radius: 7, fill: new ol.style.Fill({ color: '#ffcc33' }) }) }), zIndex: params['zIndex'] }) } } if (map && vectorLayer) { if (params && params.hasOwnProperty('selectable')) { vectorLayer.set('selectable', params.selectable); } // 图层只添加一次 let _vectorLayer = getLayerByLayerName(map, layerName); if (!_vectorLayer || !(_vectorLayer instanceof ol.layer.Vector)) { map.addLayer(vectorLayer); } } return vectorLayer } }; export { getBaseLayers, getAllLayers, getLayerByFeature, getBaseLayerByLayerName, getLayerByLayerName, getLayerInternal, getLayersArrayInternal, getLayerByKeyValue, getLayersArrayByKeyValue, createVectorLayer }