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; } headerGrabbingArea.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; } headerGrabbingArea.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: '