diff options
-rw-r--r-- | main.js | 407 | ||||
-rw-r--r-- | src/layers.js | 1387 | ||||
-rw-r--r-- | src/popover.js | 1959 |
3 files changed, 1961 insertions, 1792 deletions
@@ -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'); + }); + }); +}; |