aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuilhem Moulin <guilhem@fripost.org>2025-06-12 14:18:28 +0200
committerGuilhem Moulin <guilhem@fripost.org>2025-06-12 19:31:47 +0200
commit05a018f27aba3a20fd581cb88daa8afbbd3407de (patch)
tree8d27d74c988a18cbac27caff6bc95e9a5d1b3240
parent1f09018cf8c5e2ddc27a5afa89efeaf19c0eac4a (diff)
Factor out Popover handling into separate module.
-rw-r--r--main.js407
-rw-r--r--src/layers.js1387
-rw-r--r--src/popover.js1959
3 files changed, 1961 insertions, 1792 deletions
diff --git a/main.js b/main.js
index acc5cd6..aa58199 100644
--- a/main.js
+++ b/main.js
@@ -29,8 +29,6 @@ import ScaleLine from 'ol/control/ScaleLine.js';
import Zoom from 'ol/control/Zoom.js';
import ZoomSlider from 'ol/control/ZoomSlider.js';
-import Overlay from 'ol/Overlay.js';
-
import MVT from 'ol/format/MVT.js';
import VectorTileLayer from 'ol/layer/VectorTile.js';
import VectorTile from 'ol/source/VectorTile.js';
@@ -43,8 +41,6 @@ import Point from 'ol/geom/Point.js';
import Fill from 'ol/style/Fill.js';
import Icon from 'ol/style/Icon.js';
-import Stroke from 'ol/style/Stroke.js';
-import Style from 'ol/style/Style.js';
import proj4 from 'proj4';
import { get as getProjection } from 'ol/proj.js';
@@ -53,6 +49,7 @@ import { register as registerProjection } from 'ol/proj/proj4.js';
import { Modal, Popover } from 'bootstrap';
import { layers } from './src/layers.js';
+import { popover } from './src/popover.js';
import './src/style.css';
proj4.defs('EPSG:3006', '+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs');
@@ -2234,404 +2231,4 @@ const infoMetadataAccordions = [];
};
})();
-/* popup and feature overlays */
-(function() {
- const popupOverlay = new Overlay({
- stopEvent: true,
- element: popup,
- });
- map.addOverlay(popupOverlay);
-
- let popover, overlayAttributes = [], overlayAttrIdx = 0;
-
- const header = document.createElement('div');
- header.classList.add('d-flex');
-
- const headerGrabbingArea = document.createElement('div');
- headerGrabbingArea.classList.add('flex-grow-1', 'grabbing-area', 'pe-2', 'me-2');
- header.appendChild(headerGrabbingArea);
-
- headerGrabbingArea.onmousedown = function(event) {
- if (event.button != 0) {
- return;
- }
- const popoverTip = Popover.getInstance(popup).tip;
- if (popoverTip.classList.contains('popover-maximized')) {
- return;
- }
- pageNode.classList.add('grabbing-area-grabbed');
-
- if (!popoverTip.classList.contains('popover-detached')) {
- /* detach popover tip */
- popoverTip.classList.add('popover-detached');
- const rect = popoverTip.getBoundingClientRect();
- const style = popoverTip.style;
- style.display = 'none'; /* avoid reflows between the following assignments */
- style.position = 'absolute';
- style.transform = '';
- style.inset = `${rect.top}px auto auto ${rect.left}px`;
- style.display = '';
- }
-
- let clientX = event.clientX, clientY = event.clientY;
- document.onmousemove = function(event) {
- const offsetX = clientX - event.clientX;
- const offsetY = clientY - event.clientY;
- clientX = event.clientX;
- clientY = event.clientY;
- popoverTip.style.top = (popoverTip.offsetTop - offsetY).toString() + 'px';
- popoverTip.style.left = (popoverTip.offsetLeft - offsetX).toString() + 'px';
- };
-
- document.onmouseup = function(event) {
- if (event.button != 0) {
- return;
- }
- pageNode.classList.remove('grabbing-area-grabbed');
- document.onmousemove = null;
- document.onmouseup = null;
- };
- };
-
- const pageNode = document.createElement('h6');
- headerGrabbingArea.appendChild(pageNode);
-
- const pageNum = document.createElement('span');
- const pageCount = document.createElement('span');
- pageNode.appendChild(document.createTextNode('Träff '));
- pageNode.appendChild(pageNum);
- pageNode.appendChild(document.createTextNode(' av '));
- pageNode.appendChild(pageCount);
-
- const featureOverlayStyle = new Style({
- stroke: new Stroke({
- color: 'rgba(0, 255, 255, .8)',
- width: 3,
- }),
- });
- const updateFeatureOverlayLayer = function(layer_group, layer, id) {
- const lyr = mapLayers[layer_group];
- if (lyr == null) {
- return;
- }
- const urls = lyr.getSource().getUrls();
- const source = featureOverlayLayer.getSource();
- if (source.getUrls().length < 1 || source.getUrls()[0] !== urls[0]) {
- featureOverlayLayer.setVisible(false);
- source.setUrls(urls);
- }
- featureOverlayLayer.setStyle(function(feature) {
- if (feature.getId() === id && feature.getProperties().layer === layer) {
- return featureOverlayStyle;
- } else {
- return undefined;
- }
- });
- featureOverlayLayer.setVisible(true);
- featureOverlayLayer.changed();
- };
- const refreshPopover = function() {
- const attr = overlayAttributes[overlayAttrIdx];
- updateFeatureOverlayLayer(attr.layer_group, attr.layer, attr.ogc_fid);
-
- pageNum.innerHTML = (overlayAttrIdx + 1).toString();
- const content = formatFeaturePropertiesToHTML(attr);
- popover.tip.getElementsByClassName('popover-body')[0].replaceChildren(content);
- };
- const onClickPageChange = function(event, offset) {
- const btn = event.target;
- if (btn.classList.contains('disabled') || popover?.tip == null) {
- return;
- }
- if (overlayAttrIdx + offset < 0 || overlayAttrIdx + offset > overlayAttributes.length - 1) {
- return;
- }
-
- overlayAttrIdx += offset;
- if (overlayAttrIdx < 1) {
- btnPrev.classList.add('disabled');
- } else {
- btnPrev.classList.remove('disabled');
- }
- if (overlayAttrIdx < overlayAttributes.length - 1) {
- btnNext.classList.remove('disabled');
- } else {
- btnNext.classList.add('disabled');
- }
-
- refreshPopover();
- setTimeout(function() { btn.blur() }, 100);
- };
-
- const btnPrev = document.createElement('button');
- btnPrev.classList.add('popover-button', 'popover-button-prev');
- btnPrev.setAttribute('type', 'button');
- btnPrev.title = 'Föregående träff';
- btnPrev.setAttribute('aria-label', btnPrev.title);
- btnPrev.onclick = function(event) {
- return onClickPageChange(event, -1);
- };
-
- const btnNext = document.createElement('button');
- btnNext.classList.add('popover-button', 'popover-button-next');
- btnNext.setAttribute('type', 'button');
- btnNext.title = 'Nästa träff';
- btnNext.setAttribute('aria-label', btnNext.title);
- btnNext.onclick = function(event) {
- return onClickPageChange(event, +1);
- };
-
- const btnExpand = document.createElement('button');
- btnExpand.classList.add('popover-button', 'popover-button-expand');
- btnExpand.setAttribute('type', 'button');
- const btnExpandTitle = 'Förstora';
- const btnExpandTitle2 = 'Förminska';
- btnExpand.setAttribute('aria-label', btnExpand.title);
- btnExpand.onclick = function() {
- if (popover?.tip == null) {
- return;
- }
- if (!popover.tip.classList.contains('popover-maximized')) {
- popover.tip.classList.add('popover-maximized');
- btnExpand.classList.replace('popover-button-expand', 'popover-button-reduce');
- btnExpand.title = btnExpandTitle2;
- btnExpand.setAttribute('aria-label', btnExpand.title);
- } else {
- popover.tip.classList.remove('popover-maximized');
- btnExpand.classList.replace('popover-button-reduce', 'popover-button-expand');
- btnExpand.title = btnExpandTitle;
- btnExpand.setAttribute('aria-label', btnExpand.title);
- }
- setTimeout(function() { btnExpand.blur() }, 100);
- };
-
- const btnClose = document.createElement('button');
- btnClose.classList.add('popover-button', 'popover-button-close');
- btnClose.setAttribute('type', 'button');
- btnClose.title = 'Stäng';
- btnClose.setAttribute('aria-label', btnClose.title);
- btnClose.onclick = function() {
- featureOverlayLayer.setVisible(false);
- featureOverlayLayer.changed();
- popover?.dispose();
- };
-
- header.appendChild(btnPrev);
- header.appendChild(btnNext);
- header.appendChild(btnExpand);
- header.appendChild(btnClose);
-
- const formatFeaturePropertiesToHTML = function(properties) {
- /* turn the properties into a fine table */
- const table = document.createElement('table');
- table.classList.add('table', 'table-sm', 'table-borderless', 'table-hover');
-
- const tbody = document.createElement('tbody');
- table.appendChild(tbody);
-
- const def = layers[properties.layer_group + '.' + properties.layer];
- def.popover.forEach(function([desc, key, opts]) {
- let v = properties[key];
- if (opts === undefined) {
- opts = {};
- }
- if (opts.fn !== undefined) {
- if (opts.fn === 'length') {
- if (v < 1000) {
- opts.unit = 'm';
- } else {
- v /= 1000;
- v = Math.round(v*100) / 100;
- opts.unit = 'km';
- }
- } else if (opts.fn === 'area') {
- if (v < 10000) {
- opts.unit = 'm²';
- } else if (v < 10000 * 10000) {
- v /= 10000;
- opts.unit = 'ha';
- } else {
- v /= 1000000;
- opts.unit = 'km²';
- }
- v = Math.round(v*100) / 100;
- } else {
- v = opts.fn(v);
- }
- }
- if (v == null) {
- v = document.createTextNode('');
- } else if (!(v instanceof HTMLElement)) {
- if (typeof(v) === 'number' && opts.unit !== undefined) {
- v = v.toLocaleString('sv-SE');
- } else if (typeof(v) === 'boolean') {
- v = v ? 'Ja' : 'Nej';
- }
- if (opts.unit !== undefined && v !== '') {
- v += '\u202F' + opts.unit;
- }
- v = document.createTextNode(v);
- }
-
- const tr = document.createElement('tr');
- tbody.appendChild(tr);
-
- const td1 = document.createElement('td');
- tr.appendChild(td1);
- const textDesc = document.createTextNode(desc);
- td1.appendChild(textDesc);
-
- const td2 = document.createElement('td');
- tr.appendChild(td2);
- td2.appendChild(v);
- if (opts.classes !== undefined) {
- opts.classes.forEach((c) => td2.classList.add(c));
- }
- });
-
- const content = document.createElement('div');
- if (def.popoverTitle !== undefined) {
- const h = document.createElement('h6');
- content.appendChild(h);
- const textNode = document.createTextNode(def.popoverTitle);
- h.appendChild(textNode);
- }
-
- content.appendChild(table);
- return content;
- };
-
- const container0 = map.getViewport().getElementsByClassName('ol-overlaycontainer-stopevent')[0];
- map.on('singleclick', function(event) {
- /* clear the overlay list */
- featureOverlayLayer.setVisible(false);
- featureOverlayLayer.changed();
- overlayAttributes = [];
- overlayAttrIdx = 0;
-
- /* dispose any pre-existing popover if not in detached mode */
- popover = Popover.getInstance(popup);
- if (popover !== null) {
- const popoverTip = popover.tip;
- if (popoverTip !== null && !popoverTip.classList.contains('popover-detached')) {
- popover.dispose();
- }
- }
-
- const size = map.getSize();
- if (size[0] < 576 || size[1] < 576) {
- return;
- }
-
- /* unclear how many feature we'll find, don't render prev/next buttons for now */
- pageNode.classList.add('d-none');
- btnPrev.classList.add('d-none', 'disabled');
- btnNext.classList.add('d-none', 'disabled');
-
- /* never start in maximized mode */
- if (popover?.tip != null) {
- popover.tip.classList.remove('popover-maximized');
- }
- btnExpand.classList.replace('popover-button-reduce', 'popover-button-expand');
- btnExpand.title = btnExpandTitle;
- btnExpand.setAttribute('aria-label', btnExpand.title);
-
- const fetch_body = []
- map.forEachFeatureAtPixel(event.pixel, function(feature, layer) {
- const layerGroup = layer.get('layerGroup');
- const layerName = feature.getProperties().layer;
- const def = layers[layerGroup + '.' + layerName];
- if (def?.popover != null) {
- /* skip layers which didn't opt-in for popover */
- if (!fetch_body.length) {
- document.body.classList.add('inprogress');
- if (popover?.tip != null) {
- popover.tip.classList.add('inprogress');
- }
- }
- fetch_body.push({
- layer_group: layerGroup,
- layer: layerName,
- fid: feature.getId() ?? -1,
- });
- if (fetch_body.length >= 100) {
- return true; /* enough matches already, stop detection here */
- }
- }
- }, {
- hitTolerance: 5,
- checkWrapped: false,
- layerFilter: (l) => l.get('layerGroup') != null,
- });
-
- if (fetch_body.length === 0) {
- /* dispose pre-detached popover */
- popover?.dispose();
- return;
- }
-
- fetch('/q', {
- method: 'POST',
- body: JSON.stringify(fetch_body),
- headers: {
- 'Content-Type': 'application/json; charset=UTF-8'
- }
- })
- .then(function(resp) {
- if (resp.status === 200) {
- return resp.json();
- } else {
- throw new Error(`${resp.url} [${resp.status}]`);
- }
- })
- .then(function(data) {
- /* the data is received from the CGI in the order it was sent */
- /* TODO optimizations on the CGI would break the above assumption, so the
- * decoded JSON response would need to be reordered to match fetch_body */
- overlayAttributes = data
- if (overlayAttributes.length === 0) {
- /* dispose pre-detached popover */
- popover?.dispose();
- return;
- }
-
- pageCount.innerHTML = overlayAttributes.length.toString();
- if (overlayAttributes.length >= 2) {
- /* render prev/pre buttons */
- btnNext.classList.remove('d-none', 'disabled');
- btnPrev.classList.remove('d-none');
- pageNode.classList.remove('d-none');
- }
- if (popover?.tip == null) {
- /* create a new popover (we're not already showing one in detached mode) */
- pageNum.innerHTML = (overlayAttrIdx + 1).toString();
- popupOverlay.setPosition(event.coordinate);
-
- const attr = overlayAttributes[0];
- updateFeatureOverlayLayer(attr.layer_group, attr.layer, attr.ogc_fid);
- popover = new Popover(popup, {
- template: '<div class="popover" role="tooltip"><div class="popover-arrow"></div>' +
- '<div class="popover-header"></div><div class="popover-body"></div></div>',
- title: header,
- content: formatFeaturePropertiesToHTML(attr),
- html: true,
- placement: 'right',
- fallbackPlacements: ['right', 'left', 'bottom', 'top'],
- container: container0,
- });
- popover.show();
- }
- else if (popover.tip.classList.contains('popover-detached')) {
- /* update existing detached mode popover */
- refreshPopover();
- popover.tip.classList.remove('inprogress');
- }
- })
- .catch(function(e) {
- console.log(e);
- })
- .finally(function() {
- document.body.classList.remove('inprogress');
- });
- });
-}());
+popover(map, mapLayers, featureOverlayLayer);
diff --git a/src/layers.js b/src/layers.js
index 6f72dfc..688bb44 100644
--- a/src/layers.js
+++ b/src/layers.js
@@ -26,21 +26,6 @@ import Style from 'ol/style/Style.js';
/* TODO: this should really be refactored… */
export const layers = {
'mrr.appr_ec': {
- popoverTitle: 'Bearbetningskoncession \u2013 beviljad',
- popover: [
- ['Namn', 'name'],
- ['Koncessionsmineral', 'mineral'],
- ['Ägare', 'owners'],
- ['Tillståndsid', 'licenceid', { classes: ['feature-attr-mrr-license-id'] }],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Giltig från', 'validfrom'],
- ['Giltig till', 'validto'],
- ['Diarienummer', 'diarynr', { classes: ['feature-attr-dnr'] }],
- ['Ansökningsdatum', 'appl_date'],
- ['Beslutsdatum', 'dec_date'],
- //['Kommun', 'Municipality'],
- //['Län', 'County'],
- ],
legend: { zoomLevel: 4 },
style: [0, .1, .5, .5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 5].map(function(width, z) {
return new Style({
@@ -56,17 +41,6 @@ export const layers = {
}),
},
'mrr.appl_ec': {
- popoverTitle: 'Bearbetningskoncession \u2013 ansökt',
- popover: [
- ['Namn', 'name'],
- ['Koncessionsmineral', 'mineral'],
- ['Sökande', 'owners'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Ansökningsdatum', 'appl_date'],
- ['Diarienummer', 'diarynr', { classes: ['feature-attr-dnr'] }],
- //['Kommun', 'Municipality'],
- //['Län', 'County'],
- ],
legend: { zoomLevel: 4 },
style: [0, .1, .5, .5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 5].map(function(width, z) {
return new Style({
@@ -83,21 +57,6 @@ export const layers = {
}),
},
'mrr.appr_met': {
- popoverTitle: 'Undersökningstillstånd, metaller och industrimineral \u2013 beviljad',
- popover: [
- ['Namn', 'name'],
- ['Koncessionsmineral', 'mineral'],
- ['Ägare', 'owners'],
- ['Tillståndsid', 'licenceid', { classes: ['feature-attr-mrr-license-id'] }],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Giltig från', 'validfrom'],
- ['Giltig till', 'validto'],
- ['Diarienummer', 'diarynr', { classes: ['feature-attr-dnr'] }],
- ['Ansökningsdatum', 'appl_date'],
- ['Beslutsdatum', 'dec_date'],
- //['Kommun', 'Municipality'],
- //['Län', 'County'],
- ],
legend: { zoomLevel: 4 },
style: [0, .1, .5, .5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 5].map(function(width, z) {
return new Style({
@@ -113,17 +72,6 @@ export const layers = {
}),
},
'mrr.appl_met': {
- popoverTitle: 'Undersökningstillstånd, metaller och industrimineral \u2013 ansökt',
- popover: [
- ['Namn', 'name'],
- ['Koncessionsmineral', 'mineral'],
- ['Sökande', 'owners'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Ansökningsdatum', 'appl_date'],
- ['Diarienummer', 'diarynr', { classes: ['feature-attr-dnr'] }],
- //['Kommun', 'Municipality'],
- //['Län', 'County'],
- ],
legend: { zoomLevel: 4 },
style: [0, .1, .5, .5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 5].map(function(width, z) {
return new Style({
@@ -140,21 +88,6 @@ export const layers = {
}),
},
'mrr.appr_ogd': {
- popoverTitle: 'Undersökningstillstånd, olja, gas och diamant \u2013 beviljad',
- popover: [
- ['Namn', 'name'],
- ['Koncessionsmineral', 'mineral'],
- ['Ägare', 'owners'],
- ['Tillståndsid', 'licenceid', { classes: ['feature-attr-mrr-license-id'] }],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Giltig från', 'validfrom'],
- ['Giltig till', 'validto'],
- ['Diarienummer', 'diarynr', { classes: ['feature-attr-dnr'] }],
- ['Ansökningsdatum', 'appl_date'],
- ['Beslutsdatum', 'dec_date'],
- //['Kommun', 'Municipality'],
- //['Län', 'County'],
- ],
legend: { zoomLevel: 4 },
style: [0, .1, .5, .5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 5].map(function(width, z) {
return new Style({
@@ -170,17 +103,6 @@ export const layers = {
}),
},
'mrr.appl_ogd': {
- popoverTitle: 'Undersökningstillstånd, olja, gas och diamant \u2013 ansökt',
- popover: [
- ['Namn', 'name'],
- ['Koncessionsmineral', 'mineral'],
- ['Sökande', 'owners'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Ansökningsdatum', 'appl_date'],
- ['Diarienummer', 'diarynr', { classes: ['feature-attr-dnr'] }],
- //['Kommun', 'Municipality'],
- //['Län', 'County'],
- ],
legend: { zoomLevel: 4 },
style: [0, .1, .5, .5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 5].map(function(width, z) {
return new Style({
@@ -197,18 +119,6 @@ export const layers = {
}),
},
'mrr.appr_dl': {
- popoverTitle: 'Markanvisning till koncession',
- popover: [
- ['Namn', 'name'],
- ['Tillhörande bearbetnings\u00ADkoncession(er)', 'conc_name'],
- ['Tillståndsid', 'licenceid', { classes: ['feature-attr-mrr-license-id'] }],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Diarienummer', 'diarynr', { classes: ['feature-attr-dnr'] }],
- ['Ansökningsdatum', 'appl_date'],
- ['Beslutsdatum', 'dec_date'],
- //['Kommun', 'Municipality'],
- //['Län', 'County'],
- ],
legend: { zoomLevel: 4 },
style: [0, .1, .5, .5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 5].map(function(width, z) {
return new Style({
@@ -225,12 +135,6 @@ export const layers = {
},
'svk.ledningar': {
- popoverTitle: 'Kraftledning (befintlig)',
- popover: [
- ['Förläggning', 'Placement'],
- ['Spänning', 'Voltage', { unit: 'kV' }],
- ['Ledlängd', 'geom_length', { fn: 'length' }],
- ],
legend: { zoomLevel: 5, type: 'linestring', reuse_canvas: true },
style: [1, 1.5, 2, 2, 2, 2, 3, 4, 5, 6, 8, 10].map(function(width) {
return new Style({
@@ -258,23 +162,6 @@ export const layers = {
})),
},
'svk.transmissionsnatsprojekt': {
- popoverTitle: 'Transmissionsnätsprojekt',
- popover: [
- ['Projektnamn', 'Name'],
- ['Spänning', 'Voltage', { unit: 'kV' }],
- ['Länk', 'Url', { fn: function(v) {
- if (v == null | v === '') {
- return;
- }
- const a = document.createElement('a');
- a.href = v;
- a.target = '_blank';
- const i = document.createElement('i');
- i.classList.add('bi', 'bi-box-arrow-up-right');
- a.appendChild(i);
- return a;
- }}],
- ],
legend: { zoomLevel: 5, type: 'linestring' },
style: [1, 1.5, 2, 2, 2, 2, 3, 4, 5, 6, 8, 10].map(function(width) {
return new Style({
@@ -317,25 +204,6 @@ export const layers = {
},
'vbk.area_current': {
- popoverTitle: 'Landbaserad projekteringsområde för vindkraft',
- popover: [
- ['Projektnamn', 'Projektnamn'],
- ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
- ['Aktuella verk', 'AntalVerk'],
- ['Antal ej koordinatsatta verk', 'AntalEjXY'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Beräknad årsproduktion', 'Calprod', { unit: 'GWh' }],
- ['Planerad byggstart', 'PlaneradByggstart'],
- ['Planerat drifttagande', 'PlaneratDrift'],
- ['Ändringsansökan pågår', 'AndringsansokanPagar'],
- ['Under byggnation', 'UnderByggnation'],
- ['Organisationsnamn', 'Organisationsnamn'],
- ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
- //['Kommun', 'KOMNAMN'],
- //['Län', 'LANSNAMN'],
- ['Elområde', 'ElNamn'],
- ['Senast uppdaterat', 'SenasteUppdaterat'],
- ],
legend: { zoomLevel: 1 },
style: [.5, 1, 1.5, 1.5, 2, 2, 2.5, 2.5, 3, 3.5, 4, 5].map(function(width, z) {
return new Style({
@@ -351,24 +219,6 @@ export const layers = {
}),
},
'vbk.area_notcurrent': {
- popoverTitle: 'Landbaserad projekteringsområde för vindkraft \u2013 ej aktuell',
- popover: [
- ['Projektnamn', 'Projektnamn'],
- ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
- ['Aktuella verk', 'AntalVerk'],
- ['Antal ej koordinatsatta verk', 'AntalEjXY'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Beräknad årsproduktion', 'Calprod', { unit: 'GWh' }],
- ['Planerad byggstart', 'PlaneradByggstart'],
- ['Planerat drifttagande', 'PlaneratDrift'],
- ['Ändringsansökan pågår', 'AndringsansokanPagar'],
- ['Organisationsnamn', 'Organisationsnamn'],
- ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
- //['Kommun', 'KOMNAMN'],
- //['Län', 'LANSNAMN'],
- ['Elområde', 'ElNamn'],
- ['Senast uppdaterat', 'SenasteUppdaterat'],
- ],
legend: { zoomLevel: 1 },
style: [.5, 1, 1.5, 1.5, 2, 2, 2.5, 2.5, 3, 3.5, 4, 5].map(function(width, z) {
return new Style({
@@ -385,30 +235,6 @@ export const layers = {
}),
},
'vbk.offshore_completed': {
- popoverTitle: 'Havsbaserad vindkraft \u2013 tillståndsansökan uppförd',
- popover: [
- ['Projektnamn', 'Projektnamn'],
- ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
- ['Verksamhetsutövare', 'Organisationsnamn'],
- ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
- ['Projektstatus', 'Projektstatus'],
- ['Diarienummer', 'Diarienummer'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Samrådsunderlag inlämnat', 'SamradsunderlagInlamnat'],
- ['Tillståndsansökan inlämnad', 'AnsokanInlamnat'],
- ['Tillståndsansökan beviljad', 'AnsokanBeviljad'],
- ['Överklagad', 'AnsokanOverklagad'],
- ['Natura2000 ansökan', 'Natura2000_Ansokan'],
- ['Natura2000 beslutsdatum', 'Natura2000_Beslutdatum'],
- ['Parken uppförd', 'Uppfort'],
- ['Beviljat antal verk', 'BeviljatAntalVerk'],
- ['Uppfört antal verk', 'UppfortAntalVerk'],
- ['Beviljad maxhöjd', 'BeviljadMaxhojd', { unit: 'm' }],
- ['Installerad effekt', 'InstalleradEffekt', { unit: 'MW' }],
- ['Beräknad årsproduktion', 'Calprod', { unit: 'GWh' }],
- ['Elområde', 'ElNamn'],
- ['Senast uppdaterat', 'SenasteUppdaterat'],
- ],
legend: { zoomLevel: 1 },
style: [.5, 1, 1.5, 1.5, 2, 2, 2.5, 2.5, 3, 3.5, 4, 5].map(function(width) {
return new Style({
@@ -424,36 +250,6 @@ export const layers = {
}),
},
'vbk.offshore_approved': {
- popoverTitle: 'Havsbaserad vindkraft \u2013 tillståndsansökan beviljad',
- popover: [
- ['Projektnamn', 'Projektnamn'],
- ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
- ['Verksamhetsutövare', 'Organisationsnamn'],
- ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
- ['Projektstatus', 'Projektstatus'],
- ['Diarienummer', 'Diarienummer'],
- ['Ändringsansökan pågår', 'AndringsansokanPagar'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Samrådsunderlag inlämnat', 'SamradsunderlagInlamnat'],
- ['Tillståndsansökan inlämnad', 'AnsokanInlamnat'],
- ['Tillståndsansökan återkallad', 'AnsokanAterkallad'],
- ['Tillståndsansökan beviljad', 'AnsokanBeviljad'],
- ['Natura2000 ansökan', 'Natura2000_Ansokan'],
- ['Natura2000 beslutsdatum', 'Natura2000_Beslutdatum'],
- ['Under byggnation', 'UnderByggnation'],
- ['Planerat antal verk (min)', 'PlaneratAntalVerkMin'],
- ['Planerat antal verk (max)', 'PlaneratAntalVerkMax'],
- ['Panerad totalhöjd (min)', 'PlaneradHojdMin', { unit: 'm' }],
- ['Panerad totalhöjd (max)', 'PlaneradHojdMax', { unit: 'm' }],
- ['Planerad årsproduktion (min)', 'PlaneradProduktionMin', { unit: 'GWh' }],
- ['Planerad årsproduktion (max)', 'PlaneradProduktionMax', { unit: 'GWh' }],
- ['Planerad byggstart', 'PlaneradByggstart'],
- ['Planerat drifttagande', 'PlaneratDrift'],
- ['Beviljat antal verk', 'BeviljatAntalVerk'],
- ['Beviljad maxhöjd', 'BeviljadMaxhojd', { unit: 'm' }],
- ['Elområde', 'ElNamn'],
- ['Senast uppdaterat', 'SenasteUppdaterat'],
- ],
legend: { zoomLevel: 1 },
style: [.5, 1, 1.5, 1.5, 2, 2, 2.5, 2.5, 3, 3.5, 4, 5].map(function(width) {
return new Style({
@@ -469,31 +265,6 @@ export const layers = {
}),
},
'vbk.offshore_amended': {
- popoverTitle: 'Havsbaserad vindkraft \u2013 ändringsansökan',
- popover: [
- ['Projektnamn', 'Projektnamn'],
- ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
- ['Verksamhetsutövare', 'Organisationsnamn'],
- ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
- ['Projektstatus', 'Projektstatus'],
- ['Diarienummer', 'Diarienummer'],
- //['Ändringsansökan pågår', 'AndringsansokanPagar'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Samrådsunderlag inlämnat', 'SamradsunderlagInlamnat'],
- ['Tillståndsansökan inlämnad', 'AnsokanInlamnat'],
- //['Natura2000 ansökan', 'Natura2000_Ansokan'],
- //['Natura2000 beslutsdatum', 'Natura2000_Beslutdatum'],
- ['Planerat antal verk (min)', 'PlaneratAntalVerkMin'],
- ['Planerat antal verk (max)', 'PlaneratAntalVerkMax'],
- ['Panerad totalhöjd (min)', 'PlaneradHojdMin', { unit: 'm' }],
- ['Panerad totalhöjd (max)', 'PlaneradHojdMax', { unit: 'm' }],
- ['Planerad årsproduktion (min)', 'PlaneradProduktionMin', { unit: 'GWh' }],
- ['Planerad årsproduktion (max)', 'PlaneradProduktionMax', { unit: 'GWh' }],
- ['Planerad byggstart', 'PlaneradByggstart'],
- ['Planerat drifttagande', 'PlaneratDrift'],
- ['Elområde', 'ElNamn'],
- ['Senast uppdaterat', 'SenasteUppdaterat'],
- ],
legend: { zoomLevel: 2 },
style: [4, 8, 16, 16, 32, 32, 64, 64, 64, 128, 128, 128].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -522,31 +293,6 @@ export const layers = {
}),
},
'vbk.offshore_rejected': {
- popoverTitle: 'Havsbaserad vindkraft \u2013 tillståndsansökan avslagen',
- popover: [
- ['Projektnamn', 'Projektnamn'],
- ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
- ['Verksamhetsutövare', 'Organisationsnamn'],
- ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
- ['Projektstatus', 'Projektstatus'],
- ['Diarienummer', 'Diarienummer'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Samrådsunderlag inlämnat', 'SamradsunderlagInlamnat'],
- ['Tillståndsansökan inlämnad', 'AnsokanInlamnat'],
- ['Tillståndsansökan avslagen', 'AnsokanAvslagen'],
- ['Natura2000 ansökan', 'Natura2000_Ansokan'],
- ['Natura2000 beslutsdatum', 'Natura2000_Beslutdatum'],
- ['Planerat antal verk (min)', 'PlaneratAntalVerkMin'],
- ['Planerat antal verk (max)', 'PlaneratAntalVerkMax'],
- ['Panerad totalhöjd (min)', 'PlaneradHojdMin', { unit: 'm' }],
- ['Panerad totalhöjd (max)', 'PlaneradHojdMax', { unit: 'm' }],
- ['Planerad årsproduktion (min)', 'PlaneradProduktionMin', { unit: 'GWh' }],
- ['Planerad årsproduktion (max)', 'PlaneradProduktionMax', { unit: 'GWh' }],
- ['Planerad byggstart', 'PlaneradByggstart'],
- ['Planerat drifttagande', 'PlaneratDrift'],
- ['Elområde', 'ElNamn'],
- ['Senast uppdaterat', 'SenasteUppdaterat'],
- ],
legend: { zoomLevel: 1 },
style: [.5, 1, 1.5, 1.5, 2, 2, 2.5, 2.5, 3, 3.5, 4, 5].map(function(width) {
return new Style({
@@ -562,34 +308,6 @@ export const layers = {
}),
},
'vbk.offshore_appealed': {
- popoverTitle: 'Havsbaserad vindkraft \u2013 överklagad',
- popover: [
- ['Projektnamn', 'Projektnamn'],
- ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
- ['Verksamhetsutövare', 'Organisationsnamn'],
- ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
- ['Projektstatus', 'Projektstatus'],
- ['Diarienummer', 'Diarienummer'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Samrådsunderlag inlämnat', 'SamradsunderlagInlamnat'],
- ['Tillståndsansökan inlämnad', 'AnsokanInlamnat'],
- ['Tillståndsansökan beviljad', 'AnsokanBeviljad'],
- ['Överklagad', 'AnsokanOverklagad'],
- ['Natura2000 ansökan', 'Natura2000_Ansokan'],
- ['Natura2000 beslutsdatum', 'Natura2000_Beslutdatum'],
- ['Planerat antal verk (min)', 'PlaneratAntalVerkMin'],
- ['Planerat antal verk (max)', 'PlaneratAntalVerkMax'],
- ['Panerad totalhöjd (min)', 'PlaneradHojdMin', { unit: 'm' }],
- ['Panerad totalhöjd (max)', 'PlaneradHojdMax', { unit: 'm' }],
- ['Planerad årsproduktion (min)', 'PlaneradProduktionMin', { unit: 'GWh' }],
- ['Planerad årsproduktion (max)', 'PlaneradProduktionMax', { unit: 'GWh' }],
- ['Planerad byggstart', 'PlaneradByggstart'],
- ['Planerat drifttagande', 'PlaneratDrift'],
- ['Beviljat antal verk', 'BeviljatAntalVerk'],
- ['Beviljad maxhöjd', 'BeviljadMaxhojd', { unit: 'm' }],
- ['Elområde', 'ElNamn'],
- ['Senast uppdaterat', 'SenasteUppdaterat'],
- ],
legend: { zoomLevel: 1 },
style: [.5, 1, 1.5, 1.5, 2, 2, 2.5, 2.5, 3, 3.5, 4, 5].map(function(width) {
return new Style({
@@ -605,30 +323,6 @@ export const layers = {
}),
},
'vbk.offshore_applied': {
- popoverTitle: 'Havsbaserad vindkraft \u2013 tillståndsansökan inlämnad',
- popover: [
- ['Projektnamn', 'Projektnamn'],
- ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
- ['Verksamhetsutövare', 'Organisationsnamn'],
- ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
- ['Projektstatus', 'Projektstatus'],
- ['Diarienummer', 'Diarienummer'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Samrådsunderlag inlämnat', 'SamradsunderlagInlamnat'],
- ['Tillståndsansökan inlämnad', 'AnsokanInlamnat'],
- ['Natura2000 ansökan', 'Natura2000_Ansokan'],
- ['Natura2000 beslutsdatum', 'Natura2000_Beslutdatum'],
- ['Planerat antal verk (min)', 'PlaneratAntalVerkMin'],
- ['Planerat antal verk (max)', 'PlaneratAntalVerkMax'],
- ['Panerad totalhöjd (min)', 'PlaneradHojdMin', { unit: 'm' }],
- ['Panerad totalhöjd (max)', 'PlaneradHojdMax', { unit: 'm' }],
- ['Planerad årsproduktion (min)', 'PlaneradProduktionMin', { unit: 'GWh' }],
- ['Planerad årsproduktion (max)', 'PlaneradProduktionMax', { unit: 'GWh' }],
- ['Planerad byggstart', 'PlaneradByggstart'],
- ['Planerat drifttagande', 'PlaneratDrift'],
- ['Elområde', 'ElNamn'],
- ['Senast uppdaterat', 'SenasteUppdaterat'],
- ],
legend: { zoomLevel: 1 },
style: [.5, 1, 1.5, 1.5, 2, 2, 2.5, 2.5, 3, 3.5, 4, 5].map(function(width) {
return new Style({
@@ -644,29 +338,6 @@ export const layers = {
}),
},
'vbk.offshore_consultation': {
- popoverTitle: 'Havsbaserad vindkraft \u2013 samråd inför tillståndsansökan',
- popover: [
- ['Projektnamn', 'Projektnamn'],
- ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
- ['Verksamhetsutövare', 'Organisationsnamn'],
- ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
- ['Projektstatus', 'Projektstatus'],
- ['Diarienummer', 'Diarienummer'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Samrådsunderlag inlämnat', 'SamradsunderlagInlamnat'],
- ['Natura2000 ansökan', 'Natura2000_Ansokan'],
- ['Natura2000 beslutsdatum', 'Natura2000_Beslutdatum'],
- ['Planerat antal verk (min)', 'PlaneratAntalVerkMin'],
- ['Planerat antal verk (max)', 'PlaneratAntalVerkMax'],
- ['Panerad totalhöjd (min)', 'PlaneradHojdMin', { unit: 'm' }],
- ['Panerad totalhöjd (max)', 'PlaneradHojdMax', { unit: 'm' }],
- ['Planerad årsproduktion (min)', 'PlaneradProduktionMin', { unit: 'GWh' }],
- ['Planerad årsproduktion (max)', 'PlaneradProduktionMax', { unit: 'GWh' }],
- ['Planerad byggstart', 'PlaneradByggstart'],
- ['Planerat drifttagande', 'PlaneratDrift'],
- ['Elområde', 'ElNamn'],
- ['Senast uppdaterat', 'SenasteUppdaterat'],
- ],
legend: { zoomLevel: 1 },
style: [.5, 1, 1.5, 1.5, 2, 2, 2.5, 2.5, 3, 3.5, 4, 5].map(function(width) {
return new Style({
@@ -682,28 +353,6 @@ export const layers = {
}),
},
'vbk.offshore_investigation': {
- popoverTitle: 'Havsbaserad vindkraft \u2013 inledande undersökningar',
- popover: [
- ['Projektnamn', 'Projektnamn'],
- ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
- ['Verksamhetsutövare', 'Organisationsnamn'],
- ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
- ['Projektstatus', 'Projektstatus'],
- ['Diarienummer', 'Diarienummer'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Natura2000 ansökan', 'Natura2000_Ansokan'],
- ['Natura2000 beslutsdatum', 'Natura2000_Beslutdatum'],
- ['Planerat antal verk (min)', 'PlaneratAntalVerkMin'],
- ['Planerat antal verk (max)', 'PlaneratAntalVerkMax'],
- ['Panerad totalhöjd (min)', 'PlaneradHojdMin', { unit: 'm' }],
- ['Panerad totalhöjd (max)', 'PlaneradHojdMax', { unit: 'm' }],
- ['Planerad årsproduktion (min)', 'PlaneradProduktionMin', { unit: 'GWh' }],
- ['Planerad årsproduktion (max)', 'PlaneradProduktionMax', { unit: 'GWh' }],
- ['Planerad byggstart', 'PlaneradByggstart'],
- ['Planerat drifttagande', 'PlaneratDrift'],
- ['Elområde', 'ElNamn'],
- ['Senast uppdaterat', 'SenasteUppdaterat'],
- ],
legend: { zoomLevel: 1 },
style: [4, 8, 16, 16, 32, 32, 64, 64, 64, 128, 128, 128].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -741,35 +390,6 @@ export const layers = {
}),
},
'vbk.offshore_revoked': {
- popoverTitle: 'Havsbaserad vindkraft \u2013 inte aktuell eller återkallad',
- popover: [
- ['Projektnamn', 'Projektnamn'],
- ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
- ['Verksamhetsutövare', 'Organisationsnamn'],
- ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
- ['Projektstatus', 'Projektstatus'],
- ['Diarienummer', 'Diarienummer'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Samrådsunderlag inlämnat', 'SamradsunderlagInlamnat'],
- ['Tillståndsansökan inlämnad', 'AnsokanInlamnat'],
- ['Tillståndsansökan återkallad', 'AnsokanAterkallad'],
- ['Tillståndsansökan beviljad', 'AnsokanBeviljad'],
- ['Överklagad', 'AnsokanOverklagad'],
- ['Natura2000 ansökan', 'Natura2000_Ansokan'],
- ['Natura2000 beslutsdatum', 'Natura2000_Beslutdatum'],
- ['Planerat antal verk (min)', 'PlaneratAntalVerkMin'],
- ['Planerat antal verk (max)', 'PlaneratAntalVerkMax'],
- ['Panerad totalhöjd (min)', 'PlaneradHojdMin', { unit: 'm' }],
- ['Panerad totalhöjd (max)', 'PlaneradHojdMax', { unit: 'm' }],
- ['Planerad årsproduktion (min)', 'PlaneradProduktionMin', { unit: 'GWh' }],
- ['Planerad årsproduktion (max)', 'PlaneradProduktionMax', { unit: 'GWh' }],
- ['Planerad byggstart', 'PlaneradByggstart'],
- ['Planerat drifttagande', 'PlaneratDrift'],
- ['Beviljat antal verk', 'BeviljatAntalVerk'],
- ['Beviljad maxhöjd', 'BeviljadMaxhojd', { unit: 'm' }],
- ['Elområde', 'ElNamn'],
- ['Senast uppdaterat', 'SenasteUppdaterat'],
- ],
legend: { zoomLevel: 1 },
style: [.5, 1, 1.5, 1.5, 2, 2, 2.5, 2.5, 3, 3.5, 4, 5].map(function(width) {
return new Style({
@@ -785,30 +405,6 @@ export const layers = {
}),
},
'vbk.station_completed': {
- popoverTitle: 'Landbaserad vindkraftverk \u2013 uppfört',
- popover: [
- ['Verk-ID', 'VerkID', { classes: ['feature-objid'] }],
- ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
- ['Projektnamn', 'Projektnamn'],
- ['Status', 'Status'],
- ['Handlingstyp', 'Handlingstyp'],
- ['Uppförandedatum', 'Uppfort'],
- ['Miljöbalken tillstånd tidsbegränsning', 'MB_Tillstand'],
- ['Totalhöjd', 'Totalhojd', { unit: 'm' }],
- ['Navhöjd', 'Navhojd', { unit: 'm' }],
- ['Rotordiameter', 'Rotordiameter', { unit: 'm' }],
- ['Maxeffekt', 'Maxeffekt', { unit: 'MW' }],
- ['Beräknad årsproduktion', 'Calprod', { unit: 'GWh' }],
- ['Fabrikat', 'Fabrikat'],
- ['Modell', 'Modell'],
- ['Organisationsnamn', 'Organisationsnamn'],
- ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
- ['Placering', 'Placering'],
- //['Kommun', 'KOMNAMN'],
- //['Län', 'LANSNAMN'],
- ['Elområde', 'ElNamn'],
- ['Datum för senaste uppdatering av verk', 'SenasteUppdaterat'],
- ],
legend: { zoomLevel: 7, type: 'point' },
style: [undefined, undefined, undefined, undefined, .125, .125, .25, .5, 1, 2, 4, 8].map(function(scale) {
return scale === undefined ? undefined : new Style({
@@ -822,28 +418,6 @@ export const layers = {
}),
},
'vbk.station_processed': {
- popoverTitle: 'Landbaserad vindkraftverk \u2013 handlagt',
- popover: [
- ['Verk-ID', 'VerkID', { classes: ['feature-objid'] }],
- ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
- ['Projektnamn', 'Projektnamn'],
- ['Status', 'Status'],
- ['Handlingstyp', 'Handlingstyp'],
- ['Totalhöjd', 'Totalhojd', { unit: 'm' }],
- ['Navhöjd', 'Navhojd', { unit: 'm' }],
- ['Rotordiameter', 'Rotordiameter', { unit: 'm' }],
- ['Maxeffekt', 'Maxeffekt', { unit: 'MW' }],
- ['Beräknad årsproduktion', 'Calprod', { unit: 'GWh' }],
- ['Fabrikat', 'Fabrikat'],
- ['Modell', 'Modell'],
- ['Organisationsnamn', 'Organisationsnamn'],
- ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
- ['Placering', 'Placering'],
- //['Kommun', 'KOMNAMN'],
- //['Län', 'LANSNAMN'],
- ['Elområde', 'ElNamn'],
- ['Datum för senaste uppdatering av verk', 'SenasteUppdaterat'],
- ],
legend: { zoomLevel: 7, type: 'point' },
style: [undefined, undefined, undefined, undefined, .125, .125, .25, .5, 1, 2, 4, 8].map(function(scale) {
return scale === undefined ? undefined : new Style({
@@ -857,29 +431,6 @@ export const layers = {
}),
},
'vbk.station_approved': {
- popoverTitle: 'Landbaserad vindkraftverk \u2013 beviljat',
- popover: [
- ['Verk-ID', 'VerkID', { classes: ['feature-objid'] }],
- ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
- ['Projektnamn', 'Projektnamn'],
- ['Status', 'Status'],
- ['Handlingstyp', 'Handlingstyp'],
- ['Miljöbalken tillstånd tidsbegränsning', 'MB_Tillstand'],
- ['Totalhöjd', 'Totalhojd', { unit: 'm' }],
- ['Navhöjd', 'Navhojd', { unit: 'm' }],
- ['Rotordiameter', 'Rotordiameter', { unit: 'm' }],
- ['Maxeffekt', 'Maxeffekt', { unit: 'MW' }],
- ['Beräknad årsproduktion', 'Calprod', { unit: 'GWh' }],
- ['Fabrikat', 'Fabrikat'],
- ['Modell', 'Modell'],
- ['Organisationsnamn', 'Organisationsnamn'],
- ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
- ['Placering', 'Placering'],
- //['Kommun', 'KOMNAMN'],
- //['Län', 'LANSNAMN'],
- ['Elområde', 'ElNamn'],
- ['Datum för senaste uppdatering av verk', 'SenasteUppdaterat'],
- ],
legend: { zoomLevel: 7, type: 'point' },
style: [undefined, undefined, undefined, undefined, .125, .125, .25, .5, 1, 2, 4, 8].map(function(scale) {
return scale === undefined ? undefined : new Style({
@@ -893,29 +444,6 @@ export const layers = {
}),
},
'vbk.station_revoked': {
- popoverTitle: 'Landbaserad vindkraftverk \u2013 inte längre aktuell/återkallat',
- popover: [
- ['Verk-ID', 'VerkID', { classes: ['feature-objid'] }],
- ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
- ['Projektnamn', 'Projektnamn'],
- ['Status', 'Status'],
- ['Handlingstyp', 'Handlingstyp'],
- ['Miljöbalken tillstånd tidsbegränsning', 'MB_Tillstand'],
- ['Totalhöjd', 'Totalhojd', { unit: 'm' }],
- ['Navhöjd', 'Navhojd', { unit: 'm' }],
- ['Rotordiameter', 'Rotordiameter', { unit: 'm' }],
- ['Maxeffekt', 'Maxeffekt', { unit: 'MW' }],
- ['Beräknad årsproduktion', 'Calprod', { unit: 'GWh' }],
- ['Fabrikat', 'Fabrikat'],
- ['Modell', 'Modell'],
- ['Organisationsnamn', 'Organisationsnamn'],
- ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
- ['Placering', 'Placering'],
- //['Kommun', 'KOMNAMN'],
- //['Län', 'LANSNAMN'],
- ['Elområde', 'ElNamn'],
- ['Datum för senaste uppdatering av verk', 'SenasteUppdaterat'],
- ],
legend: { zoomLevel: 7, type: 'point' },
style: [undefined, undefined, undefined, undefined, .125, .125, .25, .5, 1, 2, 4, 8].map(function(scale) {
return scale === undefined ? undefined : new Style({
@@ -929,29 +457,6 @@ export const layers = {
}),
},
'vbk.station_rejected': {
- popoverTitle: 'Landbaserad vindkraftverk \u2013 avslagit/nekat',
- popover: [
- ['Verk-ID', 'VerkID', { classes: ['feature-objid'] }],
- ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
- ['Projektnamn', 'Projektnamn'],
- ['Status', 'Status'],
- ['Handlingstyp', 'Handlingstyp'],
- ['Miljöbalken tillstånd tidsbegränsning', 'MB_Tillstand'],
- ['Totalhöjd', 'Totalhojd', { unit: 'm' }],
- ['Navhöjd', 'Navhojd', { unit: 'm' }],
- ['Rotordiameter', 'Rotordiameter', { unit: 'm' }],
- ['Maxeffekt', 'Maxeffekt', { unit: 'MW' }],
- ['Beräknad årsproduktion', 'Calprod', { unit: 'GWh' }],
- ['Fabrikat', 'Fabrikat'],
- ['Modell', 'Modell'],
- ['Organisationsnamn', 'Organisationsnamn'],
- ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
- ['Placering', 'Placering'],
- //['Kommun', 'KOMNAMN'],
- //['Län', 'LANSNAMN'],
- ['Elområde', 'ElNamn'],
- ['Datum för senaste uppdatering av verk', 'SenasteUppdaterat'],
- ],
legend: { zoomLevel: 7, type: 'point' },
style: [undefined, undefined, undefined, undefined, .125, .125, .25, .5, 1, 2, 4, 8].map(function(scale) {
return scale === undefined ? undefined : new Style({
@@ -965,29 +470,6 @@ export const layers = {
}),
},
'vbk.station_dismounted': {
- popoverTitle: 'Landbaserad vindkraftverk \u2013 nedmonterat',
- popover: [
- ['Verk-ID', 'VerkID', { classes: ['feature-objid'] }],
- ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
- ['Projektnamn', 'Projektnamn'],
- ['Status', 'Status'],
- ['Handlingstyp', 'Handlingstyp'],
- ['Uppförandedatum', 'Uppfort'],
- ['Totalhöjd', 'Totalhojd', { unit: 'm' }],
- ['Navhöjd', 'Navhojd', { unit: 'm' }],
- ['Rotordiameter', 'Rotordiameter', { unit: 'm' }],
- ['Maxeffekt', 'Maxeffekt', { unit: 'MW' }],
- ['Beräknad årsproduktion', 'Calprod', { unit: 'GWh' }],
- ['Fabrikat', 'Fabrikat'],
- ['Modell', 'Modell'],
- ['Organisationsnamn', 'Organisationsnamn'],
- ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
- ['Placering', 'Placering'],
- //['Kommun', 'KOMNAMN'],
- //['Län', 'LANSNAMN'],
- ['Elområde', 'ElNamn'],
- ['Datum för senaste uppdatering av verk', 'SenasteUppdaterat'],
- ],
legend: { zoomLevel: 7, type: 'point' },
style: [undefined, undefined, undefined, undefined, .125, .125, .25, .5, 1, 2, 4, 8].map(function(scale) {
return scale === undefined ? undefined : new Style({
@@ -1001,28 +483,6 @@ export const layers = {
}),
},
'vbk.station_appealed': {
- popoverTitle: 'Landbaserad vindkraftverk \u2013 överklagat',
- popover: [
- ['Verk-ID', 'VerkID', { classes: ['feature-objid'] }],
- ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
- ['Projektnamn', 'Projektnamn'],
- ['Status', 'Status'],
- ['Handlingstyp', 'Handlingstyp'],
- ['Totalhöjd', 'Totalhojd', { unit: 'm' }],
- ['Navhöjd', 'Navhojd', { unit: 'm' }],
- ['Rotordiameter', 'Rotordiameter', { unit: 'm' }],
- ['Maxeffekt', 'Maxeffekt', { unit: 'MW' }],
- ['Beräknad årsproduktion', 'Calprod', { unit: 'GWh' }],
- ['Fabrikat', 'Fabrikat'],
- ['Modell', 'Modell'],
- ['Organisationsnamn', 'Organisationsnamn'],
- ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
- ['Placering', 'Placering'],
- //['Kommun', 'KOMNAMN'],
- //['Län', 'LANSNAMN'],
- ['Elområde', 'ElNamn'],
- ['Datum för senaste uppdatering av verk', 'SenasteUppdaterat'],
- ],
legend: { zoomLevel: 7, type: 'point' },
style: [undefined, undefined, undefined, undefined, .125, .125, .25, .5, 1, 2, 4, 8].map(function(scale) {
return scale === undefined ? undefined : new Style({
@@ -1040,22 +500,6 @@ export const layers = {
* https://www.skogsstyrelsen.se/globalassets/sjalvservice/karttjanster/geodatatjanster/produktbeskrivningar/utforda-avverkningar---produktbeskrivning.pdf
* */
'avverk.utford': {
- popoverTitle: 'Utförd avverkning',
- popover: [
- ['Ärendebeteckning', 'Beteckn', { classes: ['feature-objid'] }],
- ['Registeringsår', 'ArendeAr'],
- ['Skogstyp', 'Skogstyp'],
- ['Areal anmält', 'AnmaldHa', { unit: 'ha' }],
- ['Areal naturlig föryngring', 'NatforHa', { unit: 'ha', fn: (v) => v === 0 ? '' : v }],
- //['Areal plantering', 'SkogsodlHa', { unit: 'ha', fn: (v) => v === 0 ? '' : v }],
- ['Avverkningstyp', 'Avverktyp'],
- ['Datum för avverkning', 'Avvdatum'],
- ['Ursprung för datum för avverkning', 'KallaDatum'],
- //['Ursprung för areal avverkning', 'KallaAreal'],
- //['Kommun', 'Kommun'],
- //['Län', 'Lan'],
- ['Areal för ytan', 'geom_area', { fn: 'area' }],
- ],
legend: { zoomLevel: 7 },
style: [0, 0, 0, 0, 0, .5, .75, 1, 1, 1, 1, 1].map(function(width, z) {
return new Style({
@@ -1074,23 +518,6 @@ export const layers = {
* https://www.skogsstyrelsen.se/globalassets/sjalvservice/karttjanster/geodatatjanster/produktbeskrivningar/yttre-granser-for-avverkningsanmalda-omraden---produktbeskrivning.pdf
* */
'avverk.anmald': {
- popoverTitle: 'Avverkningsanmälansområde',
- popover: [
- ['Ärendebeteckning', 'Beteckn', { classes: ['feature-objid'] }],
- ['Inkom datum', 'Inkomdatum'],
- ['Registeringsår', 'ArendeAr'],
- //['Skogstyp', 'Skogstyp'],
- ['Areal anmält', 'AnmaldHa', { unit: 'ha' }],
- ['Areal naturlig föryngring', 'NatforHa', { unit: 'ha', fn: (v) => v === 0 ? '' : v }],
- ['Areal plantering', 'SkogsodlHa', { unit: 'ha', fn: (v) => v === 0 ? '' : v }],
- ['Avverkningssäsong', 'AvvSasong'],
- //['Avverkningstyp', 'Avverktyp'],
- //['Ändamål', 'Andamal'],
- //['Kommun', 'Kommun'],
- //['Län', 'Lan'],
- ['Ärendestatus', 'ArendeStatus'],
- ['Avverkad areal', 'AvvHa', { unit: 'ha' }],
- ],
legend: { zoomLevel: 7 },
style: [0, 0, 0, 0, 0, .5, .75, 1, 1, 1, 1, 1].map(function(width, z) {
return new Style({
@@ -1133,19 +560,6 @@ export const layers = {
},
'skydd.tilltradesforbud': {
- popoverTitle: 'Tillträdesförbud',
- popover: [
- ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
- ['Föreskriftsområde', 'FORSKRNAMN'],
- ['Namn', 'OBJEKTNAMN'],
- ['Beslutsstatus', 'BESLSTAT'],
- ['Föreskriftstyp', 'FORESKRTYP'],
- ['Föreskriftssubtyp', 'FORESKRIFT'],
- ['Från datum', 'FRANDATUM'],
- ['Till datum', 'TILLDATUM'],
- ['Beskrivning', 'BESKRIVN'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ],
legend: { zoomLevel: 2 },
style: [1, 1.5, 2, 3, 3.5, 4, 5, 5, 6, 7, 8, 10].map(function(width) {
return new Style({
@@ -1163,25 +577,6 @@ export const layers = {
}),
},
'skydd.nationalpark': {
- popoverTitle: 'Nationalpark',
- popover: [
- ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
- ['Namn', 'NAMN'],
- ['Skyddstyp', 'SKYDDSTYP'],
- ['Beslutsstatus', 'BESLSTATUS'],
- ['Beslutsdatum (bildande)', 'URSBESLDAT'],
- ['Ursprungligt gällandedatum', 'URSGALLDAT'],
- ['Senaste gällandedatum', 'SENGALLDAT'],
- ['Förvaltare', 'FORVALTARE'],
- ['IUCN-kategori', 'IUCNKAT'],
- ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
- ['Lagrum', 'LAGRUM'],
- ['Beslutsmyndighet', 'BESLMYND'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Areal land', 'LAND_HA', { unit: 'ha' }],
- ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
- ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
- ],
legend: { zoomLevel: 1 },
style: [8, 16, 32, 32, 64, 64, 128, 128, 128, 256, 256, 256].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -1217,25 +612,6 @@ export const layers = {
}),
},
'skydd.naturreservat': {
- popoverTitle: 'Naturreservat',
- popover: [
- ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
- ['Namn', 'NAMN'],
- ['Skyddstyp', 'SKYDDSTYP'],
- ['Beslutsstatus', 'BESLSTATUS'],
- ['Beslutsdatum (bildande)', 'URSBESLDAT'],
- ['Ursprungligt gällandedatum', 'URSGALLDAT'],
- ['Senaste gällandedatum', 'SENGALLDAT'],
- ['Förvaltare', 'FORVALTARE'],
- ['IUCN-kategori', 'IUCNKAT'],
- ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
- ['Lagrum', 'LAGRUM'],
- ['Beslutsmyndighet', 'BESLMYND'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Areal land', 'LAND_HA', { unit: 'ha' }],
- ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
- ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
- ],
legend: { zoomLevel: 1 },
style: [8, 16, 32, 32, 64, 64, 128, 128, 128, 256, 256, 256].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -1271,25 +647,6 @@ export const layers = {
}),
},
'skydd.naturreservat_kommunalt': {
- popoverTitle: 'Kommunalt naturreservat',
- popover: [
- ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
- ['Namn', 'NAMN'],
- ['Skyddstyp', 'SKYDDSTYP'],
- ['Beslutsstatus', 'BESLSTATUS'],
- ['Beslutsdatum (bildande)', 'URSBESLDAT'],
- ['Ursprungligt gällandedatum', 'URSGALLDAT'],
- ['Senaste gällandedatum', 'SENGALLDAT'],
- ['Förvaltare', 'FORVALTARE'],
- ['IUCN-kategori', 'IUCNKAT'],
- ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
- ['Lagrum', 'LAGRUM'],
- ['Beslutsmyndighet', 'BESLMYND'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Areal land', 'LAND_HA', { unit: 'ha' }],
- ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
- ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
- ],
legend: { zoomLevel: 2 },
style: [4, 8, 16, 16, 32, 32, 64, 64, 64, 128, 128, 128].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -1325,25 +682,6 @@ export const layers = {
}),
},
'skydd.naturvardsomrade': {
- popoverTitle: 'Naturvårdsområde',
- popover: [
- ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
- ['Namn', 'NAMN'],
- ['Skyddstyp', 'SKYDDSTYP'],
- ['Beslutsstatus', 'BESLSTATUS'],
- ['Beslutsdatum (bildande)', 'URSBESLDAT'],
- ['Ursprungligt gällandedatum', 'URSGALLDAT'],
- ['Senaste gällandedatum', 'SENGALLDAT'],
- ['Förvaltare', 'FORVALTARE'],
- ['IUCN-kategori', 'IUCNKAT'],
- ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
- ['Lagrum', 'LAGRUM'],
- ['Beslutsmyndighet', 'BESLMYND'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Areal land', 'LAND_HA', { unit: 'ha' }],
- ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
- ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
- ],
legend: { zoomLevel: 2 },
style: [4, 8, 16, 16, 32, 32, 64, 64, 64, 128, 128, 128].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -1379,25 +717,6 @@ export const layers = {
}),
},
'skydd.djur_och_vaxtskyddsomrade': {
- popoverTitle: 'Djur- och växtskyddsområde',
- popover: [
- ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
- ['Namn', 'NAMN'],
- ['Skyddstyp', 'SKYDDSTYP'],
- ['Beslutsstatus', 'BESLSTATUS'],
- ['Beslutsdatum (bildande)', 'URSBESLDAT'],
- ['Ursprungligt gällandedatum', 'URSGALLDAT'],
- ['Senaste gällandedatum', 'SENGALLDAT'],
- ['Förvaltare', 'FORVALTARE'],
- ['IUCN-kategori', 'IUCNKAT'],
- ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
- ['Lagrum', 'LAGRUM'],
- ['Beslutsmyndighet', 'BESLMYND'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Areal land', 'LAND_HA', { unit: 'ha' }],
- ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
- ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
- ],
legend: { zoomLevel: 2 },
style: [4, 8, 16, 16, 32, 32, 64, 64, 64, 128, 128, 128].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -1433,25 +752,6 @@ export const layers = {
}),
},
'skydd.kulturreservat': {
- popoverTitle: 'Kulturreservat',
- popover: [
- ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
- ['Namn', 'NAMN'],
- ['Skyddstyp', 'SKYDDSTYP'],
- ['Beslutsstatus', 'BESLSTATUS'],
- ['Beslutsdatum (bildande)', 'URSBESLDAT'],
- ['Ursprungligt gällandedatum', 'URSGALLDAT'],
- ['Senaste gällandedatum', 'SENGALLDAT'],
- ['Förvaltare', 'FORVALTARE'],
- ['IUCN-kategori', 'IUCNKAT'],
- ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
- ['Lagrum', 'LAGRUM'],
- ['Beslutsmyndighet', 'BESLMYND'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Areal land', 'LAND_HA', { unit: 'ha' }],
- ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
- ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
- ],
legend: { zoomLevel: 2 },
style: [4, 8, 16, 16, 32, 32, 64, 64, 64, 128, 128, 128].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -1487,25 +787,6 @@ export const layers = {
}),
},
'skydd.vattenskyddsomrade': {
- popoverTitle: 'Vattenskyddsområden',
- popover: [
- ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
- ['Namn', 'NAMN'],
- ['Skyddstyp', 'SKYDDSTYP'],
- ['Beslutsstatus', 'BESLSTATUS'],
- ['Beslutsdatum (bildande)', 'URSBESLDAT'],
- ['Ikraftträdandedatum föreskrifter', 'IKRAFTDATF'],
- ['Beslutsmyndighet', 'BESLMYND'],
- ['Tillsynsmyndighet', 'TILLSYNSMH'],
- ['Prövningsmyndighet tillstånd', 'PROVNMHTIL'],
- ['Prövningsmyndighet dispens', 'PROVNMHDIS'],
- ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
- ['Lagrum', 'LAGRUM'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Areal land', 'LAND_HA', { unit: 'ha' }],
- ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
- ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
- ],
legend: { zoomLevel: 2 },
style: [4, 8, 16, 16, 32, 32, 64, 64, 64, 128, 128, 128].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -1541,25 +822,6 @@ export const layers = {
}),
},
'skydd.landskapsbildsskyddsomrade': {
- popoverTitle: 'Landskapsbildsskyddsområde',
- popover: [
- ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
- ['Namn', 'NAMN'],
- ['Skyddstyp', 'SKYDDSTYP'],
- ['Beslutsstatus', 'BESLSTATUS'],
- ['Beslutsdatum (bildande)', 'URSBESLDAT'],
- ['Ursprungligt gällandedatum', 'URSGALLDAT'],
- ['Senaste gällandedatum', 'SENGALLDAT'],
- ['Förvaltare', 'FORVALTARE'],
- ['IUCN-kategori', 'IUCNKAT'],
- ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
- ['Lagrum', 'LAGRUM'],
- ['Beslutsmyndighet', 'BESLMYND'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Areal land', 'LAND_HA', { unit: 'ha' }],
- ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
- ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
- ],
legend: { zoomLevel: 2 },
style: [4, 8, 16, 16, 32, 32, 64, 64, 64, 128, 128, 128].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -1595,28 +857,6 @@ export const layers = {
}),
},
'skydd.skogligt_biotopskyddsomrade': {
- popoverTitle: 'Biotopskydd i skogsmark',
- popover: [
- ['Ärendebeteckning', 'Beteckn', { classes: ['feature-objid'] }],
- ['Biotopkategori', 'Biotyp'],
- ['Skogstyp', 'Naturtyp'],
- ['Registeringsår', 'ArendeAr'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Skogsmarksareal', 'AreaProd', { unit: 'ha' }],
- ['Beslutsdatum', 'Datbeslut'],
- ['Länk', 'Url', { fn: function(v) {
- if (v == null | v === '') {
- return;
- }
- const a = document.createElement('a');
- a.href = v;
- a.target = '_blank';
- const i = document.createElement('i');
- i.classList.add('bi', 'bi-box-arrow-up-right');
- a.appendChild(i);
- return a;
- }}],
- ],
legend: { zoomLevel: 2 },
style: [4, 8, 16, 16, 32, 32, 64, 64, 64, 128, 128, 128].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -1652,25 +892,6 @@ export const layers = {
}),
},
'skydd.ovrigt_biotopskyddsomrade': {
- popoverTitle: 'Biotopskydd utanför skogsmark',
- popover: [
- ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
- ['Namn', 'NAMN'],
- ['Skyddstyp', 'SKYDDSTYP'],
- ['Beslutsstatus', 'BESLSTATUS'],
- ['Beslutsdatum (bildande)', 'URSBESLDAT'],
- ['Ursprungligt gällandedatum', 'URSGALLDAT'],
- ['Senaste gällandedatum', 'SENGALLDAT'],
- ['Förvaltare', 'FORVALTARE'],
- ['IUCN-kategori', 'IUCNKAT'],
- ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
- ['Lagrum', 'LAGRUM'],
- ['Beslutsmyndighet', 'BESLMYND'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Areal land', 'LAND_HA', { unit: 'ha' }],
- ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
- ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
- ],
legend: { zoomLevel: 2 },
style: [4, 8, 16, 16, 32, 32, 64, 64, 64, 128, 128, 128].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -1706,25 +927,6 @@ export const layers = {
}),
},
'skydd.naturminne_yta': {
- popoverTitle: 'Naturminne (yta)',
- popover: [
- ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
- ['Namn', 'NAMN'],
- ['Skyddstyp', 'SKYDDSTYP'],
- ['Beslutsstatus', 'BESLSTATUS'],
- ['Beslutsdatum (bildande)', 'URSBESLDAT'],
- ['Ursprungligt gällandedatum', 'URSGALLDAT'],
- ['Senaste gällandedatum', 'SENGALLDAT'],
- ['Förvaltare', 'FORVALTARE'],
- ['IUCN-kategori', 'IUCNKAT'],
- ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
- ['Lagrum', 'LAGRUM'],
- ['Beslutsmyndighet', 'BESLMYND'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Areal land', 'LAND_HA', { unit: 'ha' }],
- ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
- ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
- ],
legend: { zoomLevel: 2 },
style: [4, 8, 16, 16, 32, 32, 64, 64, 64, 128, 128, 128].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -1760,22 +962,6 @@ export const layers = {
}),
},
'skydd.naturminne_punkt': {
- popoverTitle: 'Naturminne (punkt)',
- popover: [
- ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
- ['Namn', 'NAMN'],
- ['Skyddstyp', 'SKYDDSTYP'],
- ['Beslutsstatus', 'BESLSTATUS'],
- ['Beslutsdatum (bildande)', 'URSBESLDAT'],
- ['Ursprungligt gällandedatum', 'URSGALLDAT'],
- ['Senaste gällandedatum', 'SENGALLDAT'],
- ['Förvaltare', 'FORVALTARE'],
- ['IUCN-kategori', 'IUCNKAT'],
- ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
- ['Lagrum', 'LAGRUM'],
- ['Beslutsmyndighet', 'BESLMYND'],
- ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
- ],
legend: { zoomLevel: 6, type: 'point' },
style: [undefined, undefined, undefined, undefined].concat([3, 4, 6, 8, 12, 16, 20, 24].map(function(width) {
return new Style({
@@ -1794,25 +980,6 @@ export const layers = {
}))
},
'skydd.interimistiskt_forbud': {
- popoverTitle: 'Interimistiskt förbud',
- popover: [
- ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
- ['Namn', 'NAMN'],
- ['Skyddstyp', 'SKYDDSTYP'],
- ['Beslutsstatus', 'BESLSTATUS'],
- ['Beslutsdatum (bildande)', 'URSBESLDAT'],
- ['Ursprungligt gällandedatum', 'URSGALLDAT'],
- ['Senaste gällandedatum', 'SENGALLDAT'],
- ['Förvaltare', 'FORVALTARE'],
- ['IUCN-kategori', 'IUCNKAT'],
- ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
- ['Lagrum', 'LAGRUM'],
- ['Beslutsmyndighet', 'BESLMYND'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Areal land', 'LAND_HA', { unit: 'ha' }],
- ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
- ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
- ],
legend: { zoomLevel: 2 },
style: [4, 8, 16, 16, 32, 32, 64, 64, 64, 128, 128, 128].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -1848,31 +1015,6 @@ export const layers = {
}),
},
'skydd.fageldirektivet': {
- popoverTitle: 'Fågeldirektivet (SPA)',
- popover: [
- ['Områdeskod', 'SITE_CODE', { classes: ['feature-objid'] }],
- ['Namn', 'NAMN'],
- ['Områdestyp', 'OMRADESTYP'],
- ['Uppgiftslämnare', 'UPPLAMNARE'],
- ['SPA-datum', 'SPA_DATUM'],
- ['SCI-förslagsdatum', 'SCI_FORSL'],
- ['SCI-datum', 'SCI_DATUM'],
- ['SAC-datum', 'SAC_DATUM'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Kvalitet', 'KVALITET'],
- ['Kännetecken för området', 'KARAKTAR'],
- ['Arter', 'ARTER'],
- ['Naturtyper', 'NATURTYPER'],
- ['Bevarandeplan', 'BEVPLAN', { fn: function(v) {
- const a = document.createElement('a');
- a.href = v;
- a.target = '_blank';
- const i = document.createElement('i');
- i.classList.add('bi', 'bi-box-arrow-up-right');
- a.appendChild(i);
- return a;
- }}],
- ],
legend: { zoomLevel: 1 },
style: [8, 16, 32, 32, 64, 64, 128, 128, 128, 256, 256, 256].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -1916,31 +1058,6 @@ export const layers = {
}),
},
'skydd.habitatdirektivet': {
- popoverTitle: 'Art- och habitatdirektivet (SCI)',
- popover: [
- ['Områdeskod', 'SITE_CODE', { classes: ['feature-objid'] }],
- ['Namn', 'NAMN'],
- ['Områdestyp', 'OMRADESTYP'],
- ['Uppgiftslämnare', 'UPPLAMNARE'],
- ['SPA-datum', 'SPA_DATUM'],
- ['SCI-förslagsdatum', 'SCI_FORSL'],
- ['SCI-datum', 'SCI_DATUM'],
- ['SAC-datum', 'SAC_DATUM'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Kvalitet', 'KVALITET'],
- ['Kännetecken för området', 'KARAKTAR'],
- ['Arter', 'ARTER'],
- ['Naturtyper', 'NATURTYPER'],
- ['Bevarandeplan', 'BEVPLAN', { fn: function(v) {
- const a = document.createElement('a');
- a.href = v;
- a.target = '_blank';
- const i = document.createElement('i');
- i.classList.add('bi', 'bi-box-arrow-up-right');
- a.appendChild(i);
- return a;
- }}],
- ],
legend: { zoomLevel: 1 },
style: [8, 16, 32, 32, 64, 64, 128, 128, 128, 256, 256, 256].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -1984,11 +1101,6 @@ export const layers = {
}),
},
'skydd.helcom': {
- popoverTitle: 'Marina skyddade områden (Helcom MPA)',
- popover: [
- ['Namn', 'NAME'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ],
legend: { zoomLevel: 1 },
style: [4, 8, 16, 16, 32, 32, 64, 64, 64, 128, 128, 128].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -2016,31 +1128,6 @@ export const layers = {
}),
},
'skydd.ramsar': {
- popoverTitle: 'Ramsar-områden (Våtmarkskonventionen)',
- popover: [
- ['Ramsar-ID', 'RAMSAR_ID', { classes: ['feature-objid'] }],
- ['Skyddstyp', 'SKYDDSTYP'],
- ['Namn', 'NAMN'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Areal land', 'LAND_HA', { unit: 'ha' }],
- ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
- ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
- ['Ursprungligt beslutsdatum', 'URSPR_BESL'],
- ['Senaste beslutsdatum', 'SEN_BESLUT'],
- ['Rättsakt', 'LEGAL_ACT'],
- ['Länk', 'LINK', { fn: function(v) {
- if (v == null || v === '') {
- return;
- }
- const a = document.createElement('a');
- a.href = v;
- a.target = '_blank';
- const i = document.createElement('i');
- i.classList.add('bi', 'bi-box-arrow-up-right');
- a.appendChild(i);
- return a;
- }}],
- ],
legend: { zoomLevel: 1 },
style: [4, 8, 16, 16, 32, 32, 64, 64, 64, 128, 128, 128].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -2068,15 +1155,6 @@ export const layers = {
}),
},
'skydd.ospar': {
- popoverTitle: 'Marina skyddade områden (Ospar MPA)',
- popover: [
- ['Ursprung', 'ORIGIN'],
- ['N2000-namn', 'NAMN_N2000'],
- ['MPA-ID', 'MPA_ID', { classes: ['feature-objid'] }],
- ['MPA-namn', 'MPA_NAMN'],
- ['N2000-ID', 'N2000_SITE', { classes: ['feature-objid'] }],
- ['Areal', 'geom_area', { fn: 'area' }],
- ],
legend: { zoomLevel: 1 },
style: [4, 8, 16, 16, 32, 32, 64, 64, 64, 128, 128, 128].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -2104,11 +1182,6 @@ export const layers = {
}),
},
'skydd.varldsarv': {
- popoverTitle: 'Världsarv med mycket höga naturvärden (Unesco)',
- popover: [
- ['Namn', 'NAMN'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ],
legend: { zoomLevel: 1 },
style: [4, 8, 16, 16, 32, 32, 64, 64, 64, 128, 128, 128].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -2136,24 +1209,6 @@ export const layers = {
}),
},
'skydd.biosfarsomraden': {
- popoverTitle: 'Biosfärsområde (Unesco)',
- popover: [
- ['Namn', 'NAMN'],
- ['Skyddstyp', 'SKYDDSTYP'],
- ['Länk', 'LINK', { fn: function(v) {
- if (v == null || v === '') {
- return;
- }
- const a = document.createElement('a');
- a.href = v;
- a.target = '_blank';
- const i = document.createElement('i');
- i.classList.add('bi', 'bi-box-arrow-up-right');
- a.appendChild(i);
- return a;
- }}],
- ['Areal', 'geom_area', { fn: 'area' }],
- ],
legend: { zoomLevel: 1 },
style: [4, 8, 16, 16, 32, 32, 64, 64, 64, 128, 128, 128].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -2181,17 +1236,6 @@ export const layers = {
}),
},
'skydd.naturvardsavtal': {
- popoverTitle: 'Naturvårdsavtal (Naturvårdsverket, Länsstyrelsen)',
- popover: [
- ['ID', 'ID', { classes: ['feature-objid'] }],
- ['Namn', 'OBJNAMN'],
- ['Fastighet', 'FASTBET', { classes: ['feature-objid'] }],
- ['Giltig från', 'DATSTART'],
- ['Giltig till', 'DATSLUT'],
- ['Diarienummer', 'DIARIENRNV', { classes: ['feature-attr-dnr'] }],
- ['Satus', 'STATUS'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ],
legend: { zoomLevel: 1 },
style: [8, 16, 32, 32, 64, 64, 128, 128, 128, 256, 256, 256].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -2227,29 +1271,6 @@ export const layers = {
}),
},
'skydd.naturvardsavtal_skogsstyrelsen': {
- popoverTitle: 'Naturvårdsavtal (Skogsstyrelsen)',
- popover: [
- ['Ärendebeteckning', 'Beteckn', { classes: ['feature-objid'] }],
- ['Registeringsår', 'ArendeAr'],
- ['Biotopkategori', 'NvaTyp'],
- ['Skogstyp', 'Naturtyp'],
- ['Avtalsdatum', 'DatAvtal'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Skogsmarksareal', 'AreaProd', { unit: 'ha' }],
- ['Länk', 'Url', { fn: function(v) {
- if (v == null | v === '') {
- return;
- }
- const a = document.createElement('a');
- a.href = v;
- a.target = '_blank';
- const i = document.createElement('i');
- i.classList.add('bi', 'bi-box-arrow-up-right');
- a.appendChild(i);
- return a;
- }}],
- ['Undertyp', 'Undertyp'],
- ],
legend: { zoomLevel: 2 },
style: [4, 8, 16, 16, 32, 32, 64, 64, 64, 128, 128, 128].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -2285,25 +1306,6 @@ export const layers = {
}),
},
'skydd.atervatningsavtal': {
- popoverTitle: 'Återvätningsavtal',
- popover: [
- ['Ärendebeteckning', 'Beteckn', { classes: ['feature-objid'] }],
- ['Ärendeår', 'ArendeAr'],
- ['Avtalat datum', 'AvtalatDatum'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Länk', 'Url', { fn: function(v) {
- if (v == null || v === '') {
- return;
- }
- const a = document.createElement('a');
- a.href = v;
- a.target = '_blank';
- const i = document.createElement('i');
- i.classList.add('bi', 'bi-box-arrow-up-right');
- a.appendChild(i);
- return a;
- }}],
- ],
legend: { zoomLevel: 0 },
style: [0, 1, 2, 3, 4, 5, 6].map(function(width) {
return new Style({
@@ -2351,31 +1353,6 @@ export const layers = {
})),
},
'nv.naturvarde_sks': {
- popoverTitle: 'Objekt med naturvärden (Skogsstyrelsen)',
- popover: [
- ['Ärendebeteckning', 'Beteckn', { classes: ['feature-objid'] }],
- ['Namn', 'Objnamn'],
- ['Datum för fältinventering', 'Datinv'],
- ['Biotoptyp #1', 'Biotop1'],
- ['Biotoptyp #2', 'Biotop2'],
- ['Biotoptyp #3', 'Biotop3'],
- ['Nyckelord #1 som beskriver objektet', 'Beskrivn1'],
- ['Nyckelord #2 som beskriver objektet', 'Beskrivn2'],
- ['Nyckelord #3 som beskriver objektet', 'Beskrivn3'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Länk', 'Url', { fn: function(v) {
- if (v == null || v === '') {
- return;
- }
- const a = document.createElement('a');
- a.href = v;
- a.target = '_blank';
- const i = document.createElement('i');
- i.classList.add('bi', 'bi-box-arrow-up-right');
- a.appendChild(i);
- return a;
- }}],
- ],
legend: { zoomLevel: 0 },
style: [0, 1, 2, 3, 4, 5].map(function(width) {
return new Style({
@@ -2423,36 +1400,6 @@ export const layers = {
})),
},
'nv.nyckelbiotop': {
- popoverTitle: 'Nyckelbiotop (Skogsstyrelsen)',
- popover: [
- ['Ärendebeteckning', 'Beteckn', { classes: ['feature-objid'] }],
- ['Namn', 'Objnamn'],
- ['Datum för fältinventering', 'Datinv'],
- ['Biotoptyp #1', 'Biotop1'],
- ['Biotoptyp #2', 'Biotop2'],
- ['Biotoptyp #3', 'Biotop3'],
- ['Nyckelord #1 som beskriver objektet', 'Beskrivn1'],
- ['Nyckelord #2 som beskriver objektet', 'Beskrivn2'],
- ['Nyckelord #3 som beskriver objektet', 'Beskrivn3'],
- ['Nyckelord #4 som beskriver objektet', 'Beskrivn4'],
- ['Nyckelord #5 som beskriver objektet', 'Beskrivn5'],
- ['Nyckelord #6 som beskriver objektet', 'Beskrivn6'],
- ['Nyckelord #7 som beskriver objektet', 'Beskrivn7'],
- ['Nyckelord #8 som beskriver objektet', 'Beskrivn8'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Länk', 'Url', { fn: function(v) {
- if (v == null || v === '') {
- return;
- }
- const a = document.createElement('a');
- a.href = v;
- a.target = '_blank';
- const i = document.createElement('i');
- i.classList.add('bi', 'bi-box-arrow-up-right');
- a.appendChild(i);
- return a;
- }}],
- ],
legend: { zoomLevel: 0 },
style: [0, 1, 2, 3, 4, 5].map(function(width) {
return new Style({
@@ -2500,24 +1447,6 @@ export const layers = {
})),
},
'nv.nyckelbiotop_storskogsbruk': {
- popoverTitle: 'Nyckelbiotop (storskogsbruket)',
- popover: [
- ['Uppgifter lämnade av', 'Org'],
- ['Inkom datum', 'InkomDatum'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Länk', 'Url', { fn: function(v) {
- if (v == null || v === '') {
- return;
- }
- const a = document.createElement('a');
- a.href = v;
- a.target = '_blank';
- const i = document.createElement('i');
- i.classList.add('bi', 'bi-box-arrow-up-right');
- a.appendChild(i);
- return a;
- }}],
- ],
legend: { zoomLevel: 0 },
style: [0, 1, 2, 3, 4, 5].map(function(width) {
return new Style({
@@ -2565,40 +1494,6 @@ export const layers = {
})),
},
'nv.sumpskog': {
- popoverTitle: 'Sumpskog',
- popover: [
- ['Objektnamn', 'Namn'],
- ['Skogstyp', 'Tradtext'],
- ['Hydrologisk typ', 'Hydrtext'],
- ['Klass på delobjektet', 'Delklass'],
- ['Klass på objektet', 'Klassu'],
- ['Andel löv', 'Lovandel'],
- ['Andel öppet vatten', 'Andelva'],
- ['Krontäckning', 'Krontakn'],
- ['Huggningsklass', 'Huggklas'],
- ['Ingrepp på delobjekt (max 4)', 'Ingrepp'],
- ['Grad av påverkan på delobjekt (max 4)', 'Ingrpavv'],
- ['Nyckelord på objektnivå', 'Objnyck'],
- ['Nyckelord på delobjektsnivå', 'Delnyck'],
- ['Flygbildsår', 'Flygar'],
- ['Datum för fältbesök', 'Faltdat'],
- ['Inventeringsteknik', 'Invtekn'],
- ['Inventeringdatum', 'Invdat'],
- ['Ansvarig myndighet', 'Ansvmynd'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Länk', 'Url', { fn: function(v) {
- if (v == null || v === '') {
- return;
- }
- const a = document.createElement('a');
- a.href = v;
- a.target = '_blank';
- const i = document.createElement('i');
- i.classList.add('bi', 'bi-box-arrow-up-right');
- a.appendChild(i);
- return a;
- }}],
- ],
legend: { zoomLevel: 5 },
style: [.5, 1, 1.5, 1.5, 2, 2, 2.5, 2.5, 3, 3.5, 4, 5].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -2629,12 +1524,6 @@ export const layers = {
}),
},
'nv.pagaende_naturreservatsbildning': {
- popoverTitle: 'Pågående naturreservatsbildning',
- popover: [
- ['Objektnamn', 'NAMN'],
- ['Senast justerat', 'GRANSJUST'], /* XXX unclear what "GRANSJUST" means, just a guess */
- ['Areal', 'geom_area', { fn: 'area' }],
- ],
legend: { zoomLevel: 1 },
style: [8, 16, 32, 32, 64, 64, 128, 128, 128, 256, 256, 256].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -2671,28 +1560,6 @@ export const layers = {
}),
},
'nv.snus': {
- popoverTitle: 'Skyddsvärd statlig skog',
- popover: [
- ['Objektnamn', 'NAMN'],
- ['År', 'AR'],
- ['Naturgeografisk region', 'NATURGEOGR', { classes: ['feature-objid'] }],
- ['Objektskategori', 'OBJEKTKATE', { classes: ['feature-objid'] }],
- ['Markägare', 'MARKAGARE'],
- ['Areal värdekärna', 'VARDEKARNA', { unit: 'ha' }],
- ['Areal utvecklingsmark', 'UTV_MARK', { unit: 'ha' }],
- ['Totalareal', 'TOTAL_AREA', { unit: 'ha' }],
- ['Areal land', 'LAND', { unit: 'ha' }],
- ['Areal vatten', 'VATTEN', { unit: 'ha' }],
- ['Areal produktiv skogsmark', 'PROD_SKOG', { unit: 'ha' }],
- ['Areal produktiv skogsmark ovanför fjällnära gräns', 'SKOG_O_FJG', { unit: 'ha' }],
- ['Areal produktiv skogsmark nedanför fjällnära gräns', 'SKOG_N_FJG', { unit: 'ha' }],
- ['Areal skyddszon', 'SKYDDSZON', { unit: 'ha' }],
- ['Areal arronderingsmark', 'ARRO_MARK', { unit: 'ha' }],
- ['Kriterier för urval', 'KRITERIER'],
- ['Beskrivning av området', 'BESKRIVN'],
- ['Länsstyrelsens bedömning', 'LST_BEDOMN'],
- ['Källor', 'KALLOR'],
- ],
legend: { zoomLevel: 1 },
style: [.5, 1, 1.5, 1.5, 2, 2, 2.5, 2.5, 3, 3.5, 4, 5].map(function(width) {
return new Style({
@@ -2709,29 +1576,6 @@ export const layers = {
},
'ri.naturvard': {
- popoverTitle: 'Riksintresse naturvård',
- popover: [
- ['Namn', 'NAMN'],
- ['Skydd', 'SKYDD'],
- ['Ämnesområde', 'AMNESOMRAD'],
- ['Beskrivning', 'BESKRIVNIN', { fn: function(v) {
- if (v == null || !(v.startsWith('http://') || v.startsWith('https://'))) {
- return v;
- }
- const a = document.createElement('a');
- a.href = v;
- a.target = '_blank';
- const i = document.createElement('i');
- i.classList.add('bi', 'bi-box-arrow-up-right');
- a.appendChild(i);
- return a;
- }}],
- ['Lagrum', 'LAGRUM'],
- ['Beslutsdatum', 'BESLUTSDAT'],
- ['Original-ID', 'ORGINALID', { classes: ['feature-objid'] }],
- ['Riks-ID', 'RIKSID', { classes: ['feature-objid'] }],
- ['Areal', 'geom_area', { fn: 'area' }],
- ],
legend: { zoomLevel: 0 },
style: [8, 16, 32, 32, 64, 64, 128, 128, 128, 256, 256, 256].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -2767,45 +1611,6 @@ export const layers = {
}),
},
'ri.friluftsliv': {
- popoverTitle: 'Riksintresse friluftsliv',
- popover: [
- ['Namn', 'NAMN'],
- ['Skydd', 'SKYDD'],
- ['Ämnesområde', 'AMNESOMR'],
- ['Områdesnummer', 'OMRADESNR', { classes: ['feature-objid'] }],
- ['Länk värdebeskrivning', 'LANK_VARDE', { fn: function(v) {
- if (v == null | v === '') {
- return;
- }
- const a = document.createElement('a');
- a.href = v;
- a.target = '_blank';
- const i = document.createElement('i');
- i.classList.add('bi', 'bi-box-arrow-up-right');
- a.appendChild(i);
- return a;
- }}],
- ['Lagrum', 'LAGRUM'],
- ['Beslutsdatum', 'BESLDATUM'],
- ['Ärendenummer', 'ARENDENR', { classes: ['feature-attr-dnr'] }],
- ['Länk, beslut', 'LANK_BESLU', { fn: function(v) {
- if (v == null | v === '') {
- return;
- }
- const a = document.createElement('a');
- a.href = v;
- a.target = '_blank';
- const i = document.createElement('i');
- i.classList.add('bi', 'bi-box-arrow-up-right');
- a.appendChild(i);
- return a;
- }}],
- ['Aktivitet', 'AKTIVITET'],
- ['Naturtyp', 'NATURTYP'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Areal land', 'AREA_LAND_', { unit: 'ha' }],
- ['Areal vatten', 'AREA_VATTE', { unit: 'ha' }],
- ],
legend: { zoomLevel: 0 },
style: [8, 16, 32, 32, 64, 64, 128, 128, 128, 256, 256, 256].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -2841,30 +1646,6 @@ export const layers = {
}),
},
'ri.rorligt_friluftsliv': {
- popoverTitle: 'Riksintresse rörligt friluftsliv (MB 4 kap 1§ och 2§)',
- popover: [
- ['Namn', 'NAMN'],
- //['Original-ID', 'ORIGINALID', { classes: ['feature-objid'] }],
- ['Beskrivning', 'BESKRIVNIN'],
- //['Metodbeskrivning', 'METODBESKR'],
- //['Tillk. datum', 'TILLKDATUM'],
- //['Rev. datum', 'REVDATUM'],
- ['Anmärkning', 'ANM'],
- ['Länk', 'OBJEKTLANK', { fn: function(v) {
- if (v == null || v === '') {
- return;
- }
- const a = document.createElement('a');
- a.href = v;
- a.target = '_blank';
- const i = document.createElement('i');
- i.classList.add('bi', 'bi-box-arrow-up-right');
- a.appendChild(i);
- return a;
- }}],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Referens', 'REFERENS'],
- ],
legend: { zoomLevel: 0 },
style: [8, 16, 32, 32, 64, 64, 128, 128, 128, 256, 256, 256].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -2902,31 +1683,6 @@ export const layers = {
}),
},
'ri.obruten_kust': {
- popoverTitle: 'Riksintresse obruten kust (MB 4 kap 3§)',
- popover: [
- ['Namn', 'NAMN'],
- //['Original-ID', 'ORIGINALID', { classes: ['feature-objid'] }],
- ['Beskrivning', 'BESKRIVNIN'],
- //['Metodbeskrivning', 'METODBESKR'],
- //['Tillk. datum', 'TILLKDATUM'],
- //['Rev. datum', 'REVDATUM'],
- ['Anmärkning', 'ANM'],
- ['Objekttyp', 'OBJTYP'],
- ['Länk', 'OBJEKTLANK', { fn: function(v) {
- if (v == null || v === '') {
- return;
- }
- const a = document.createElement('a');
- a.href = v;
- a.target = '_blank';
- const i = document.createElement('i');
- i.classList.add('bi', 'bi-box-arrow-up-right');
- a.appendChild(i);
- return a;
- }}],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Referens', 'REFERENS'],
- ],
legend: { zoomLevel: 0 },
style: [8, 16, 32, 32, 64, 64, 128, 128, 128, 256, 256, 256].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -2964,29 +1720,6 @@ export const layers = {
}),
},
'ri.obrutet_fjall': {
- popoverTitle: 'Riksintresse obrutet fjäll (MB 4 kap 5§)',
- popover: [
- ['Namn', 'NAMN'],
- //['Original-ID', 'ORIGINALID', { classes: ['feature-objid'] }],
- ['Beskrivning', 'BESKRIVNIN'],
- ['Metodbeskrivning', 'METODBESKR'],
- ['Tillk. datum', 'TILLKDATUM'],
- //['Rev. datum', 'REVDATUM'],
- ['Länk', 'OBJEKTLANK', { fn: function(v) {
- if (v == null || v === '') {
- return;
- }
- const a = document.createElement('a');
- a.href = v;
- a.target = '_blank';
- const i = document.createElement('i');
- i.classList.add('bi', 'bi-box-arrow-up-right');
- a.appendChild(i);
- return a;
- }}],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Referens', 'REFERENS'],
- ],
legend: { zoomLevel: 0 },
style: [8, 16, 32, 32, 64, 64, 128, 128, 128, 256, 256, 256].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -3024,31 +1757,6 @@ export const layers = {
}),
},
'ri.skyddade_vattendrag': {
- popoverTitle: 'Riksintresse skyddade vattendrag (MB 4 kap 6§)',
- popover: [
- ['Namn', 'NAMN'],
- //['Original-ID', 'ORIGINALID', { classes: ['feature-objid'] }],
- ['Beskrivning', 'BESKRIVNIN'],
- ['Metodbeskrivning', 'METODBESKR'],
- ['Tillk. datum', 'TILLKDATUM'],
- ['Rev. datum', 'REVDATUM'],
- ['Anmärkning', 'ANM'],
- ['Digitaliseringsskala', 'DIG_SKALA'],
- ['Länk', 'OBJEKTLANK', { fn: function(v) {
- if (v == null || v === '') {
- return;
- }
- const a = document.createElement('a');
- a.href = v;
- a.target = '_blank';
- const i = document.createElement('i');
- i.classList.add('bi', 'bi-box-arrow-up-right');
- a.appendChild(i);
- return a;
- }}],
- ['Areal', 'geom_area', { fn: 'area' }],
- ['Referens', 'REFERENS'],
- ],
legend: { zoomLevel: 0 },
style: [8, 16, 32, 32, 64, 64, 128, 128, 128, 256, 256, 256].map(function(width, z) {
return new Style({
@@ -3066,13 +1774,6 @@ export const layers = {
},
'ren.betesomrade': {
- popoverTitle: 'Samebyarnas betesområde',
- popover: [
- ['Sameby', 'NAMN'],
- ['Samebys typ', 'SAMEBY_TYP'],
- ['Signatur', 'SIGNATUR'],
- ['Aktualitet', 'AKTUALITET'],
- ],
legend: { zoomLevel: 0 },
style: [1, 1.5, 2, 3, 3.5, 4, 5, 5, 6, 7, 8, 10].map(function(width) {
return new Style({
@@ -3090,20 +1791,6 @@ export const layers = {
}),
},
'ren.flyttled': {
- popoverTitle: 'Samebyarnas markanvändningsredovisning \u2013 flyttled',
- popover: [
- ['Led-ID', 'LED_ID', { classes: ['feature-objid'], fn: (v) => v === 0 ? '' : v }],
- ['Sameby #1', 'SAMEBY1'],
- ['Sameby #2', 'SAMEBY2'],
- ['Sameby #3', 'SAMEBY3'],
- ['Beskrivning', 'BESKRIVNIN'],
- ['Årstid', 'ARSTID'],
- ['Riksintresse', 'RIKSINTR'],
- ['Fast led', 'FAST_LED'],
- ['Aktualitet', 'AKTUALITET'],
- ['Signatur', 'SIGNATUR'],
- ['Ledlängd', 'geom_length', { fn: 'length' }],
- ],
legend: { zoomLevel: 2, type: 'linestring' },
style: [.75, 1, 1.5, 2, 3, 4, 5, 5, 6, 7, 8, 10].map(function(width) {
return new Style({
@@ -3117,13 +1804,6 @@ export const layers = {
}),
},
'ren.riks_ren': {
- popoverTitle: 'Riksintresse rennäring',
- popover: [
- ['Lagrum', 'LAGRUM'],
- ['Aktualitet', 'AKTUALITET'],
- ['Signatur', 'SIGNATUR'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ],
legend: { zoomLevel: 1 },
style: [.5, 1, 1.5, 1.5, 2, 2, 2.5, 2.5, 3, 3.5, 4, 5].map(function(width, z) {
const patternCanvas = document.createElement('canvas');
@@ -3153,17 +1833,6 @@ export const layers = {
}),
},
'ren.omr_riks': {
- popoverTitle: '(Kärn)områden av riksintresse rennäring',
- popover: [
- ['Områdes-ID', 'OMR_NR', { classes: ['feature-objid'] }],
- ['Länk', 'LANK'],
- ['Årets runt', 'ARET_RUNT'],
- ['Sameby', 'SAMEBY'],
- ['Ansvarig', 'ANSVARIG'],
- ['Aktualitet', 'AKTUALITET'],
- ['Signatur', 'SIGNATUR'],
- ['Areal', 'geom_area', { fn: 'area' }],
- ],
legend: { zoomLevel: 2 },
style: [.5, .5, 1, 1, 1, 1.5, 1.5, 1.5, 2, 2, 2, 2].map(function(width, z) {
return new Style({
@@ -3183,46 +1852,6 @@ export const layers = {
* https://www.smhi.se/polopoly_fs/1.34541!/dammprod%202013_3%2C%20beskrivning%2C%20SVAR2012_2.pdf
* */
'misc.dammar': {
- popoverTitle: 'Damm',
- popover: [
- ['Dammenhetens namn', 'DNamn'],
- ['Dammanläggningens namn', 'Namn'],
- ['Länsnr', 'LST_OBJID', { classes: ['feature-objid'] }],
- ['Status', 'Status', { fn: (v) => v === 1 ? 'Befintlig damm' : v === 2 ? 'Fd. damm' : '' }],
- //['Regleringstyp', 'Regleringstyp'],
- ['Byggår', 'ByggAr'],
- ['Dammhöjd', 'DammHojd', { unit: 'm' }],
- ['Krönlängd', 'KronLangd', { unit: 'm' }],
- ['Fiskväg', 'Fiskvag', { fn: (v) =>
- v === 1 ? 'Bassängtrappa' :
- v === 2 ? 'Denilränna' :
- v === 3 ? 'Slitsränna' :
- v === 4 ? 'Omlöp' :
- v === 5 ? 'Inlöp' :
- v === 6 ? 'Ålledare' :
- v === 7 ? 'Smoltränna' :
- v === 8 ? 'Okänd typ' :
- v === 9 ? 'Ingen' :
- v === 10 ? 'Annan' :
- '' }],
- ['Huvudavrinningsområdesnummer', 'HARO', { classes: ['feature-objid'] } ],
- ['Vattendistrikt', 'Vattendistrikt', { classes: ['feature-objid'] } ],
- ['Verksamhet', 'Verksamhet', { fn: (v) =>
- v === 1 ? 'Kraftproduktion' :
- v === 2 ? 'Industri' :
- v === 3 ? 'Sjöfart' :
- v === 4 ? 'Invallning' :
- v === 5 ? 'Vattenförsörjning' :
- v === 6 ? 'Spegeldamm' :
- v === 7 ? 'Historisk' :
- v === 8 ? 'Övrigt' :
- '' }],
- ['Högsta dämningsgräns', 'DG', { unit: 'm' }],
- ['Lägsta sänkningsgräns', 'SG', { unit: 'm' }],
- ['Magasinsyta', 'MY', { unit: 'km²' }],
- ['Reglerbar volym', 'RV', { unit: 'Mm³' }],
- ['Kommentar', 'Kommentar'],
- ],
legend: { zoomLevel: 5, type: 'point' },
style: [2, 3, 4, 4, 4, 6, 8, 8, 8, 10, 16, 32].map(function(width) {
return new Style({
@@ -3242,22 +1871,6 @@ export const layers = {
},
'misc.gigafactories': {
- popoverTitle: 'Stor industrisatsning',
- popover: [
- ['Namn', 'Name'],
- ['Länk', 'Url', { fn: function(v) {
- if (v == null | v === '') {
- return;
- }
- const a = document.createElement('a');
- a.href = v;
- a.target = '_blank';
- const i = document.createElement('i');
- i.classList.add('bi', 'bi-box-arrow-up-right');
- a.appendChild(i);
- return a;
- }}],
- ],
legend: { zoomLevel: 1, type: 'point' },
style: [4, 6, 7, 8, 10, 12].map(function(width) {
return new Style({
diff --git a/src/popover.js b/src/popover.js
new file mode 100644
index 0000000..ef809ed
--- /dev/null
+++ b/src/popover.js
@@ -0,0 +1,1959 @@
+import Overlay from 'ol/Overlay.js';
+import Stroke from 'ol/style/Stroke.js';
+import Style from 'ol/style/Style.js';
+
+import { Popover } from 'bootstrap';
+
+const popup = document.getElementById('popup');
+
+/* TODO: this should really be refactored… */
+const layers = {
+ 'mrr.appr_ec': {
+ popoverTitle: 'Bearbetningskoncession \u2013 beviljad',
+ popover: [
+ ['Namn', 'name'],
+ ['Koncessionsmineral', 'mineral'],
+ ['Ägare', 'owners'],
+ ['Tillståndsid', 'licenceid', { classes: ['feature-attr-mrr-license-id'] }],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Giltig från', 'validfrom'],
+ ['Giltig till', 'validto'],
+ ['Diarienummer', 'diarynr', { classes: ['feature-attr-dnr'] }],
+ ['Ansökningsdatum', 'appl_date'],
+ ['Beslutsdatum', 'dec_date'],
+ //['Kommun', 'Municipality'],
+ //['Län', 'County'],
+ ],
+ },
+ 'mrr.appl_ec': {
+ popoverTitle: 'Bearbetningskoncession \u2013 ansökt',
+ popover: [
+ ['Namn', 'name'],
+ ['Koncessionsmineral', 'mineral'],
+ ['Sökande', 'owners'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Ansökningsdatum', 'appl_date'],
+ ['Diarienummer', 'diarynr', { classes: ['feature-attr-dnr'] }],
+ //['Kommun', 'Municipality'],
+ //['Län', 'County'],
+ ],
+ },
+ 'mrr.appr_met': {
+ popoverTitle: 'Undersökningstillstånd, metaller och industrimineral \u2013 beviljad',
+ popover: [
+ ['Namn', 'name'],
+ ['Koncessionsmineral', 'mineral'],
+ ['Ägare', 'owners'],
+ ['Tillståndsid', 'licenceid', { classes: ['feature-attr-mrr-license-id'] }],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Giltig från', 'validfrom'],
+ ['Giltig till', 'validto'],
+ ['Diarienummer', 'diarynr', { classes: ['feature-attr-dnr'] }],
+ ['Ansökningsdatum', 'appl_date'],
+ ['Beslutsdatum', 'dec_date'],
+ //['Kommun', 'Municipality'],
+ //['Län', 'County'],
+ ],
+ },
+ 'mrr.appl_met': {
+ popoverTitle: 'Undersökningstillstånd, metaller och industrimineral \u2013 ansökt',
+ popover: [
+ ['Namn', 'name'],
+ ['Koncessionsmineral', 'mineral'],
+ ['Sökande', 'owners'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Ansökningsdatum', 'appl_date'],
+ ['Diarienummer', 'diarynr', { classes: ['feature-attr-dnr'] }],
+ //['Kommun', 'Municipality'],
+ //['Län', 'County'],
+ ],
+ },
+ 'mrr.appr_ogd': {
+ popoverTitle: 'Undersökningstillstånd, olja, gas och diamant \u2013 beviljad',
+ popover: [
+ ['Namn', 'name'],
+ ['Koncessionsmineral', 'mineral'],
+ ['Ägare', 'owners'],
+ ['Tillståndsid', 'licenceid', { classes: ['feature-attr-mrr-license-id'] }],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Giltig från', 'validfrom'],
+ ['Giltig till', 'validto'],
+ ['Diarienummer', 'diarynr', { classes: ['feature-attr-dnr'] }],
+ ['Ansökningsdatum', 'appl_date'],
+ ['Beslutsdatum', 'dec_date'],
+ //['Kommun', 'Municipality'],
+ //['Län', 'County'],
+ ],
+ },
+ 'mrr.appl_ogd': {
+ popoverTitle: 'Undersökningstillstånd, olja, gas och diamant \u2013 ansökt',
+ popover: [
+ ['Namn', 'name'],
+ ['Koncessionsmineral', 'mineral'],
+ ['Sökande', 'owners'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Ansökningsdatum', 'appl_date'],
+ ['Diarienummer', 'diarynr', { classes: ['feature-attr-dnr'] }],
+ //['Kommun', 'Municipality'],
+ //['Län', 'County'],
+ ],
+ },
+ 'mrr.appr_dl': {
+ popoverTitle: 'Markanvisning till koncession',
+ popover: [
+ ['Namn', 'name'],
+ ['Tillhörande bearbetnings\u00ADkoncession(er)', 'conc_name'],
+ ['Tillståndsid', 'licenceid', { classes: ['feature-attr-mrr-license-id'] }],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Diarienummer', 'diarynr', { classes: ['feature-attr-dnr'] }],
+ ['Ansökningsdatum', 'appl_date'],
+ ['Beslutsdatum', 'dec_date'],
+ //['Kommun', 'Municipality'],
+ //['Län', 'County'],
+ ],
+ },
+
+ 'svk.ledningar': {
+ popoverTitle: 'Kraftledning (befintlig)',
+ popover: [
+ ['Förläggning', 'Placement'],
+ ['Spänning', 'Voltage', { unit: 'kV' }],
+ ['Ledlängd', 'geom_length', { fn: 'length' }],
+ ],
+ },
+ 'svk.transmissionsnatsprojekt': {
+ popoverTitle: 'Transmissionsnätsprojekt',
+ popover: [
+ ['Projektnamn', 'Name'],
+ ['Spänning', 'Voltage', { unit: 'kV' }],
+ ['Länk', 'Url', { fn: function(v) {
+ if (v == null | v === '') {
+ return;
+ }
+ const a = document.createElement('a');
+ a.href = v;
+ a.target = '_blank';
+ const i = document.createElement('i');
+ i.classList.add('bi', 'bi-box-arrow-up-right');
+ a.appendChild(i);
+ return a;
+ }}],
+ ],
+ },
+
+ 'vbk.area_current': {
+ popoverTitle: 'Landbaserad projekteringsområde för vindkraft',
+ popover: [
+ ['Projektnamn', 'Projektnamn'],
+ ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
+ ['Aktuella verk', 'AntalVerk'],
+ ['Antal ej koordinatsatta verk', 'AntalEjXY'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Beräknad årsproduktion', 'Calprod', { unit: 'GWh' }],
+ ['Planerad byggstart', 'PlaneradByggstart'],
+ ['Planerat drifttagande', 'PlaneratDrift'],
+ ['Ändringsansökan pågår', 'AndringsansokanPagar'],
+ ['Under byggnation', 'UnderByggnation'],
+ ['Organisationsnamn', 'Organisationsnamn'],
+ ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
+ //['Kommun', 'KOMNAMN'],
+ //['Län', 'LANSNAMN'],
+ ['Elområde', 'ElNamn'],
+ ['Senast uppdaterat', 'SenasteUppdaterat'],
+ ],
+ },
+ 'vbk.area_notcurrent': {
+ popoverTitle: 'Landbaserad projekteringsområde för vindkraft \u2013 ej aktuell',
+ popover: [
+ ['Projektnamn', 'Projektnamn'],
+ ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
+ ['Aktuella verk', 'AntalVerk'],
+ ['Antal ej koordinatsatta verk', 'AntalEjXY'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Beräknad årsproduktion', 'Calprod', { unit: 'GWh' }],
+ ['Planerad byggstart', 'PlaneradByggstart'],
+ ['Planerat drifttagande', 'PlaneratDrift'],
+ ['Ändringsansökan pågår', 'AndringsansokanPagar'],
+ ['Organisationsnamn', 'Organisationsnamn'],
+ ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
+ //['Kommun', 'KOMNAMN'],
+ //['Län', 'LANSNAMN'],
+ ['Elområde', 'ElNamn'],
+ ['Senast uppdaterat', 'SenasteUppdaterat'],
+ ],
+ },
+ 'vbk.offshore_completed': {
+ popoverTitle: 'Havsbaserad vindkraft \u2013 tillståndsansökan uppförd',
+ popover: [
+ ['Projektnamn', 'Projektnamn'],
+ ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
+ ['Verksamhetsutövare', 'Organisationsnamn'],
+ ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
+ ['Projektstatus', 'Projektstatus'],
+ ['Diarienummer', 'Diarienummer'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Samrådsunderlag inlämnat', 'SamradsunderlagInlamnat'],
+ ['Tillståndsansökan inlämnad', 'AnsokanInlamnat'],
+ ['Tillståndsansökan beviljad', 'AnsokanBeviljad'],
+ ['Överklagad', 'AnsokanOverklagad'],
+ ['Natura2000 ansökan', 'Natura2000_Ansokan'],
+ ['Natura2000 beslutsdatum', 'Natura2000_Beslutdatum'],
+ ['Parken uppförd', 'Uppfort'],
+ ['Beviljat antal verk', 'BeviljatAntalVerk'],
+ ['Uppfört antal verk', 'UppfortAntalVerk'],
+ ['Beviljad maxhöjd', 'BeviljadMaxhojd', { unit: 'm' }],
+ ['Installerad effekt', 'InstalleradEffekt', { unit: 'MW' }],
+ ['Beräknad årsproduktion', 'Calprod', { unit: 'GWh' }],
+ ['Elområde', 'ElNamn'],
+ ['Senast uppdaterat', 'SenasteUppdaterat'],
+ ],
+ },
+ 'vbk.offshore_approved': {
+ popoverTitle: 'Havsbaserad vindkraft \u2013 tillståndsansökan beviljad',
+ popover: [
+ ['Projektnamn', 'Projektnamn'],
+ ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
+ ['Verksamhetsutövare', 'Organisationsnamn'],
+ ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
+ ['Projektstatus', 'Projektstatus'],
+ ['Diarienummer', 'Diarienummer'],
+ ['Ändringsansökan pågår', 'AndringsansokanPagar'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Samrådsunderlag inlämnat', 'SamradsunderlagInlamnat'],
+ ['Tillståndsansökan inlämnad', 'AnsokanInlamnat'],
+ ['Tillståndsansökan återkallad', 'AnsokanAterkallad'],
+ ['Tillståndsansökan beviljad', 'AnsokanBeviljad'],
+ ['Natura2000 ansökan', 'Natura2000_Ansokan'],
+ ['Natura2000 beslutsdatum', 'Natura2000_Beslutdatum'],
+ ['Under byggnation', 'UnderByggnation'],
+ ['Planerat antal verk (min)', 'PlaneratAntalVerkMin'],
+ ['Planerat antal verk (max)', 'PlaneratAntalVerkMax'],
+ ['Panerad totalhöjd (min)', 'PlaneradHojdMin', { unit: 'm' }],
+ ['Panerad totalhöjd (max)', 'PlaneradHojdMax', { unit: 'm' }],
+ ['Planerad årsproduktion (min)', 'PlaneradProduktionMin', { unit: 'GWh' }],
+ ['Planerad årsproduktion (max)', 'PlaneradProduktionMax', { unit: 'GWh' }],
+ ['Planerad byggstart', 'PlaneradByggstart'],
+ ['Planerat drifttagande', 'PlaneratDrift'],
+ ['Beviljat antal verk', 'BeviljatAntalVerk'],
+ ['Beviljad maxhöjd', 'BeviljadMaxhojd', { unit: 'm' }],
+ ['Elområde', 'ElNamn'],
+ ['Senast uppdaterat', 'SenasteUppdaterat'],
+ ],
+ },
+ 'vbk.offshore_amended': {
+ popoverTitle: 'Havsbaserad vindkraft \u2013 ändringsansökan',
+ popover: [
+ ['Projektnamn', 'Projektnamn'],
+ ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
+ ['Verksamhetsutövare', 'Organisationsnamn'],
+ ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
+ ['Projektstatus', 'Projektstatus'],
+ ['Diarienummer', 'Diarienummer'],
+ //['Ändringsansökan pågår', 'AndringsansokanPagar'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Samrådsunderlag inlämnat', 'SamradsunderlagInlamnat'],
+ ['Tillståndsansökan inlämnad', 'AnsokanInlamnat'],
+ //['Natura2000 ansökan', 'Natura2000_Ansokan'],
+ //['Natura2000 beslutsdatum', 'Natura2000_Beslutdatum'],
+ ['Planerat antal verk (min)', 'PlaneratAntalVerkMin'],
+ ['Planerat antal verk (max)', 'PlaneratAntalVerkMax'],
+ ['Panerad totalhöjd (min)', 'PlaneradHojdMin', { unit: 'm' }],
+ ['Panerad totalhöjd (max)', 'PlaneradHojdMax', { unit: 'm' }],
+ ['Planerad årsproduktion (min)', 'PlaneradProduktionMin', { unit: 'GWh' }],
+ ['Planerad årsproduktion (max)', 'PlaneradProduktionMax', { unit: 'GWh' }],
+ ['Planerad byggstart', 'PlaneradByggstart'],
+ ['Planerat drifttagande', 'PlaneratDrift'],
+ ['Elområde', 'ElNamn'],
+ ['Senast uppdaterat', 'SenasteUppdaterat'],
+ ],
+ },
+ 'vbk.offshore_rejected': {
+ popoverTitle: 'Havsbaserad vindkraft \u2013 tillståndsansökan avslagen',
+ popover: [
+ ['Projektnamn', 'Projektnamn'],
+ ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
+ ['Verksamhetsutövare', 'Organisationsnamn'],
+ ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
+ ['Projektstatus', 'Projektstatus'],
+ ['Diarienummer', 'Diarienummer'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Samrådsunderlag inlämnat', 'SamradsunderlagInlamnat'],
+ ['Tillståndsansökan inlämnad', 'AnsokanInlamnat'],
+ ['Tillståndsansökan avslagen', 'AnsokanAvslagen'],
+ ['Natura2000 ansökan', 'Natura2000_Ansokan'],
+ ['Natura2000 beslutsdatum', 'Natura2000_Beslutdatum'],
+ ['Planerat antal verk (min)', 'PlaneratAntalVerkMin'],
+ ['Planerat antal verk (max)', 'PlaneratAntalVerkMax'],
+ ['Panerad totalhöjd (min)', 'PlaneradHojdMin', { unit: 'm' }],
+ ['Panerad totalhöjd (max)', 'PlaneradHojdMax', { unit: 'm' }],
+ ['Planerad årsproduktion (min)', 'PlaneradProduktionMin', { unit: 'GWh' }],
+ ['Planerad årsproduktion (max)', 'PlaneradProduktionMax', { unit: 'GWh' }],
+ ['Planerad byggstart', 'PlaneradByggstart'],
+ ['Planerat drifttagande', 'PlaneratDrift'],
+ ['Elområde', 'ElNamn'],
+ ['Senast uppdaterat', 'SenasteUppdaterat'],
+ ],
+ },
+ 'vbk.offshore_appealed': {
+ popoverTitle: 'Havsbaserad vindkraft \u2013 överklagad',
+ popover: [
+ ['Projektnamn', 'Projektnamn'],
+ ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
+ ['Verksamhetsutövare', 'Organisationsnamn'],
+ ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
+ ['Projektstatus', 'Projektstatus'],
+ ['Diarienummer', 'Diarienummer'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Samrådsunderlag inlämnat', 'SamradsunderlagInlamnat'],
+ ['Tillståndsansökan inlämnad', 'AnsokanInlamnat'],
+ ['Tillståndsansökan beviljad', 'AnsokanBeviljad'],
+ ['Överklagad', 'AnsokanOverklagad'],
+ ['Natura2000 ansökan', 'Natura2000_Ansokan'],
+ ['Natura2000 beslutsdatum', 'Natura2000_Beslutdatum'],
+ ['Planerat antal verk (min)', 'PlaneratAntalVerkMin'],
+ ['Planerat antal verk (max)', 'PlaneratAntalVerkMax'],
+ ['Panerad totalhöjd (min)', 'PlaneradHojdMin', { unit: 'm' }],
+ ['Panerad totalhöjd (max)', 'PlaneradHojdMax', { unit: 'm' }],
+ ['Planerad årsproduktion (min)', 'PlaneradProduktionMin', { unit: 'GWh' }],
+ ['Planerad årsproduktion (max)', 'PlaneradProduktionMax', { unit: 'GWh' }],
+ ['Planerad byggstart', 'PlaneradByggstart'],
+ ['Planerat drifttagande', 'PlaneratDrift'],
+ ['Beviljat antal verk', 'BeviljatAntalVerk'],
+ ['Beviljad maxhöjd', 'BeviljadMaxhojd', { unit: 'm' }],
+ ['Elområde', 'ElNamn'],
+ ['Senast uppdaterat', 'SenasteUppdaterat'],
+ ],
+ },
+ 'vbk.offshore_applied': {
+ popoverTitle: 'Havsbaserad vindkraft \u2013 tillståndsansökan inlämnad',
+ popover: [
+ ['Projektnamn', 'Projektnamn'],
+ ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
+ ['Verksamhetsutövare', 'Organisationsnamn'],
+ ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
+ ['Projektstatus', 'Projektstatus'],
+ ['Diarienummer', 'Diarienummer'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Samrådsunderlag inlämnat', 'SamradsunderlagInlamnat'],
+ ['Tillståndsansökan inlämnad', 'AnsokanInlamnat'],
+ ['Natura2000 ansökan', 'Natura2000_Ansokan'],
+ ['Natura2000 beslutsdatum', 'Natura2000_Beslutdatum'],
+ ['Planerat antal verk (min)', 'PlaneratAntalVerkMin'],
+ ['Planerat antal verk (max)', 'PlaneratAntalVerkMax'],
+ ['Panerad totalhöjd (min)', 'PlaneradHojdMin', { unit: 'm' }],
+ ['Panerad totalhöjd (max)', 'PlaneradHojdMax', { unit: 'm' }],
+ ['Planerad årsproduktion (min)', 'PlaneradProduktionMin', { unit: 'GWh' }],
+ ['Planerad årsproduktion (max)', 'PlaneradProduktionMax', { unit: 'GWh' }],
+ ['Planerad byggstart', 'PlaneradByggstart'],
+ ['Planerat drifttagande', 'PlaneratDrift'],
+ ['Elområde', 'ElNamn'],
+ ['Senast uppdaterat', 'SenasteUppdaterat'],
+ ],
+ },
+ 'vbk.offshore_consultation': {
+ popoverTitle: 'Havsbaserad vindkraft \u2013 samråd inför tillståndsansökan',
+ popover: [
+ ['Projektnamn', 'Projektnamn'],
+ ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
+ ['Verksamhetsutövare', 'Organisationsnamn'],
+ ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
+ ['Projektstatus', 'Projektstatus'],
+ ['Diarienummer', 'Diarienummer'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Samrådsunderlag inlämnat', 'SamradsunderlagInlamnat'],
+ ['Natura2000 ansökan', 'Natura2000_Ansokan'],
+ ['Natura2000 beslutsdatum', 'Natura2000_Beslutdatum'],
+ ['Planerat antal verk (min)', 'PlaneratAntalVerkMin'],
+ ['Planerat antal verk (max)', 'PlaneratAntalVerkMax'],
+ ['Panerad totalhöjd (min)', 'PlaneradHojdMin', { unit: 'm' }],
+ ['Panerad totalhöjd (max)', 'PlaneradHojdMax', { unit: 'm' }],
+ ['Planerad årsproduktion (min)', 'PlaneradProduktionMin', { unit: 'GWh' }],
+ ['Planerad årsproduktion (max)', 'PlaneradProduktionMax', { unit: 'GWh' }],
+ ['Planerad byggstart', 'PlaneradByggstart'],
+ ['Planerat drifttagande', 'PlaneratDrift'],
+ ['Elområde', 'ElNamn'],
+ ['Senast uppdaterat', 'SenasteUppdaterat'],
+ ],
+ },
+ 'vbk.offshore_investigation': {
+ popoverTitle: 'Havsbaserad vindkraft \u2013 inledande undersökningar',
+ popover: [
+ ['Projektnamn', 'Projektnamn'],
+ ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
+ ['Verksamhetsutövare', 'Organisationsnamn'],
+ ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
+ ['Projektstatus', 'Projektstatus'],
+ ['Diarienummer', 'Diarienummer'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Natura2000 ansökan', 'Natura2000_Ansokan'],
+ ['Natura2000 beslutsdatum', 'Natura2000_Beslutdatum'],
+ ['Planerat antal verk (min)', 'PlaneratAntalVerkMin'],
+ ['Planerat antal verk (max)', 'PlaneratAntalVerkMax'],
+ ['Panerad totalhöjd (min)', 'PlaneradHojdMin', { unit: 'm' }],
+ ['Panerad totalhöjd (max)', 'PlaneradHojdMax', { unit: 'm' }],
+ ['Planerad årsproduktion (min)', 'PlaneradProduktionMin', { unit: 'GWh' }],
+ ['Planerad årsproduktion (max)', 'PlaneradProduktionMax', { unit: 'GWh' }],
+ ['Planerad byggstart', 'PlaneradByggstart'],
+ ['Planerat drifttagande', 'PlaneratDrift'],
+ ['Elområde', 'ElNamn'],
+ ['Senast uppdaterat', 'SenasteUppdaterat'],
+ ],
+ },
+ 'vbk.offshore_revoked': {
+ popoverTitle: 'Havsbaserad vindkraft \u2013 inte aktuell eller återkallad',
+ popover: [
+ ['Projektnamn', 'Projektnamn'],
+ ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
+ ['Verksamhetsutövare', 'Organisationsnamn'],
+ ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
+ ['Projektstatus', 'Projektstatus'],
+ ['Diarienummer', 'Diarienummer'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Samrådsunderlag inlämnat', 'SamradsunderlagInlamnat'],
+ ['Tillståndsansökan inlämnad', 'AnsokanInlamnat'],
+ ['Tillståndsansökan återkallad', 'AnsokanAterkallad'],
+ ['Tillståndsansökan beviljad', 'AnsokanBeviljad'],
+ ['Överklagad', 'AnsokanOverklagad'],
+ ['Natura2000 ansökan', 'Natura2000_Ansokan'],
+ ['Natura2000 beslutsdatum', 'Natura2000_Beslutdatum'],
+ ['Planerat antal verk (min)', 'PlaneratAntalVerkMin'],
+ ['Planerat antal verk (max)', 'PlaneratAntalVerkMax'],
+ ['Panerad totalhöjd (min)', 'PlaneradHojdMin', { unit: 'm' }],
+ ['Panerad totalhöjd (max)', 'PlaneradHojdMax', { unit: 'm' }],
+ ['Planerad årsproduktion (min)', 'PlaneradProduktionMin', { unit: 'GWh' }],
+ ['Planerad årsproduktion (max)', 'PlaneradProduktionMax', { unit: 'GWh' }],
+ ['Planerad byggstart', 'PlaneradByggstart'],
+ ['Planerat drifttagande', 'PlaneratDrift'],
+ ['Beviljat antal verk', 'BeviljatAntalVerk'],
+ ['Beviljad maxhöjd', 'BeviljadMaxhojd', { unit: 'm' }],
+ ['Elområde', 'ElNamn'],
+ ['Senast uppdaterat', 'SenasteUppdaterat'],
+ ],
+ },
+ 'vbk.station_completed': {
+ popoverTitle: 'Landbaserad vindkraftverk \u2013 uppfört',
+ popover: [
+ ['Verk-ID', 'VerkID', { classes: ['feature-objid'] }],
+ ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
+ ['Projektnamn', 'Projektnamn'],
+ ['Status', 'Status'],
+ ['Handlingstyp', 'Handlingstyp'],
+ ['Uppförandedatum', 'Uppfort'],
+ ['Miljöbalken tillstånd tidsbegränsning', 'MB_Tillstand'],
+ ['Totalhöjd', 'Totalhojd', { unit: 'm' }],
+ ['Navhöjd', 'Navhojd', { unit: 'm' }],
+ ['Rotordiameter', 'Rotordiameter', { unit: 'm' }],
+ ['Maxeffekt', 'Maxeffekt', { unit: 'MW' }],
+ ['Beräknad årsproduktion', 'Calprod', { unit: 'GWh' }],
+ ['Fabrikat', 'Fabrikat'],
+ ['Modell', 'Modell'],
+ ['Organisationsnamn', 'Organisationsnamn'],
+ ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
+ ['Placering', 'Placering'],
+ //['Kommun', 'KOMNAMN'],
+ //['Län', 'LANSNAMN'],
+ ['Elområde', 'ElNamn'],
+ ['Datum för senaste uppdatering av verk', 'SenasteUppdaterat'],
+ ],
+ },
+ 'vbk.station_processed': {
+ popoverTitle: 'Landbaserad vindkraftverk \u2013 handlagt',
+ popover: [
+ ['Verk-ID', 'VerkID', { classes: ['feature-objid'] }],
+ ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
+ ['Projektnamn', 'Projektnamn'],
+ ['Status', 'Status'],
+ ['Handlingstyp', 'Handlingstyp'],
+ ['Totalhöjd', 'Totalhojd', { unit: 'm' }],
+ ['Navhöjd', 'Navhojd', { unit: 'm' }],
+ ['Rotordiameter', 'Rotordiameter', { unit: 'm' }],
+ ['Maxeffekt', 'Maxeffekt', { unit: 'MW' }],
+ ['Beräknad årsproduktion', 'Calprod', { unit: 'GWh' }],
+ ['Fabrikat', 'Fabrikat'],
+ ['Modell', 'Modell'],
+ ['Organisationsnamn', 'Organisationsnamn'],
+ ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
+ ['Placering', 'Placering'],
+ //['Kommun', 'KOMNAMN'],
+ //['Län', 'LANSNAMN'],
+ ['Elområde', 'ElNamn'],
+ ['Datum för senaste uppdatering av verk', 'SenasteUppdaterat'],
+ ],
+ },
+ 'vbk.station_approved': {
+ popoverTitle: 'Landbaserad vindkraftverk \u2013 beviljat',
+ popover: [
+ ['Verk-ID', 'VerkID', { classes: ['feature-objid'] }],
+ ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
+ ['Projektnamn', 'Projektnamn'],
+ ['Status', 'Status'],
+ ['Handlingstyp', 'Handlingstyp'],
+ ['Miljöbalken tillstånd tidsbegränsning', 'MB_Tillstand'],
+ ['Totalhöjd', 'Totalhojd', { unit: 'm' }],
+ ['Navhöjd', 'Navhojd', { unit: 'm' }],
+ ['Rotordiameter', 'Rotordiameter', { unit: 'm' }],
+ ['Maxeffekt', 'Maxeffekt', { unit: 'MW' }],
+ ['Beräknad årsproduktion', 'Calprod', { unit: 'GWh' }],
+ ['Fabrikat', 'Fabrikat'],
+ ['Modell', 'Modell'],
+ ['Organisationsnamn', 'Organisationsnamn'],
+ ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
+ ['Placering', 'Placering'],
+ //['Kommun', 'KOMNAMN'],
+ //['Län', 'LANSNAMN'],
+ ['Elområde', 'ElNamn'],
+ ['Datum för senaste uppdatering av verk', 'SenasteUppdaterat'],
+ ],
+ },
+ 'vbk.station_revoked': {
+ popoverTitle: 'Landbaserad vindkraftverk \u2013 inte längre aktuell/återkallat',
+ popover: [
+ ['Verk-ID', 'VerkID', { classes: ['feature-objid'] }],
+ ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
+ ['Projektnamn', 'Projektnamn'],
+ ['Status', 'Status'],
+ ['Handlingstyp', 'Handlingstyp'],
+ ['Miljöbalken tillstånd tidsbegränsning', 'MB_Tillstand'],
+ ['Totalhöjd', 'Totalhojd', { unit: 'm' }],
+ ['Navhöjd', 'Navhojd', { unit: 'm' }],
+ ['Rotordiameter', 'Rotordiameter', { unit: 'm' }],
+ ['Maxeffekt', 'Maxeffekt', { unit: 'MW' }],
+ ['Beräknad årsproduktion', 'Calprod', { unit: 'GWh' }],
+ ['Fabrikat', 'Fabrikat'],
+ ['Modell', 'Modell'],
+ ['Organisationsnamn', 'Organisationsnamn'],
+ ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
+ ['Placering', 'Placering'],
+ //['Kommun', 'KOMNAMN'],
+ //['Län', 'LANSNAMN'],
+ ['Elområde', 'ElNamn'],
+ ['Datum för senaste uppdatering av verk', 'SenasteUppdaterat'],
+ ],
+ },
+ 'vbk.station_rejected': {
+ popoverTitle: 'Landbaserad vindkraftverk \u2013 avslagit/nekat',
+ popover: [
+ ['Verk-ID', 'VerkID', { classes: ['feature-objid'] }],
+ ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
+ ['Projektnamn', 'Projektnamn'],
+ ['Status', 'Status'],
+ ['Handlingstyp', 'Handlingstyp'],
+ ['Miljöbalken tillstånd tidsbegränsning', 'MB_Tillstand'],
+ ['Totalhöjd', 'Totalhojd', { unit: 'm' }],
+ ['Navhöjd', 'Navhojd', { unit: 'm' }],
+ ['Rotordiameter', 'Rotordiameter', { unit: 'm' }],
+ ['Maxeffekt', 'Maxeffekt', { unit: 'MW' }],
+ ['Beräknad årsproduktion', 'Calprod', { unit: 'GWh' }],
+ ['Fabrikat', 'Fabrikat'],
+ ['Modell', 'Modell'],
+ ['Organisationsnamn', 'Organisationsnamn'],
+ ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
+ ['Placering', 'Placering'],
+ //['Kommun', 'KOMNAMN'],
+ //['Län', 'LANSNAMN'],
+ ['Elområde', 'ElNamn'],
+ ['Datum för senaste uppdatering av verk', 'SenasteUppdaterat'],
+ ],
+ },
+ 'vbk.station_dismounted': {
+ popoverTitle: 'Landbaserad vindkraftverk \u2013 nedmonterat',
+ popover: [
+ ['Verk-ID', 'VerkID', { classes: ['feature-objid'] }],
+ ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
+ ['Projektnamn', 'Projektnamn'],
+ ['Status', 'Status'],
+ ['Handlingstyp', 'Handlingstyp'],
+ ['Uppförandedatum', 'Uppfort'],
+ ['Totalhöjd', 'Totalhojd', { unit: 'm' }],
+ ['Navhöjd', 'Navhojd', { unit: 'm' }],
+ ['Rotordiameter', 'Rotordiameter', { unit: 'm' }],
+ ['Maxeffekt', 'Maxeffekt', { unit: 'MW' }],
+ ['Beräknad årsproduktion', 'Calprod', { unit: 'GWh' }],
+ ['Fabrikat', 'Fabrikat'],
+ ['Modell', 'Modell'],
+ ['Organisationsnamn', 'Organisationsnamn'],
+ ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
+ ['Placering', 'Placering'],
+ //['Kommun', 'KOMNAMN'],
+ //['Län', 'LANSNAMN'],
+ ['Elområde', 'ElNamn'],
+ ['Datum för senaste uppdatering av verk', 'SenasteUppdaterat'],
+ ],
+ },
+ 'vbk.station_appealed': {
+ popoverTitle: 'Landbaserad vindkraftverk \u2013 överklagat',
+ popover: [
+ ['Verk-ID', 'VerkID', { classes: ['feature-objid'] }],
+ ['Områdes-ID', 'OmrID', { classes: ['feature-objid'] }],
+ ['Projektnamn', 'Projektnamn'],
+ ['Status', 'Status'],
+ ['Handlingstyp', 'Handlingstyp'],
+ ['Totalhöjd', 'Totalhojd', { unit: 'm' }],
+ ['Navhöjd', 'Navhojd', { unit: 'm' }],
+ ['Rotordiameter', 'Rotordiameter', { unit: 'm' }],
+ ['Maxeffekt', 'Maxeffekt', { unit: 'MW' }],
+ ['Beräknad årsproduktion', 'Calprod', { unit: 'GWh' }],
+ ['Fabrikat', 'Fabrikat'],
+ ['Modell', 'Modell'],
+ ['Organisationsnamn', 'Organisationsnamn'],
+ ['Organisationsnummer', 'Organisationsnummer', { classes: ['feature-orgnr'] }],
+ ['Placering', 'Placering'],
+ //['Kommun', 'KOMNAMN'],
+ //['Län', 'LANSNAMN'],
+ ['Elområde', 'ElNamn'],
+ ['Datum för senaste uppdatering av verk', 'SenasteUppdaterat'],
+ ],
+ },
+
+ /* Documentation at
+ * https://www.skogsstyrelsen.se/globalassets/sjalvservice/karttjanster/geodatatjanster/produktbeskrivningar/utforda-avverkningar---produktbeskrivning.pdf
+ * */
+ 'avverk.utford': {
+ popoverTitle: 'Utförd avverkning',
+ popover: [
+ ['Ärendebeteckning', 'Beteckn', { classes: ['feature-objid'] }],
+ ['Registeringsår', 'ArendeAr'],
+ ['Skogstyp', 'Skogstyp'],
+ ['Areal anmält', 'AnmaldHa', { unit: 'ha' }],
+ ['Areal naturlig föryngring', 'NatforHa', { unit: 'ha', fn: (v) => v === 0 ? '' : v }],
+ //['Areal plantering', 'SkogsodlHa', { unit: 'ha', fn: (v) => v === 0 ? '' : v }],
+ ['Avverkningstyp', 'Avverktyp'],
+ ['Datum för avverkning', 'Avvdatum'],
+ ['Ursprung för datum för avverkning', 'KallaDatum'],
+ //['Ursprung för areal avverkning', 'KallaAreal'],
+ //['Kommun', 'Kommun'],
+ //['Län', 'Lan'],
+ ['Areal för ytan', 'geom_area', { fn: 'area' }],
+ ],
+ },
+ /* Documentation at
+ * https://www.skogsstyrelsen.se/globalassets/sjalvservice/karttjanster/geodatatjanster/produktbeskrivningar/yttre-granser-for-avverkningsanmalda-omraden---produktbeskrivning.pdf
+ * */
+ 'avverk.anmald': {
+ popoverTitle: 'Avverkningsanmälansområde',
+ popover: [
+ ['Ärendebeteckning', 'Beteckn', { classes: ['feature-objid'] }],
+ ['Inkom datum', 'Inkomdatum'],
+ ['Registeringsår', 'ArendeAr'],
+ //['Skogstyp', 'Skogstyp'],
+ ['Areal anmält', 'AnmaldHa', { unit: 'ha' }],
+ ['Areal naturlig föryngring', 'NatforHa', { unit: 'ha', fn: (v) => v === 0 ? '' : v }],
+ ['Areal plantering', 'SkogsodlHa', { unit: 'ha', fn: (v) => v === 0 ? '' : v }],
+ ['Avverkningssäsong', 'AvvSasong'],
+ //['Avverkningstyp', 'Avverktyp'],
+ //['Ändamål', 'Andamal'],
+ //['Kommun', 'Kommun'],
+ //['Län', 'Lan'],
+ ['Ärendestatus', 'ArendeStatus'],
+ ['Avverkad areal', 'AvvHa', { unit: 'ha' }],
+ ],
+ },
+
+ 'skydd.tilltradesforbud': {
+ popoverTitle: 'Tillträdesförbud',
+ popover: [
+ ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
+ ['Föreskriftsområde', 'FORSKRNAMN'],
+ ['Namn', 'OBJEKTNAMN'],
+ ['Beslutsstatus', 'BESLSTAT'],
+ ['Föreskriftstyp', 'FORESKRTYP'],
+ ['Föreskriftssubtyp', 'FORESKRIFT'],
+ ['Från datum', 'FRANDATUM'],
+ ['Till datum', 'TILLDATUM'],
+ ['Beskrivning', 'BESKRIVN'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ],
+ },
+ 'skydd.nationalpark': {
+ popoverTitle: 'Nationalpark',
+ popover: [
+ ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
+ ['Namn', 'NAMN'],
+ ['Skyddstyp', 'SKYDDSTYP'],
+ ['Beslutsstatus', 'BESLSTATUS'],
+ ['Beslutsdatum (bildande)', 'URSBESLDAT'],
+ ['Ursprungligt gällandedatum', 'URSGALLDAT'],
+ ['Senaste gällandedatum', 'SENGALLDAT'],
+ ['Förvaltare', 'FORVALTARE'],
+ ['IUCN-kategori', 'IUCNKAT'],
+ ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
+ ['Lagrum', 'LAGRUM'],
+ ['Beslutsmyndighet', 'BESLMYND'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Areal land', 'LAND_HA', { unit: 'ha' }],
+ ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
+ ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
+ ],
+ },
+ 'skydd.naturreservat': {
+ popoverTitle: 'Naturreservat',
+ popover: [
+ ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
+ ['Namn', 'NAMN'],
+ ['Skyddstyp', 'SKYDDSTYP'],
+ ['Beslutsstatus', 'BESLSTATUS'],
+ ['Beslutsdatum (bildande)', 'URSBESLDAT'],
+ ['Ursprungligt gällandedatum', 'URSGALLDAT'],
+ ['Senaste gällandedatum', 'SENGALLDAT'],
+ ['Förvaltare', 'FORVALTARE'],
+ ['IUCN-kategori', 'IUCNKAT'],
+ ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
+ ['Lagrum', 'LAGRUM'],
+ ['Beslutsmyndighet', 'BESLMYND'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Areal land', 'LAND_HA', { unit: 'ha' }],
+ ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
+ ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
+ ],
+ },
+ 'skydd.naturreservat_kommunalt': {
+ popoverTitle: 'Kommunalt naturreservat',
+ popover: [
+ ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
+ ['Namn', 'NAMN'],
+ ['Skyddstyp', 'SKYDDSTYP'],
+ ['Beslutsstatus', 'BESLSTATUS'],
+ ['Beslutsdatum (bildande)', 'URSBESLDAT'],
+ ['Ursprungligt gällandedatum', 'URSGALLDAT'],
+ ['Senaste gällandedatum', 'SENGALLDAT'],
+ ['Förvaltare', 'FORVALTARE'],
+ ['IUCN-kategori', 'IUCNKAT'],
+ ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
+ ['Lagrum', 'LAGRUM'],
+ ['Beslutsmyndighet', 'BESLMYND'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Areal land', 'LAND_HA', { unit: 'ha' }],
+ ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
+ ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
+ ],
+ },
+ 'skydd.naturvardsomrade': {
+ popoverTitle: 'Naturvårdsområde',
+ popover: [
+ ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
+ ['Namn', 'NAMN'],
+ ['Skyddstyp', 'SKYDDSTYP'],
+ ['Beslutsstatus', 'BESLSTATUS'],
+ ['Beslutsdatum (bildande)', 'URSBESLDAT'],
+ ['Ursprungligt gällandedatum', 'URSGALLDAT'],
+ ['Senaste gällandedatum', 'SENGALLDAT'],
+ ['Förvaltare', 'FORVALTARE'],
+ ['IUCN-kategori', 'IUCNKAT'],
+ ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
+ ['Lagrum', 'LAGRUM'],
+ ['Beslutsmyndighet', 'BESLMYND'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Areal land', 'LAND_HA', { unit: 'ha' }],
+ ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
+ ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
+ ],
+ },
+ 'skydd.djur_och_vaxtskyddsomrade': {
+ popoverTitle: 'Djur- och växtskyddsområde',
+ popover: [
+ ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
+ ['Namn', 'NAMN'],
+ ['Skyddstyp', 'SKYDDSTYP'],
+ ['Beslutsstatus', 'BESLSTATUS'],
+ ['Beslutsdatum (bildande)', 'URSBESLDAT'],
+ ['Ursprungligt gällandedatum', 'URSGALLDAT'],
+ ['Senaste gällandedatum', 'SENGALLDAT'],
+ ['Förvaltare', 'FORVALTARE'],
+ ['IUCN-kategori', 'IUCNKAT'],
+ ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
+ ['Lagrum', 'LAGRUM'],
+ ['Beslutsmyndighet', 'BESLMYND'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Areal land', 'LAND_HA', { unit: 'ha' }],
+ ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
+ ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
+ ],
+ },
+ 'skydd.kulturreservat': {
+ popoverTitle: 'Kulturreservat',
+ popover: [
+ ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
+ ['Namn', 'NAMN'],
+ ['Skyddstyp', 'SKYDDSTYP'],
+ ['Beslutsstatus', 'BESLSTATUS'],
+ ['Beslutsdatum (bildande)', 'URSBESLDAT'],
+ ['Ursprungligt gällandedatum', 'URSGALLDAT'],
+ ['Senaste gällandedatum', 'SENGALLDAT'],
+ ['Förvaltare', 'FORVALTARE'],
+ ['IUCN-kategori', 'IUCNKAT'],
+ ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
+ ['Lagrum', 'LAGRUM'],
+ ['Beslutsmyndighet', 'BESLMYND'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Areal land', 'LAND_HA', { unit: 'ha' }],
+ ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
+ ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
+ ],
+ },
+ 'skydd.vattenskyddsomrade': {
+ popoverTitle: 'Vattenskyddsområden',
+ popover: [
+ ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
+ ['Namn', 'NAMN'],
+ ['Skyddstyp', 'SKYDDSTYP'],
+ ['Beslutsstatus', 'BESLSTATUS'],
+ ['Beslutsdatum (bildande)', 'URSBESLDAT'],
+ ['Ikraftträdandedatum föreskrifter', 'IKRAFTDATF'],
+ ['Beslutsmyndighet', 'BESLMYND'],
+ ['Tillsynsmyndighet', 'TILLSYNSMH'],
+ ['Prövningsmyndighet tillstånd', 'PROVNMHTIL'],
+ ['Prövningsmyndighet dispens', 'PROVNMHDIS'],
+ ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
+ ['Lagrum', 'LAGRUM'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Areal land', 'LAND_HA', { unit: 'ha' }],
+ ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
+ ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
+ ],
+ },
+ 'skydd.landskapsbildsskyddsomrade': {
+ popoverTitle: 'Landskapsbildsskyddsområde',
+ popover: [
+ ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
+ ['Namn', 'NAMN'],
+ ['Skyddstyp', 'SKYDDSTYP'],
+ ['Beslutsstatus', 'BESLSTATUS'],
+ ['Beslutsdatum (bildande)', 'URSBESLDAT'],
+ ['Ursprungligt gällandedatum', 'URSGALLDAT'],
+ ['Senaste gällandedatum', 'SENGALLDAT'],
+ ['Förvaltare', 'FORVALTARE'],
+ ['IUCN-kategori', 'IUCNKAT'],
+ ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
+ ['Lagrum', 'LAGRUM'],
+ ['Beslutsmyndighet', 'BESLMYND'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Areal land', 'LAND_HA', { unit: 'ha' }],
+ ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
+ ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
+ ],
+ },
+ 'skydd.skogligt_biotopskyddsomrade': {
+ popoverTitle: 'Biotopskydd i skogsmark',
+ popover: [
+ ['Ärendebeteckning', 'Beteckn', { classes: ['feature-objid'] }],
+ ['Biotopkategori', 'Biotyp'],
+ ['Skogstyp', 'Naturtyp'],
+ ['Registeringsår', 'ArendeAr'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Skogsmarksareal', 'AreaProd', { unit: 'ha' }],
+ ['Beslutsdatum', 'Datbeslut'],
+ ['Länk', 'Url', { fn: function(v) {
+ if (v == null | v === '') {
+ return;
+ }
+ const a = document.createElement('a');
+ a.href = v;
+ a.target = '_blank';
+ const i = document.createElement('i');
+ i.classList.add('bi', 'bi-box-arrow-up-right');
+ a.appendChild(i);
+ return a;
+ }}],
+ ],
+ },
+ 'skydd.ovrigt_biotopskyddsomrade': {
+ popoverTitle: 'Biotopskydd utanför skogsmark',
+ popover: [
+ ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
+ ['Namn', 'NAMN'],
+ ['Skyddstyp', 'SKYDDSTYP'],
+ ['Beslutsstatus', 'BESLSTATUS'],
+ ['Beslutsdatum (bildande)', 'URSBESLDAT'],
+ ['Ursprungligt gällandedatum', 'URSGALLDAT'],
+ ['Senaste gällandedatum', 'SENGALLDAT'],
+ ['Förvaltare', 'FORVALTARE'],
+ ['IUCN-kategori', 'IUCNKAT'],
+ ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
+ ['Lagrum', 'LAGRUM'],
+ ['Beslutsmyndighet', 'BESLMYND'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Areal land', 'LAND_HA', { unit: 'ha' }],
+ ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
+ ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
+ ],
+ },
+ 'skydd.naturminne_yta': {
+ popoverTitle: 'Naturminne (yta)',
+ popover: [
+ ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
+ ['Namn', 'NAMN'],
+ ['Skyddstyp', 'SKYDDSTYP'],
+ ['Beslutsstatus', 'BESLSTATUS'],
+ ['Beslutsdatum (bildande)', 'URSBESLDAT'],
+ ['Ursprungligt gällandedatum', 'URSGALLDAT'],
+ ['Senaste gällandedatum', 'SENGALLDAT'],
+ ['Förvaltare', 'FORVALTARE'],
+ ['IUCN-kategori', 'IUCNKAT'],
+ ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
+ ['Lagrum', 'LAGRUM'],
+ ['Beslutsmyndighet', 'BESLMYND'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Areal land', 'LAND_HA', { unit: 'ha' }],
+ ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
+ ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
+ ],
+ },
+ 'skydd.naturminne_punkt': {
+ popoverTitle: 'Naturminne (punkt)',
+ popover: [
+ ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
+ ['Namn', 'NAMN'],
+ ['Skyddstyp', 'SKYDDSTYP'],
+ ['Beslutsstatus', 'BESLSTATUS'],
+ ['Beslutsdatum (bildande)', 'URSBESLDAT'],
+ ['Ursprungligt gällandedatum', 'URSGALLDAT'],
+ ['Senaste gällandedatum', 'SENGALLDAT'],
+ ['Förvaltare', 'FORVALTARE'],
+ ['IUCN-kategori', 'IUCNKAT'],
+ ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
+ ['Lagrum', 'LAGRUM'],
+ ['Beslutsmyndighet', 'BESLMYND'],
+ ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
+ ],
+ },
+ 'skydd.interimistiskt_forbud': {
+ popoverTitle: 'Interimistiskt förbud',
+ popover: [
+ ['NVR-ID', 'NVRID', { classes: ['feature-objid'] }],
+ ['Namn', 'NAMN'],
+ ['Skyddstyp', 'SKYDDSTYP'],
+ ['Beslutsstatus', 'BESLSTATUS'],
+ ['Beslutsdatum (bildande)', 'URSBESLDAT'],
+ ['Ursprungligt gällandedatum', 'URSGALLDAT'],
+ ['Senaste gällandedatum', 'SENGALLDAT'],
+ ['Förvaltare', 'FORVALTARE'],
+ ['IUCN-kategori', 'IUCNKAT'],
+ ['Diarienummer', 'DIARIENR', { classes: ['feature-attr-dnr'] }],
+ ['Lagrum', 'LAGRUM'],
+ ['Beslutsmyndighet', 'BESLMYND'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Areal land', 'LAND_HA', { unit: 'ha' }],
+ ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
+ ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
+ ],
+ },
+ 'skydd.fageldirektivet': {
+ popoverTitle: 'Fågeldirektivet (SPA)',
+ popover: [
+ ['Områdeskod', 'SITE_CODE', { classes: ['feature-objid'] }],
+ ['Namn', 'NAMN'],
+ ['Områdestyp', 'OMRADESTYP'],
+ ['Uppgiftslämnare', 'UPPLAMNARE'],
+ ['SPA-datum', 'SPA_DATUM'],
+ ['SCI-förslagsdatum', 'SCI_FORSL'],
+ ['SCI-datum', 'SCI_DATUM'],
+ ['SAC-datum', 'SAC_DATUM'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Kvalitet', 'KVALITET'],
+ ['Kännetecken för området', 'KARAKTAR'],
+ ['Arter', 'ARTER'],
+ ['Naturtyper', 'NATURTYPER'],
+ ['Bevarandeplan', 'BEVPLAN', { fn: function(v) {
+ const a = document.createElement('a');
+ a.href = v;
+ a.target = '_blank';
+ const i = document.createElement('i');
+ i.classList.add('bi', 'bi-box-arrow-up-right');
+ a.appendChild(i);
+ return a;
+ }}],
+ ],
+ },
+ 'skydd.habitatdirektivet': {
+ popoverTitle: 'Art- och habitatdirektivet (SCI)',
+ popover: [
+ ['Områdeskod', 'SITE_CODE', { classes: ['feature-objid'] }],
+ ['Namn', 'NAMN'],
+ ['Områdestyp', 'OMRADESTYP'],
+ ['Uppgiftslämnare', 'UPPLAMNARE'],
+ ['SPA-datum', 'SPA_DATUM'],
+ ['SCI-förslagsdatum', 'SCI_FORSL'],
+ ['SCI-datum', 'SCI_DATUM'],
+ ['SAC-datum', 'SAC_DATUM'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Kvalitet', 'KVALITET'],
+ ['Kännetecken för området', 'KARAKTAR'],
+ ['Arter', 'ARTER'],
+ ['Naturtyper', 'NATURTYPER'],
+ ['Bevarandeplan', 'BEVPLAN', { fn: function(v) {
+ const a = document.createElement('a');
+ a.href = v;
+ a.target = '_blank';
+ const i = document.createElement('i');
+ i.classList.add('bi', 'bi-box-arrow-up-right');
+ a.appendChild(i);
+ return a;
+ }}],
+ ],
+ },
+ 'skydd.helcom': {
+ popoverTitle: 'Marina skyddade områden (Helcom MPA)',
+ popover: [
+ ['Namn', 'NAME'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ],
+ },
+ 'skydd.ramsar': {
+ popoverTitle: 'Ramsar-områden (Våtmarkskonventionen)',
+ popover: [
+ ['Ramsar-ID', 'RAMSAR_ID', { classes: ['feature-objid'] }],
+ ['Skyddstyp', 'SKYDDSTYP'],
+ ['Namn', 'NAMN'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Areal land', 'LAND_HA', { unit: 'ha' }],
+ ['Areal vatten', 'VATTEN_HA', { unit: 'ha' }],
+ ['Skogsmarksareal', 'SKOG_HA', { unit: 'ha' }],
+ ['Ursprungligt beslutsdatum', 'URSPR_BESL'],
+ ['Senaste beslutsdatum', 'SEN_BESLUT'],
+ ['Rättsakt', 'LEGAL_ACT'],
+ ['Länk', 'LINK', { fn: function(v) {
+ if (v == null || v === '') {
+ return;
+ }
+ const a = document.createElement('a');
+ a.href = v;
+ a.target = '_blank';
+ const i = document.createElement('i');
+ i.classList.add('bi', 'bi-box-arrow-up-right');
+ a.appendChild(i);
+ return a;
+ }}],
+ ],
+ },
+ 'skydd.ospar': {
+ popoverTitle: 'Marina skyddade områden (Ospar MPA)',
+ popover: [
+ ['Ursprung', 'ORIGIN'],
+ ['N2000-namn', 'NAMN_N2000'],
+ ['MPA-ID', 'MPA_ID', { classes: ['feature-objid'] }],
+ ['MPA-namn', 'MPA_NAMN'],
+ ['N2000-ID', 'N2000_SITE', { classes: ['feature-objid'] }],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ],
+ },
+ 'skydd.varldsarv': {
+ popoverTitle: 'Världsarv med mycket höga naturvärden (Unesco)',
+ popover: [
+ ['Namn', 'NAMN'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ],
+ },
+ 'skydd.biosfarsomraden': {
+ popoverTitle: 'Biosfärsområde (Unesco)',
+ popover: [
+ ['Namn', 'NAMN'],
+ ['Skyddstyp', 'SKYDDSTYP'],
+ ['Länk', 'LINK', { fn: function(v) {
+ if (v == null || v === '') {
+ return;
+ }
+ const a = document.createElement('a');
+ a.href = v;
+ a.target = '_blank';
+ const i = document.createElement('i');
+ i.classList.add('bi', 'bi-box-arrow-up-right');
+ a.appendChild(i);
+ return a;
+ }}],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ],
+ },
+ 'skydd.naturvardsavtal': {
+ popoverTitle: 'Naturvårdsavtal (Naturvårdsverket, Länsstyrelsen)',
+ popover: [
+ ['ID', 'ID', { classes: ['feature-objid'] }],
+ ['Namn', 'OBJNAMN'],
+ ['Fastighet', 'FASTBET', { classes: ['feature-objid'] }],
+ ['Giltig från', 'DATSTART'],
+ ['Giltig till', 'DATSLUT'],
+ ['Diarienummer', 'DIARIENRNV', { classes: ['feature-attr-dnr'] }],
+ ['Satus', 'STATUS'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ],
+ },
+ 'skydd.naturvardsavtal_skogsstyrelsen': {
+ popoverTitle: 'Naturvårdsavtal (Skogsstyrelsen)',
+ popover: [
+ ['Ärendebeteckning', 'Beteckn', { classes: ['feature-objid'] }],
+ ['Registeringsår', 'ArendeAr'],
+ ['Biotopkategori', 'NvaTyp'],
+ ['Skogstyp', 'Naturtyp'],
+ ['Avtalsdatum', 'DatAvtal'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Skogsmarksareal', 'AreaProd', { unit: 'ha' }],
+ ['Länk', 'Url', { fn: function(v) {
+ if (v == null | v === '') {
+ return;
+ }
+ const a = document.createElement('a');
+ a.href = v;
+ a.target = '_blank';
+ const i = document.createElement('i');
+ i.classList.add('bi', 'bi-box-arrow-up-right');
+ a.appendChild(i);
+ return a;
+ }}],
+ ['Undertyp', 'Undertyp'],
+ ],
+ },
+ 'skydd.atervatningsavtal': {
+ popoverTitle: 'Återvätningsavtal',
+ popover: [
+ ['Ärendebeteckning', 'Beteckn', { classes: ['feature-objid'] }],
+ ['Ärendeår', 'ArendeAr'],
+ ['Avtalat datum', 'AvtalatDatum'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Länk', 'Url', { fn: function(v) {
+ if (v == null || v === '') {
+ return;
+ }
+ const a = document.createElement('a');
+ a.href = v;
+ a.target = '_blank';
+ const i = document.createElement('i');
+ i.classList.add('bi', 'bi-box-arrow-up-right');
+ a.appendChild(i);
+ return a;
+ }}],
+ ],
+ },
+ 'nv.naturvarde_sks': {
+ popoverTitle: 'Objekt med naturvärden (Skogsstyrelsen)',
+ popover: [
+ ['Ärendebeteckning', 'Beteckn', { classes: ['feature-objid'] }],
+ ['Namn', 'Objnamn'],
+ ['Datum för fältinventering', 'Datinv'],
+ ['Biotoptyp #1', 'Biotop1'],
+ ['Biotoptyp #2', 'Biotop2'],
+ ['Biotoptyp #3', 'Biotop3'],
+ ['Nyckelord #1 som beskriver objektet', 'Beskrivn1'],
+ ['Nyckelord #2 som beskriver objektet', 'Beskrivn2'],
+ ['Nyckelord #3 som beskriver objektet', 'Beskrivn3'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Länk', 'Url', { fn: function(v) {
+ if (v == null || v === '') {
+ return;
+ }
+ const a = document.createElement('a');
+ a.href = v;
+ a.target = '_blank';
+ const i = document.createElement('i');
+ i.classList.add('bi', 'bi-box-arrow-up-right');
+ a.appendChild(i);
+ return a;
+ }}],
+ ],
+ },
+ 'nv.nyckelbiotop': {
+ popoverTitle: 'Nyckelbiotop (Skogsstyrelsen)',
+ popover: [
+ ['Ärendebeteckning', 'Beteckn', { classes: ['feature-objid'] }],
+ ['Namn', 'Objnamn'],
+ ['Datum för fältinventering', 'Datinv'],
+ ['Biotoptyp #1', 'Biotop1'],
+ ['Biotoptyp #2', 'Biotop2'],
+ ['Biotoptyp #3', 'Biotop3'],
+ ['Nyckelord #1 som beskriver objektet', 'Beskrivn1'],
+ ['Nyckelord #2 som beskriver objektet', 'Beskrivn2'],
+ ['Nyckelord #3 som beskriver objektet', 'Beskrivn3'],
+ ['Nyckelord #4 som beskriver objektet', 'Beskrivn4'],
+ ['Nyckelord #5 som beskriver objektet', 'Beskrivn5'],
+ ['Nyckelord #6 som beskriver objektet', 'Beskrivn6'],
+ ['Nyckelord #7 som beskriver objektet', 'Beskrivn7'],
+ ['Nyckelord #8 som beskriver objektet', 'Beskrivn8'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Länk', 'Url', { fn: function(v) {
+ if (v == null || v === '') {
+ return;
+ }
+ const a = document.createElement('a');
+ a.href = v;
+ a.target = '_blank';
+ const i = document.createElement('i');
+ i.classList.add('bi', 'bi-box-arrow-up-right');
+ a.appendChild(i);
+ return a;
+ }}],
+ ],
+ },
+ 'nv.nyckelbiotop_storskogsbruk': {
+ popoverTitle: 'Nyckelbiotop (storskogsbruket)',
+ popover: [
+ ['Uppgifter lämnade av', 'Org'],
+ ['Inkom datum', 'InkomDatum'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Länk', 'Url', { fn: function(v) {
+ if (v == null || v === '') {
+ return;
+ }
+ const a = document.createElement('a');
+ a.href = v;
+ a.target = '_blank';
+ const i = document.createElement('i');
+ i.classList.add('bi', 'bi-box-arrow-up-right');
+ a.appendChild(i);
+ return a;
+ }}],
+ ],
+ },
+ 'nv.sumpskog': {
+ popoverTitle: 'Sumpskog',
+ popover: [
+ ['Objektnamn', 'Namn'],
+ ['Skogstyp', 'Tradtext'],
+ ['Hydrologisk typ', 'Hydrtext'],
+ ['Klass på delobjektet', 'Delklass'],
+ ['Klass på objektet', 'Klassu'],
+ ['Andel löv', 'Lovandel'],
+ ['Andel öppet vatten', 'Andelva'],
+ ['Krontäckning', 'Krontakn'],
+ ['Huggningsklass', 'Huggklas'],
+ ['Ingrepp på delobjekt (max 4)', 'Ingrepp'],
+ ['Grad av påverkan på delobjekt (max 4)', 'Ingrpavv'],
+ ['Nyckelord på objektnivå', 'Objnyck'],
+ ['Nyckelord på delobjektsnivå', 'Delnyck'],
+ ['Flygbildsår', 'Flygar'],
+ ['Datum för fältbesök', 'Faltdat'],
+ ['Inventeringsteknik', 'Invtekn'],
+ ['Inventeringdatum', 'Invdat'],
+ ['Ansvarig myndighet', 'Ansvmynd'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Länk', 'Url', { fn: function(v) {
+ if (v == null || v === '') {
+ return;
+ }
+ const a = document.createElement('a');
+ a.href = v;
+ a.target = '_blank';
+ const i = document.createElement('i');
+ i.classList.add('bi', 'bi-box-arrow-up-right');
+ a.appendChild(i);
+ return a;
+ }}],
+ ],
+ },
+ 'nv.pagaende_naturreservatsbildning': {
+ popoverTitle: 'Pågående naturreservatsbildning',
+ popover: [
+ ['Objektnamn', 'NAMN'],
+ ['Senast justerat', 'GRANSJUST'], /* XXX unclear what "GRANSJUST" means, just a guess */
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ],
+ },
+ 'nv.snus': {
+ popoverTitle: 'Skyddsvärd statlig skog',
+ popover: [
+ ['Objektnamn', 'NAMN'],
+ ['År', 'AR'],
+ ['Naturgeografisk region', 'NATURGEOGR', { classes: ['feature-objid'] }],
+ ['Objektskategori', 'OBJEKTKATE', { classes: ['feature-objid'] }],
+ ['Markägare', 'MARKAGARE'],
+ ['Areal värdekärna', 'VARDEKARNA', { unit: 'ha' }],
+ ['Areal utvecklingsmark', 'UTV_MARK', { unit: 'ha' }],
+ ['Totalareal', 'TOTAL_AREA', { unit: 'ha' }],
+ ['Areal land', 'LAND', { unit: 'ha' }],
+ ['Areal vatten', 'VATTEN', { unit: 'ha' }],
+ ['Areal produktiv skogsmark', 'PROD_SKOG', { unit: 'ha' }],
+ ['Areal produktiv skogsmark ovanför fjällnära gräns', 'SKOG_O_FJG', { unit: 'ha' }],
+ ['Areal produktiv skogsmark nedanför fjällnära gräns', 'SKOG_N_FJG', { unit: 'ha' }],
+ ['Areal skyddszon', 'SKYDDSZON', { unit: 'ha' }],
+ ['Areal arronderingsmark', 'ARRO_MARK', { unit: 'ha' }],
+ ['Kriterier för urval', 'KRITERIER'],
+ ['Beskrivning av området', 'BESKRIVN'],
+ ['Länsstyrelsens bedömning', 'LST_BEDOMN'],
+ ['Källor', 'KALLOR'],
+ ],
+ },
+
+ 'ri.naturvard': {
+ popoverTitle: 'Riksintresse naturvård',
+ popover: [
+ ['Namn', 'NAMN'],
+ ['Skydd', 'SKYDD'],
+ ['Ämnesområde', 'AMNESOMRAD'],
+ ['Beskrivning', 'BESKRIVNIN', { fn: function(v) {
+ if (v == null || !(v.startsWith('http://') || v.startsWith('https://'))) {
+ return v;
+ }
+ const a = document.createElement('a');
+ a.href = v;
+ a.target = '_blank';
+ const i = document.createElement('i');
+ i.classList.add('bi', 'bi-box-arrow-up-right');
+ a.appendChild(i);
+ return a;
+ }}],
+ ['Lagrum', 'LAGRUM'],
+ ['Beslutsdatum', 'BESLUTSDAT'],
+ ['Original-ID', 'ORGINALID', { classes: ['feature-objid'] }],
+ ['Riks-ID', 'RIKSID', { classes: ['feature-objid'] }],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ],
+ },
+ 'ri.friluftsliv': {
+ popoverTitle: 'Riksintresse friluftsliv',
+ popover: [
+ ['Namn', 'NAMN'],
+ ['Skydd', 'SKYDD'],
+ ['Ämnesområde', 'AMNESOMR'],
+ ['Områdesnummer', 'OMRADESNR', { classes: ['feature-objid'] }],
+ ['Länk värdebeskrivning', 'LANK_VARDE', { fn: function(v) {
+ if (v == null | v === '') {
+ return;
+ }
+ const a = document.createElement('a');
+ a.href = v;
+ a.target = '_blank';
+ const i = document.createElement('i');
+ i.classList.add('bi', 'bi-box-arrow-up-right');
+ a.appendChild(i);
+ return a;
+ }}],
+ ['Lagrum', 'LAGRUM'],
+ ['Beslutsdatum', 'BESLDATUM'],
+ ['Ärendenummer', 'ARENDENR', { classes: ['feature-attr-dnr'] }],
+ ['Länk, beslut', 'LANK_BESLU', { fn: function(v) {
+ if (v == null | v === '') {
+ return;
+ }
+ const a = document.createElement('a');
+ a.href = v;
+ a.target = '_blank';
+ const i = document.createElement('i');
+ i.classList.add('bi', 'bi-box-arrow-up-right');
+ a.appendChild(i);
+ return a;
+ }}],
+ ['Aktivitet', 'AKTIVITET'],
+ ['Naturtyp', 'NATURTYP'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Areal land', 'AREA_LAND_', { unit: 'ha' }],
+ ['Areal vatten', 'AREA_VATTE', { unit: 'ha' }],
+ ],
+ },
+ 'ri.rorligt_friluftsliv': {
+ popoverTitle: 'Riksintresse rörligt friluftsliv (MB 4 kap 1§ och 2§)',
+ popover: [
+ ['Namn', 'NAMN'],
+ //['Original-ID', 'ORIGINALID', { classes: ['feature-objid'] }],
+ ['Beskrivning', 'BESKRIVNIN'],
+ //['Metodbeskrivning', 'METODBESKR'],
+ //['Tillk. datum', 'TILLKDATUM'],
+ //['Rev. datum', 'REVDATUM'],
+ ['Anmärkning', 'ANM'],
+ ['Länk', 'OBJEKTLANK', { fn: function(v) {
+ if (v == null || v === '') {
+ return;
+ }
+ const a = document.createElement('a');
+ a.href = v;
+ a.target = '_blank';
+ const i = document.createElement('i');
+ i.classList.add('bi', 'bi-box-arrow-up-right');
+ a.appendChild(i);
+ return a;
+ }}],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Referens', 'REFERENS'],
+ ],
+ },
+ 'ri.obruten_kust': {
+ popoverTitle: 'Riksintresse obruten kust (MB 4 kap 3§)',
+ popover: [
+ ['Namn', 'NAMN'],
+ //['Original-ID', 'ORIGINALID', { classes: ['feature-objid'] }],
+ ['Beskrivning', 'BESKRIVNIN'],
+ //['Metodbeskrivning', 'METODBESKR'],
+ //['Tillk. datum', 'TILLKDATUM'],
+ //['Rev. datum', 'REVDATUM'],
+ ['Anmärkning', 'ANM'],
+ ['Objekttyp', 'OBJTYP'],
+ ['Länk', 'OBJEKTLANK', { fn: function(v) {
+ if (v == null || v === '') {
+ return;
+ }
+ const a = document.createElement('a');
+ a.href = v;
+ a.target = '_blank';
+ const i = document.createElement('i');
+ i.classList.add('bi', 'bi-box-arrow-up-right');
+ a.appendChild(i);
+ return a;
+ }}],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Referens', 'REFERENS'],
+ ],
+ },
+ 'ri.obrutet_fjall': {
+ popoverTitle: 'Riksintresse obrutet fjäll (MB 4 kap 5§)',
+ popover: [
+ ['Namn', 'NAMN'],
+ //['Original-ID', 'ORIGINALID', { classes: ['feature-objid'] }],
+ ['Beskrivning', 'BESKRIVNIN'],
+ ['Metodbeskrivning', 'METODBESKR'],
+ ['Tillk. datum', 'TILLKDATUM'],
+ //['Rev. datum', 'REVDATUM'],
+ ['Länk', 'OBJEKTLANK', { fn: function(v) {
+ if (v == null || v === '') {
+ return;
+ }
+ const a = document.createElement('a');
+ a.href = v;
+ a.target = '_blank';
+ const i = document.createElement('i');
+ i.classList.add('bi', 'bi-box-arrow-up-right');
+ a.appendChild(i);
+ return a;
+ }}],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Referens', 'REFERENS'],
+ ],
+ },
+ 'ri.skyddade_vattendrag': {
+ popoverTitle: 'Riksintresse skyddade vattendrag (MB 4 kap 6§)',
+ popover: [
+ ['Namn', 'NAMN'],
+ //['Original-ID', 'ORIGINALID', { classes: ['feature-objid'] }],
+ ['Beskrivning', 'BESKRIVNIN'],
+ ['Metodbeskrivning', 'METODBESKR'],
+ ['Tillk. datum', 'TILLKDATUM'],
+ ['Rev. datum', 'REVDATUM'],
+ ['Anmärkning', 'ANM'],
+ ['Digitaliseringsskala', 'DIG_SKALA'],
+ ['Länk', 'OBJEKTLANK', { fn: function(v) {
+ if (v == null || v === '') {
+ return;
+ }
+ const a = document.createElement('a');
+ a.href = v;
+ a.target = '_blank';
+ const i = document.createElement('i');
+ i.classList.add('bi', 'bi-box-arrow-up-right');
+ a.appendChild(i);
+ return a;
+ }}],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ['Referens', 'REFERENS'],
+ ],
+ },
+
+ 'ren.betesomrade': {
+ popoverTitle: 'Samebyarnas betesområde',
+ popover: [
+ ['Sameby', 'NAMN'],
+ ['Samebys typ', 'SAMEBY_TYP'],
+ ['Signatur', 'SIGNATUR'],
+ ['Aktualitet', 'AKTUALITET'],
+ ],
+ },
+ 'ren.flyttled': {
+ popoverTitle: 'Samebyarnas markanvändningsredovisning \u2013 flyttled',
+ popover: [
+ ['Led-ID', 'LED_ID', { classes: ['feature-objid'], fn: (v) => v === 0 ? '' : v }],
+ ['Sameby #1', 'SAMEBY1'],
+ ['Sameby #2', 'SAMEBY2'],
+ ['Sameby #3', 'SAMEBY3'],
+ ['Beskrivning', 'BESKRIVNIN'],
+ ['Årstid', 'ARSTID'],
+ ['Riksintresse', 'RIKSINTR'],
+ ['Fast led', 'FAST_LED'],
+ ['Aktualitet', 'AKTUALITET'],
+ ['Signatur', 'SIGNATUR'],
+ ['Ledlängd', 'geom_length', { fn: 'length' }],
+ ],
+ },
+ 'ren.riks_ren': {
+ popoverTitle: 'Riksintresse rennäring',
+ popover: [
+ ['Lagrum', 'LAGRUM'],
+ ['Aktualitet', 'AKTUALITET'],
+ ['Signatur', 'SIGNATUR'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ],
+ },
+ 'ren.omr_riks': {
+ popoverTitle: '(Kärn)områden av riksintresse rennäring',
+ popover: [
+ ['Områdes-ID', 'OMR_NR', { classes: ['feature-objid'] }],
+ ['Länk', 'LANK'],
+ ['Årets runt', 'ARET_RUNT'],
+ ['Sameby', 'SAMEBY'],
+ ['Ansvarig', 'ANSVARIG'],
+ ['Aktualitet', 'AKTUALITET'],
+ ['Signatur', 'SIGNATUR'],
+ ['Areal', 'geom_area', { fn: 'area' }],
+ ],
+ },
+
+ /* Documentation at
+ * https://www.smhi.se/polopoly_fs/1.34541!/dammprod%202013_3%2C%20beskrivning%2C%20SVAR2012_2.pdf
+ * */
+ 'misc.dammar': {
+ popoverTitle: 'Damm',
+ popover: [
+ ['Dammenhetens namn', 'DNamn'],
+ ['Dammanläggningens namn', 'Namn'],
+ ['Länsnr', 'LST_OBJID', { classes: ['feature-objid'] }],
+ ['Status', 'Status', { fn: (v) => v === 1 ? 'Befintlig damm' : v === 2 ? 'Fd. damm' : '' }],
+ //['Regleringstyp', 'Regleringstyp'],
+ ['Byggår', 'ByggAr'],
+ ['Dammhöjd', 'DammHojd', { unit: 'm' }],
+ ['Krönlängd', 'KronLangd', { unit: 'm' }],
+ ['Fiskväg', 'Fiskvag', { fn: (v) =>
+ v === 1 ? 'Bassängtrappa' :
+ v === 2 ? 'Denilränna' :
+ v === 3 ? 'Slitsränna' :
+ v === 4 ? 'Omlöp' :
+ v === 5 ? 'Inlöp' :
+ v === 6 ? 'Ålledare' :
+ v === 7 ? 'Smoltränna' :
+ v === 8 ? 'Okänd typ' :
+ v === 9 ? 'Ingen' :
+ v === 10 ? 'Annan' :
+ '' }],
+ ['Huvudavrinningsområdesnummer', 'HARO', { classes: ['feature-objid'] } ],
+ ['Vattendistrikt', 'Vattendistrikt', { classes: ['feature-objid'] } ],
+ ['Verksamhet', 'Verksamhet', { fn: (v) =>
+ v === 1 ? 'Kraftproduktion' :
+ v === 2 ? 'Industri' :
+ v === 3 ? 'Sjöfart' :
+ v === 4 ? 'Invallning' :
+ v === 5 ? 'Vattenförsörjning' :
+ v === 6 ? 'Spegeldamm' :
+ v === 7 ? 'Historisk' :
+ v === 8 ? 'Övrigt' :
+ '' }],
+ ['Högsta dämningsgräns', 'DG', { unit: 'm' }],
+ ['Lägsta sänkningsgräns', 'SG', { unit: 'm' }],
+ ['Magasinsyta', 'MY', { unit: 'km²' }],
+ ['Reglerbar volym', 'RV', { unit: 'Mm³' }],
+ ['Kommentar', 'Kommentar'],
+ ],
+ },
+
+ 'misc.gigafactories': {
+ popoverTitle: 'Stor industrisatsning',
+ popover: [
+ ['Namn', 'Name'],
+ ['Länk', 'Url', { fn: function(v) {
+ if (v == null | v === '') {
+ return;
+ }
+ const a = document.createElement('a');
+ a.href = v;
+ a.target = '_blank';
+ const i = document.createElement('i');
+ i.classList.add('bi', 'bi-box-arrow-up-right');
+ a.appendChild(i);
+ return a;
+ }}],
+ ],
+ },
+};
+
+/* popup and feature overlays */
+export const popover = function(map, mapLayers, featureOverlayLayer) {
+ const popupOverlay = new Overlay({
+ stopEvent: true,
+ element: popup,
+ });
+ map.addOverlay(popupOverlay);
+
+ let popover, overlayAttributes = [], overlayAttrIdx = 0;
+
+ const header = document.createElement('div');
+ header.classList.add('d-flex');
+
+ const headerGrabbingArea = document.createElement('div');
+ headerGrabbingArea.classList.add('flex-grow-1', 'grabbing-area', 'pe-2', 'me-2');
+ header.appendChild(headerGrabbingArea);
+
+ headerGrabbingArea.onmousedown = function(event) {
+ if (event.button != 0) {
+ return;
+ }
+ const popoverTip = Popover.getInstance(popup).tip;
+ if (popoverTip.classList.contains('popover-maximized')) {
+ return;
+ }
+ pageNode.classList.add('grabbing-area-grabbed');
+
+ if (!popoverTip.classList.contains('popover-detached')) {
+ /* detach popover tip */
+ popoverTip.classList.add('popover-detached');
+ const rect = popoverTip.getBoundingClientRect();
+ const style = popoverTip.style;
+ style.display = 'none'; /* avoid reflows between the following assignments */
+ style.position = 'absolute';
+ style.transform = '';
+ style.inset = `${rect.top}px auto auto ${rect.left}px`;
+ style.display = '';
+ }
+
+ let clientX = event.clientX, clientY = event.clientY;
+ document.onmousemove = function(event) {
+ const offsetX = clientX - event.clientX;
+ const offsetY = clientY - event.clientY;
+ clientX = event.clientX;
+ clientY = event.clientY;
+ popoverTip.style.top = (popoverTip.offsetTop - offsetY).toString() + 'px';
+ popoverTip.style.left = (popoverTip.offsetLeft - offsetX).toString() + 'px';
+ };
+
+ document.onmouseup = function(event) {
+ if (event.button != 0) {
+ return;
+ }
+ pageNode.classList.remove('grabbing-area-grabbed');
+ document.onmousemove = null;
+ document.onmouseup = null;
+ };
+ };
+
+ const pageNode = document.createElement('h6');
+ headerGrabbingArea.appendChild(pageNode);
+
+ const pageNum = document.createElement('span');
+ const pageCount = document.createElement('span');
+ pageNode.appendChild(document.createTextNode('Träff '));
+ pageNode.appendChild(pageNum);
+ pageNode.appendChild(document.createTextNode(' av '));
+ pageNode.appendChild(pageCount);
+
+ const featureOverlayStyle = new Style({
+ stroke: new Stroke({
+ color: 'rgba(0, 255, 255, .8)',
+ width: 3,
+ }),
+ });
+ const updateFeatureOverlayLayer = function(layer_group, layer, id) {
+ const lyr = mapLayers[layer_group];
+ if (lyr == null) {
+ return;
+ }
+ const urls = lyr.getSource().getUrls();
+ const source = featureOverlayLayer.getSource();
+ if (source.getUrls().length < 1 || source.getUrls()[0] !== urls[0]) {
+ featureOverlayLayer.setVisible(false);
+ source.setUrls(urls);
+ }
+ featureOverlayLayer.setStyle(function(feature) {
+ if (feature.getId() === id && feature.getProperties().layer === layer) {
+ return featureOverlayStyle;
+ } else {
+ return undefined;
+ }
+ });
+ featureOverlayLayer.setVisible(true);
+ featureOverlayLayer.changed();
+ };
+ const refreshPopover = function() {
+ const attr = overlayAttributes[overlayAttrIdx];
+ updateFeatureOverlayLayer(attr.layer_group, attr.layer, attr.ogc_fid);
+
+ pageNum.innerHTML = (overlayAttrIdx + 1).toString();
+ const content = formatFeaturePropertiesToHTML(attr);
+ popover.tip.getElementsByClassName('popover-body')[0].replaceChildren(content);
+ };
+ const onClickPageChange = function(event, offset) {
+ const btn = event.target;
+ if (btn.classList.contains('disabled') || popover?.tip == null) {
+ return;
+ }
+ if (overlayAttrIdx + offset < 0 || overlayAttrIdx + offset > overlayAttributes.length - 1) {
+ return;
+ }
+
+ overlayAttrIdx += offset;
+ if (overlayAttrIdx < 1) {
+ btnPrev.classList.add('disabled');
+ } else {
+ btnPrev.classList.remove('disabled');
+ }
+ if (overlayAttrIdx < overlayAttributes.length - 1) {
+ btnNext.classList.remove('disabled');
+ } else {
+ btnNext.classList.add('disabled');
+ }
+
+ refreshPopover();
+ setTimeout(function() { btn.blur() }, 100);
+ };
+
+ const btnPrev = document.createElement('button');
+ btnPrev.classList.add('popover-button', 'popover-button-prev');
+ btnPrev.setAttribute('type', 'button');
+ btnPrev.title = 'Föregående träff';
+ btnPrev.setAttribute('aria-label', btnPrev.title);
+ btnPrev.onclick = function(event) {
+ return onClickPageChange(event, -1);
+ };
+
+ const btnNext = document.createElement('button');
+ btnNext.classList.add('popover-button', 'popover-button-next');
+ btnNext.setAttribute('type', 'button');
+ btnNext.title = 'Nästa träff';
+ btnNext.setAttribute('aria-label', btnNext.title);
+ btnNext.onclick = function(event) {
+ return onClickPageChange(event, +1);
+ };
+
+ const btnExpand = document.createElement('button');
+ btnExpand.classList.add('popover-button', 'popover-button-expand');
+ btnExpand.setAttribute('type', 'button');
+ const btnExpandTitle = 'Förstora';
+ const btnExpandTitle2 = 'Förminska';
+ btnExpand.setAttribute('aria-label', btnExpand.title);
+ btnExpand.onclick = function() {
+ if (popover?.tip == null) {
+ return;
+ }
+ if (!popover.tip.classList.contains('popover-maximized')) {
+ popover.tip.classList.add('popover-maximized');
+ btnExpand.classList.replace('popover-button-expand', 'popover-button-reduce');
+ btnExpand.title = btnExpandTitle2;
+ btnExpand.setAttribute('aria-label', btnExpand.title);
+ } else {
+ popover.tip.classList.remove('popover-maximized');
+ btnExpand.classList.replace('popover-button-reduce', 'popover-button-expand');
+ btnExpand.title = btnExpandTitle;
+ btnExpand.setAttribute('aria-label', btnExpand.title);
+ }
+ setTimeout(function() { btnExpand.blur() }, 100);
+ };
+
+ const btnClose = document.createElement('button');
+ btnClose.classList.add('popover-button', 'popover-button-close');
+ btnClose.setAttribute('type', 'button');
+ btnClose.title = 'Stäng';
+ btnClose.setAttribute('aria-label', btnClose.title);
+ btnClose.onclick = function() {
+ featureOverlayLayer.setVisible(false);
+ featureOverlayLayer.changed();
+ popover?.dispose();
+ };
+
+ header.appendChild(btnPrev);
+ header.appendChild(btnNext);
+ header.appendChild(btnExpand);
+ header.appendChild(btnClose);
+
+ const formatFeaturePropertiesToHTML = function(properties) {
+ /* turn the properties into a fine table */
+ const table = document.createElement('table');
+ table.classList.add('table', 'table-sm', 'table-borderless', 'table-hover');
+
+ const tbody = document.createElement('tbody');
+ table.appendChild(tbody);
+
+ const def = layers[properties.layer_group + '.' + properties.layer];
+ def.popover.forEach(function([desc, key, opts]) {
+ let v = properties[key];
+ if (opts === undefined) {
+ opts = {};
+ }
+ if (opts.fn !== undefined) {
+ if (opts.fn === 'length') {
+ if (v < 1000) {
+ opts.unit = 'm';
+ } else {
+ v /= 1000;
+ v = Math.round(v*100) / 100;
+ opts.unit = 'km';
+ }
+ } else if (opts.fn === 'area') {
+ if (v < 10000) {
+ opts.unit = 'm²';
+ } else if (v < 10000 * 10000) {
+ v /= 10000;
+ opts.unit = 'ha';
+ } else {
+ v /= 1000000;
+ opts.unit = 'km²';
+ }
+ v = Math.round(v*100) / 100;
+ } else {
+ v = opts.fn(v);
+ }
+ }
+ if (v == null) {
+ v = document.createTextNode('');
+ } else if (!(v instanceof HTMLElement)) {
+ if (typeof(v) === 'number' && opts.unit !== undefined) {
+ v = v.toLocaleString('sv-SE');
+ } else if (typeof(v) === 'boolean') {
+ v = v ? 'Ja' : 'Nej';
+ }
+ if (opts.unit !== undefined && v !== '') {
+ v += '\u202F' + opts.unit;
+ }
+ v = document.createTextNode(v);
+ }
+
+ const tr = document.createElement('tr');
+ tbody.appendChild(tr);
+
+ const td1 = document.createElement('td');
+ tr.appendChild(td1);
+ const textDesc = document.createTextNode(desc);
+ td1.appendChild(textDesc);
+
+ const td2 = document.createElement('td');
+ tr.appendChild(td2);
+ td2.appendChild(v);
+ if (opts.classes !== undefined) {
+ opts.classes.forEach((c) => td2.classList.add(c));
+ }
+ });
+
+ const content = document.createElement('div');
+ if (def.popoverTitle !== undefined) {
+ const h = document.createElement('h6');
+ content.appendChild(h);
+ const textNode = document.createTextNode(def.popoverTitle);
+ h.appendChild(textNode);
+ }
+
+ content.appendChild(table);
+ return content;
+ };
+
+ const container0 = map.getViewport().getElementsByClassName('ol-overlaycontainer-stopevent')[0];
+ map.on('singleclick', function(event) {
+ /* clear the overlay list */
+ featureOverlayLayer.setVisible(false);
+ featureOverlayLayer.changed();
+ overlayAttributes = [];
+ overlayAttrIdx = 0;
+
+ /* dispose any pre-existing popover if not in detached mode */
+ popover = Popover.getInstance(popup);
+ if (popover !== null) {
+ const popoverTip = popover.tip;
+ if (popoverTip !== null && !popoverTip.classList.contains('popover-detached')) {
+ popover.dispose();
+ }
+ }
+
+ const size = map.getSize();
+ if (size[0] < 576 || size[1] < 576) {
+ return;
+ }
+
+ /* unclear how many feature we'll find, don't render prev/next buttons for now */
+ pageNode.classList.add('d-none');
+ btnPrev.classList.add('d-none', 'disabled');
+ btnNext.classList.add('d-none', 'disabled');
+
+ /* never start in maximized mode */
+ if (popover?.tip != null) {
+ popover.tip.classList.remove('popover-maximized');
+ }
+ btnExpand.classList.replace('popover-button-reduce', 'popover-button-expand');
+ btnExpand.title = btnExpandTitle;
+ btnExpand.setAttribute('aria-label', btnExpand.title);
+
+ const fetch_body = []
+ map.forEachFeatureAtPixel(event.pixel, function(feature, layer) {
+ const layerGroup = layer.get('layerGroup');
+ const layerName = feature.getProperties().layer;
+ const def = layers[layerGroup + '.' + layerName];
+ if (def?.popover != null) {
+ /* skip layers which didn't opt-in for popover */
+ if (!fetch_body.length) {
+ document.body.classList.add('inprogress');
+ if (popover?.tip != null) {
+ popover.tip.classList.add('inprogress');
+ }
+ }
+ fetch_body.push({
+ layer_group: layerGroup,
+ layer: layerName,
+ fid: feature.getId() ?? -1,
+ });
+ if (fetch_body.length >= 100) {
+ return true; /* enough matches already, stop detection here */
+ }
+ }
+ }, {
+ hitTolerance: 5,
+ checkWrapped: false,
+ layerFilter: (l) => l.get('layerGroup') != null,
+ });
+
+ if (fetch_body.length === 0) {
+ /* dispose pre-detached popover */
+ popover?.dispose();
+ return;
+ }
+
+ fetch('/q', {
+ method: 'POST',
+ body: JSON.stringify(fetch_body),
+ headers: {
+ 'Content-Type': 'application/json; charset=UTF-8'
+ }
+ })
+ .then(function(resp) {
+ if (resp.status === 200) {
+ return resp.json();
+ } else {
+ throw new Error(`${resp.url} [${resp.status}]`);
+ }
+ })
+ .then(function(data) {
+ /* the data is received from the CGI in the order it was sent */
+ /* TODO optimizations on the CGI would break the above assumption, so the
+ * decoded JSON response would need to be reordered to match fetch_body */
+ overlayAttributes = data
+ if (overlayAttributes.length === 0) {
+ /* dispose pre-detached popover */
+ popover?.dispose();
+ return;
+ }
+
+ pageCount.innerHTML = overlayAttributes.length.toString();
+ if (overlayAttributes.length >= 2) {
+ /* render prev/pre buttons */
+ btnNext.classList.remove('d-none', 'disabled');
+ btnPrev.classList.remove('d-none');
+ pageNode.classList.remove('d-none');
+ }
+ if (popover?.tip == null) {
+ /* create a new popover (we're not already showing one in detached mode) */
+ pageNum.innerHTML = (overlayAttrIdx + 1).toString();
+ popupOverlay.setPosition(event.coordinate);
+
+ const attr = overlayAttributes[0];
+ updateFeatureOverlayLayer(attr.layer_group, attr.layer, attr.ogc_fid);
+ popover = new Popover(popup, {
+ template: '<div class="popover" role="tooltip"><div class="popover-arrow"></div>' +
+ '<div class="popover-header"></div><div class="popover-body"></div></div>',
+ title: header,
+ content: formatFeaturePropertiesToHTML(attr),
+ html: true,
+ placement: 'right',
+ fallbackPlacements: ['right', 'left', 'bottom', 'top'],
+ container: container0,
+ });
+ popover.show();
+ }
+ else if (popover.tip.classList.contains('popover-detached')) {
+ /* update existing detached mode popover */
+ refreshPopover();
+ popover.tip.classList.remove('inprogress');
+ }
+ })
+ .catch(function(e) {
+ console.log(e);
+ })
+ .finally(function() {
+ document.body.classList.remove('inprogress');
+ });
+ });
+};