//import WMTSTileGrid from 'ol/tilegrid/WMTS';
import proj4 from 'proj4';
import {Fill, Stroke, Style} from 'ol/style';
import {OSM, TileWMS, Vector as VectorSource, XYZ, WMTS} from 'ol/source';
import {Tile, Vector as VectorLayer} from 'ol/layer';
import {TopoJSON} from 'ol/format';
import {View} from 'ol';
import {get as getProjection, transform} from 'ol/proj';
//import {getTopLeft, getWidth} from 'ol/extent';
import {register} from 'ol/proj/proj4';
import env from './env.config.json';
import i18n from './translations.json';
proj4.defs(
'EPSG:3045',
'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs'
);
proj4.defs(
'EPSG:5514',
'+proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=542.5,89.2,456.9,5.517,2.275,5.516,6.96 +units=m +no_defs'
);
register(proj4);
const sjtskProjection = getProjection('EPSG:5514');
//const utm33nProjection = getProjection('EPSG:3045');
function getHostname() {
const url = window.location.href;
const urlArr = url.split('/');
const domain = urlArr[2];
return urlArr[0] + '//' + domain;
}
export const cartodbLayer = new Tile({
source: new XYZ({
url:
'https://cartodb-basemaps-{a-d}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png',
attributions: [
'CartoDB Positron, © CARTO',
'© OpenStreetMap contributors',
],
}),
title: 'OpenStreetMap světlá',
visible: true,
base: true,
editor: {editable: false},
removable: false,
});
export const osmLayer = new Tile({
source: new OSM(),
title: 'OpenStreetMap barevná',
base: true,
visible: false,
editor: {editable: false},
removable: false,
});
export const zm100Layer = new Tile({
source: new TileWMS({
url: 'https://geoportal.cuzk.cz/WMS_ZM100_PUB/WMService.aspx',
params: {
LAYERS: 'GR_ZM100',
},
attributions: ['© ČÚZK'],
}),
/*source: new TileWMS({
url:
'https://ags.cuzk.cz/arcgis/services/VektorovaMapa/MapServer/WmsServer?',
params: {
//https://ags.cuzk.cz/arcgis/services/VektorovaMapa/MapServer/WmsServer?request=GetCapabilities&service=WMS
LAYERS: `1,2,3,4,5,6,7,8,9,10,11,12,13,14,193,194,195,196,
17,18,15,16,82,83,84,85,86,87,88,89,90,91,182,183,184,185,186,187,188,189,190,191,192,
19,20,78,79,80,81,23,24,21,22,197,198,199,200,201,202,203,204,205,
52,53,54,
26,27,92,94,93,95,96,
29,30,31,32,76,97,98,99,100,101,102,103,104,108,109,105,106,107,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155`,
},
}),*/
/*source: new WMTS({
url: 'https://geoportal.cuzk.cz/WMTS_ZM/WMTService.aspx',
format: 'image/png',
layer: 'zm',
matrixSet: 'jtsk:epsg:5514',
tileGrid: new WMTSTileGrid({
origin: [51.874963785131, 11.082166373399],
resolutions: [
3,2,1
],
matrixIds: [1, 2, 3],
}),
}),*/
title: 'Mapa ČR 1:100 000',
base: true,
visible: false,
removable: false,
});
export const mcr500Layer = new Tile({
source: new TileWMS({
url: 'https://geoportal.cuzk.cz/WMS_MCR500/WMService.aspx',
params: {
LAYERS: 'GR_MCR500',
},
attributions: ['© ČÚZK'],
}),
title: 'Mapa ČR 1:500 000',
base: true,
visible: false,
removable: false,
});
export const ortofotoLayer = new Tile({
source: new TileWMS({
url: 'https://geoportal.cuzk.cz/WMS_ORTOFOTO_PUB/WMService.aspx',
params: {
LAYERS: 'GR_ORTFOTORGB',
},
attributions: ['© ČÚZK'],
}),
title: 'Ortofoto ČÚZK',
base: true,
visible: false,
removable: false,
thumbnail: 'https://www.agrihub.sk/hsl-ng/img/orto.jpg',
});
export const perc2color = (perc: number): string => {
perc = perc * 100;
let r;
let g;
const b = 0;
if (perc < 50) {
r = 255;
g = Math.round(5.1 * perc);
} else {
g = 255;
r = Math.round(510 - 5.1 * perc);
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const h = r * 0x10000 + g * 0x100 + b * 0x1;
return `rgba(${r}, ${g}, ${b}, 0.7)`;
};
const decimal2prettyPerc = (x) => {
return `${(x * 100).toFixed(2)} %`;
};
const indexStyle = (feature) => {
if (isNaN(feature.get('aggregate'))) {
return [
new Style({
fill: new Fill({
color: '#FFF',
}),
stroke: new Stroke({
color: '#3399CC',
width: 0.25,
}),
}),
];
} else {
return [
new Style({
fill: new Fill({
color: perc2color(feature.get('aggregate')),
}),
stroke: new Stroke({
color: '#FFFFFF',
width: 0.15,
}),
}),
];
}
};
export const obce = new VectorSource({
format: new TopoJSON({dataProjection: 'EPSG:5514'}),
url: require('./data/obce_cr_20210310_5p_5514.topojson').default,
overlaps: false,
attributions: ['CC-BY ČÚZK, 2021'],
});
export const obceIndexLayer = new VectorLayer({
source: obce,
editor: {editable: false},
autoLegend: false,
visible: true,
style: indexStyle,
title: 'Obce ČR: Rural attractiveness index',
});
obceIndexLayer.set('popUp', {
attributes: [
{
attribute: 'aggregate',
label: 'agregovaný index',
displayFunction: decimal2prettyPerc,
},
{
attribute: 'Konec chudoby',
displayFunction: decimal2prettyPerc,
},
{
attribute: 'Zdraví a kvalitní život',
displayFunction: decimal2prettyPerc,
},
{
attribute: 'Kvalitní vzdělání',
displayFunction: decimal2prettyPerc,
},
{
attribute: 'Důstojná práce a ekonomický růst',
displayFunction: decimal2prettyPerc,
},
{
attribute: 'Udržitelná města a obce',
displayFunction: decimal2prettyPerc,
},
{
attribute: 'Ostatní',
displayFunction: decimal2prettyPerc,
},
],
});
obceIndexLayer.set('editable', false);
//obceIndexLayer.set('queryable', false);
const masStyle = (feature) =>
new Style({
fill: new Fill({
color: feature.get('mas_type') == 'member' ? '#1d941d' : '#f6cd61',
}),
stroke: new Stroke({
color: '#ffffff',
width: 0.6,
}),
});
export const masLayer = new VectorLayer({
source: new VectorSource({
format: new TopoJSON({dataProjection: 'EPSG:5514'}),
url: require('./data/mas_2021.topojson').default,
overlaps: false,
}),
editor: {editable: false},
visible: false,
opacity: 0.8,
style: masStyle,
title: 'MAS ČR',
popUp: {
attributes: [
/*{attribute: 'mas_type', label: 'člen NS MAS?', displayFunction: (attr) => {TODO:}}*/
],
},
attributions: ['© NS MAS ČR, http://nsmascr.cz/o-nas/'],
});
const okresyStyle = new Style({
stroke: new Stroke({
color: '#111111',
width: 0.4,
}),
});
export const okresyLayer = new VectorLayer({
source: new VectorSource({
format: new TopoJSON({dataProjection: 'EPSG:5514'}),
url: require('./data/okresy_cr_20210310_5p_5514.topojson').default,
overlaps: false,
}),
editor: {editable: false},
visible: false,
style: okresyStyle,
title: 'Okresy ČR',
attributions: ['CC-BY ČÚZK, 2021'],
});
const krajeStyle = new Style({
stroke: new Stroke({
color: '#000000',
width: 0.6,
}),
});
export const krajeLayer = new VectorLayer({
source: new VectorSource({
format: new TopoJSON({dataProjection: 'EPSG:5514'}),
url: require('./data/kraje_cr_20210310_5p_5514.topojson').default,
overlaps: false,
}),
editor: {editable: false},
visible: true,
style: krajeStyle,
title: 'Kraje ČR',
attributions: ['CC-BY ČÚZK, 2021'],
});
export const AppConfig = {
useProxy: false,
//proxyPrefix: '../8085/',
geonamesUser: env.geonamesUser,
default_layers: [cartodbLayer, osmLayer, mcr500Layer, ortofotoLayer],
popUpDisplay: 'hover',
project_name: 'erra/map',
default_view: new View({
projection: sjtskProjection,
center: transform([15.628, 49.864249], 'EPSG:4326', 'EPSG:5514'),
zoom: 7.6,
units: 'm',
}),
advanced_form: true,
datasources: [],
hostname: {
default: {
title: 'Default',
type: 'default',
editable: false,
url: getHostname(),
},
},
panelWidths: {
datasource_selector: 400,
},
panelsEnabled: {
composition_browser: false,
feature_crossfilter: false,
info: true,
saveMap: false,
sensors: false,
tracking: false,
routing: false,
permalink: false,
legend: false,
feature_table: false,
draw: false,
},
status_manager_url: '/statusmanager/',
sidebarPosition: 'right',
sizeMode: 'fullscreen',
translationOverrides: i18n,
};
export default AppConfig;