UNPKG

react-spatial

Version:

Components to build React map apps.

184 lines (157 loc) 4.5 kB
import TileLayer from 'ol/layer/Tile'; import VectorLayer from 'ol/layer/Vector'; import XYZ from 'ol/source/XYZ'; import VectorSource from 'ol/source/Vector'; import WMTSSource from 'ol/source/WMTS'; import TileJSONSource from 'ol/source/TileJSON'; import WMTSTileGrid from 'ol/tilegrid/WMTS'; import GeoJSONFormat from 'ol/format/GeoJSON'; import Layer from './layers/Layer'; import MapboxLayer from './layers/MapboxLayer'; import projections from './Projections'; var createXYZLayer = function (item) { var conf = Object.assign({}, item); delete conf.data; var l = new Layer(Object.assign({}, conf, {olLayer: new TileLayer({ name: conf.name, source: new XYZ({ url: item.data.url, crossOrigin: 'Anonymous', transition: 0, }), })})); return l; }; var createVectorLayer = function (item) { var conf = Object.assign({}, item); delete conf.data; return new Layer(Object.assign({}, conf, {olLayer: new VectorLayer({ name: conf.name, source: new VectorSource({ url: item.data.url, format: new GeoJSONFormat(), }), style: item.data.style, })})); }; var createMapboxLayer = function (item) { var conf = Object.assign({}, item); delete conf.data; return new MapboxLayer(Object.assign({}, conf, {url: item.data.url})); }; var createTileJSONLayer = function (item) { var conf = Object.assign({}, item); delete conf.data; return new Layer(Object.assign({}, conf, {olLayer: new TileLayer({ name: conf.name, source: new TileJSONSource({ url: item.data.url, crossOrigin: 'Anonymous', }), })})); }; var createWMTSLayer = function (item) { var data = item.data; if (data.type === 'wmts') { var proj = projections[data.projection || 'EPSG:3857']; if (!data.projectionExtent && proj) { data.projectionExtent = proj.projectionExtent; } if (!data.resolutions && proj) { data.resolutions = proj.resolutions; } } if (!data.resolutions) { // eslint-disable-next-line no-console console.log( ("The resolutions array is missing for the WMTS layer: " + (item.name)) ); } var conf = Object.assign({}, item); delete conf.data; return new Layer(Object.assign({}, conf, {olLayer: new TileLayer({ name: conf.name, source: new WMTSSource({ url: data.url, matrixSet: data.matrixSet, requestEncoding: data.requestEncoding, crossOrigin: 'Anonymous', tileGrid: new WMTSTileGrid({ extent: data.projectionExtent, resolutions: data.resolutions, matrixIds: (data.resolutions || []).map(function (res, i) { return ("" + i); }), }), }), })})); }; var createCustomLayer = function (item) { var conf = Object.assign({}, item); delete conf.data; return new Layer(Object.assign({}, conf, {olLayer: item.data.layer})); }; var createEmptyLayer = function (item) { var conf = Object.assign({}, item); delete conf.data; return new Layer(Object.assign({}, conf)); }; var createLayer = function (item) { var layer; switch (item.data.type) { case 'xyz': layer = createXYZLayer(item); break; case 'wmts': layer = createWMTSLayer(item); break; case 'tileJSON': layer = createTileJSONLayer(item); break; case 'vectorLayer': layer = createVectorLayer(item); break; case 'mapbox': layer = createMapboxLayer(item); break; case 'custom': layer = createCustomLayer(item); break; default: layer = createEmptyLayer(item); } return layer; }; var loadLayerFromConfig = function (config) { // apply default values var item = Object.assign({}, {data: [], visible: false, isBaseLayer: false}, config, {children: []}); var layer = createLayer(item); if (config.children) { config.children.forEach(function (childConfig) { layer.addChild(loadLayerFromConfig(childConfig)); }); } return layer; }; var readConfig = function (data) { return data.map(function (config) { return loadLayerFromConfig(config); }); }; var getVisibleTopic = function (topicList) { var visibleTopic = null; topicList.forEach(function (topic) { if (topic.visible) { visibleTopic = topic; } }); return visibleTopic; }; export default { getVisibleTopic: getVisibleTopic, readConfig: readConfig }; //# sourceMappingURL=ConfigReader.js.map