react-spatial
Version:
Components to build React map apps.
184 lines (157 loc) • 4.5 kB
JavaScript
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