From 97b27eee6b6b2cc93a15da1aa84c138f88338385 Mon Sep 17 00:00:00 2001 From: Guilhem Moulin Date: Tue, 30 Jan 2024 20:07:36 +0100 Subject: Add layer for forestry (from Skogsstyrelsen). --- index.html | 4 +++ main.js | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+) diff --git a/index.html b/index.html index b240a44..804bcc8 100644 --- a/index.html +++ b/index.html @@ -33,6 +33,10 @@ Länsstyrelserna och Energimyndigheten, CC0 (öppna data). +
  • Skogsbruk från + Skogsstyrelsen, + CC0 (öppna data). +
  • Rennäringen skikt från Sametinget, CC-BY-4.0 (öppna data). diff --git a/main.js b/main.js index c065815..1827b39 100644 --- a/main.js +++ b/main.js @@ -1105,6 +1105,101 @@ const layers = { }), }, + /* Documentation at + * https://www.skogsstyrelsen.se/globalassets/sjalvservice/karttjanster/geodatatjanster/produktbeskrivningar/utforda-avverkningar---produktbeskrivning.pdf + * */ + sks_clearcut_comp: { + popoverTitle: 'Utförd avverkning', + popover: [ + ['Ärendebeteckning', 'Beteckn', { classes: ['feature-objid'] }], + ['Objekt-ID', 'OBJECTID', { 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', 'Arealha', { unit: 'ha' }], + ], + style: [0, 0, 0, 0, 0, .5, .75, 1, 1, 1, 1, 1].map(function(width, z) { + return new Style({ + zIndex: 10, + fill: new Fill({ + color: [255, 102, 102, Math.max((.2-1)/8 * z + 1, 0)], + }), + stroke: width === 0 ? undefined : new Stroke({ + width: width, + color: [204, 0, 0, 1], + }), + }); + }), + }, + /* Documentation at + * https://www.skogsstyrelsen.se/globalassets/sjalvservice/karttjanster/geodatatjanster/produktbeskrivningar/yttre-granser-for-avverkningsanmalda-omraden---produktbeskrivning.pdf + * */ + sks_clearcut_appl: { + popoverTitle: 'Avverkningsanmälansområde', + popover: [ + ['Ärendebeteckning', 'Beteckn', { classes: ['feature-objid'] }], + ['Objekt-ID', 'OBJECTID', { 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'], + ['Kommun', 'Kommun'], + ['Län', 'Lan'], + ['Ärendestatus', 'ArendeStat'], + ['Avverkad areal', 'AvvHa', { unit: 'ha' }], + ], + style: [0, 0, 0, 0, 0, .5, .75, 1, 1, 1, 1, 1].map(function(width, z) { + return new Style({ + zIndex: 10, + fill: (width === undefined || width === 0) ? + new Fill({ color: [255, 102, 102, Math.max((.2-1)/8 * z + 1, 0)*.75] }) : + (function() { + const patternCanvas = document.createElement('canvas'); + const patternContext = patternCanvas.getContext('2d'); + const slope = 45 * Math.PI/180; + const spacing = z < 10 ? z*2 : 40; + const len = Math.hypot(1, slope); + const w = patternCanvas.width = Math.round(1/len + spacing) + const h = patternCanvas.height = Math.round(slope/len + spacing * slope); + + patternContext.fillStyle = 'rgba(255, 102, 102, .1)'; + patternContext.fillRect(0, 0, patternCanvas.width, patternCanvas.height); + patternContext.strokeStyle = 'rgba(204, 0, 0, 1)'; + patternContext.lineWidth = Math.max(1, width/2); + patternContext.beginPath(); + patternContext.moveTo(0, h); + patternContext.lineTo(w, 0); + patternContext.moveTo(-w, h); + patternContext.lineTo(w, -h); + patternContext.moveTo(0, 2*h); + patternContext.lineTo(2*w, 0); + patternContext.stroke(); + + const canvas = document.createElement('canvas'); + const context = canvas.getContext('2d'); + return new Fill({ color: context.createPattern(patternCanvas, 'repeat') }); + })(), + stroke: width === 0 ? undefined : new Stroke({ + width: width, + color: [204, 0, 0, 1], + lineDash: width >= 1.5 ? [2 * width] : undefined, + }), + }); + }), + }, + st_renbete: { popoverTitle: 'Samebyarnas betesområde', popover: [ @@ -1348,6 +1443,19 @@ const layerHierarchy = [ }, ] }, + { + text: 'Skogsbruk', + children: [ + { + text: 'Uppförda (sedan 2000)', + layer: 'sks_clearcut_comp', + }, + { + text: 'Anmälda', + layer: 'sks_clearcut_appl', + }, + ] + }, { /* Definitions at * https://ext-dokument.lansstyrelsen.se/Gemensamt/Geodata/Datadistribution/Information,%20Skiktf%C3%B6rteckning%20och%20f%C3%B6rklaringar.pdf */ -- cgit v1.2.3