MGIS-Downloader är ett lokalhostat verktyg för att ladda ner och bearbeta geografiska data från svenska leverantörer.
OBS: MGIS-Downloader är byggt uteslutande för den svenska marknaden. Applikationen hämtar data från svenska källor (Lantmäteriet, ArtData/GBIF Sverige) och stödjer inga andra länders datakällor eller koordinatsystem.
Funktioner
- ArtData (GBIF) — ladda ner artobservationer
- Lantmäteriets STAC API (vektor & höjd) — ladda ner vektor- och höjddata
- Interaktiv karta för att välja område
- Paketering (ZIP), efterbearbetning (merge, VRT, överviews) och generering av tile index
Krav
- Node.js 18 eller senare samt npm
- GDAL (inkl.
gdalbuildvrt,gdalinfo,gdal_translate,gdaladdo,gdal_merge.py) — antingen fristående installerat eller via QGIS - Python 3 med GDAL-bindningar (används för att köra
gdal_merge.py) - Git (för att klona repot)
- Stödda operativsystem: Windows, Linux och macOS
Snabbstart (Windows)
- Klona repo och installera beroenden:
git clone https://github.com/MundoGIS/MGIS-Downloader.git
cd MGIS-Downloader
npm install-
Installera QGIS (rekommenderas, innehåller GDAL och Python) eller GDAL fristående.
-
Skapa
.envi projektroten:
GDAL="C:/QGIS/apps/gdal/"
QGIS="C:/QGIS/bin/"
PORT=3003- Starta servern:
npm startSnabbstart (Linux — Debian/Ubuntu)
- Installera systemkrav:
sudo apt update
sudo apt install -y git nodejs npm gdal-bin python3-gdal(Kontrollera att Node.js-versionen är 18+: node -v. Om distributionens paket är för gammal, installera via NodeSource eller nvm.)
- Klona repo och installera beroenden:
git clone https://github.com/MundoGIS/MGIS-Downloader.git
cd MGIS-Downloader
npm install- Skapa
.envi projektroten:
GDAL=""
QGIS=""
PYTHON_CMD=python3
GDAL_MERGE=/usr/bin/gdal_merge.py
PORT=3003(Kör which gdal_merge.py för att hitta rätt sökväg om den skiljer sig.)
- Starta servern:
npm startSnabbstart (macOS)
- Installera systemkrav via Homebrew:
brew install node gdal python3- Klona repo och installera beroenden:
git clone https://github.com/MundoGIS/MGIS-Downloader.git
cd MGIS-Downloader
npm install- Skapa
.envi projektroten:
GDAL=""
QGIS=""
PYTHON_CMD=python3
GDAL_MERGE=/opt/homebrew/bin/gdal_merge.py
PORT=3003(Sökvägen kan variera mellan Intel-Mac /usr/local/bin/... och Apple Silicon /opt/homebrew/bin/.... Kör which gdal_merge.py för att verifiera.)
- Starta servern:
npm startÖppna webbläsaren på http://localhost:3003 (oavsett operativsystem).
Köra som tjänst/bakgrundsprocess
- Windows:
npm run service:installinstallerar appen som en Windows-tjänst (vianode-windows). Avinstallera mednpm run service:uninstall. - Linux:
sudo ./scripts/install-linux-service.shinstallerar en systemd-tjänst (mgis-downloader) som startar automatiskt vid boot. Avinstallera medsudo ./scripts/uninstall-linux-service.sh. Alternativt kan valfri processhanterare (t.ex.pm2) användas. - macOS: kör
npm startdirekt, eller användpm2/launchdför att köra som bakgrundstjänst.
Säkerhet & drift bakom IIS (URL Rewrite / ARR) MGIS-Downloader har ingen inloggning (autentisering sker bara mot Lantmäteriet/GBIF:s API:er, inte mot appen själv). Därför är målet med säkerhetsinställningarna nedan i första hand att begränsa åtkomst på nätverksnivå och skydda mot enkel överbelastning (DoS) — inte sessionshantering.
-
Körs bakom IIS som reverse proxy (rekommenderas i produktion):
- Låt Node lyssna endast lokalt genom att sätta
HOST=127.0.0.1i.env(standardvärde). Node exponeras då aldrig direkt mot nätverket/internet — bara IIS gör det. - Konfigurera en IIS-site med modulen URL Rewrite (+ Application Request Routing, ARR) som reverse-proxyar till
http://127.0.0.1:3003/. Aktivera "Enable proxy" i ARR och lägg till en rewrite-regel som matchar(.*)→http://127.0.0.1:3003/{R:1}. - Sätt
TRUST_PROXY=1i.envså att appen litar på IIS-hoppet och läser klientens riktiga IP frånX-Forwarded-For(krävs för att rate limiting nedan ska räkna rätt IP istället för IIS-serverns IP). - Låt IIS hantera TLS/HTTPS (certifikat) och ev. IP-begränsningar/brandvägg — Node behöver då inte hantera HTTPS själv.
- Låt Node lyssna endast lokalt genom att sätta
-
CORS (
ALLOWED_ORIGINS): Eftersom appen saknar inloggning bör den nås via en enda känd domän/URL (den som IIS publicerar). LämnaALLOWED_ORIGINStomt i.env— då skickas ingen CORS-header alls och webbläsare tillåter bara anrop från samma origin (rekommenderat läge). Ange bara en kommaseparerad lista (t.ex.ALLOWED_ORIGINS=https://mgis.example.se) om ett annat intranät/subdomän uttryckligen ska få anropa API:t direkt från webbläsaren. -
Rate limiting: Inbyggt skydd mot enkel överbelastning/skrapning via
express-rate-limit. Styrs medRATE_LIMIT_MAX/RATE_LIMIT_WINDOW_MINUTES(alla rutter) ochDOWNLOAD_RATE_LIMIT_MAX/DOWNLOAD_RATE_LIMIT_WINDOW_MINUTES(de tyngre nedladdningsstartande rutterna/create-downloadoch/lmv/start-full-download). Standardvärden: 300 anrop/15 min generellt, 20 nedladdningsstarter/15 min. -
Helmet: Används medvetet inte. Helmet är främst till för att skydda sessioner/inloggning (CSP, cookie-flaggor m.m.), vilket inte finns i denna app. De relevanta skydden här är nätverksbegränsning via IIS +
HOST=127.0.0.1, CORS och rate limiting ovan. -
Övriga skydd som redan finns i koden: mappnamn/ID:n som skrivs till disk (t.ex.
collectionId, nedladdningsmappar) valideras mot ett strikt teckenformat för att förhindra path traversal, och interna felmeddelanden (filsökvägar, stacktraces) loggas bara iprocess.log— aldrig till klienten.
Exempel .env för produktion bakom IIS:
HOST=127.0.0.1
PORT=3003
TRUST_PROXY=1
#ALLOWED_ORIGINS=https://mgis.example.se
RATE_LIMIT_MAX=300
DOWNLOAD_RATE_LIMIT_MAX=20Viktigt om autentisering mot Lantmäteriet (LMV)
-
Den här applikationen kan användas med antingen ett Bearer token (från API Manager) eller ett systemkonto från Geotorget.
-
Token (rekommenderat testflöde): Generera ett access token i https://apimanager.lantmateriet.se/devportal/apis genom att välja din Application → Production Keys → Select Scopes. Markera scopes för STAC (t.ex. collections och asset‑read) och generera tokenet. I appen välj "Auth token" och klistra in token.
-
Systemkonto: Om din organisation föredrar systemkonto, ange systemkonto‑användarnamn i fältet "LMV Användarnamn" och den tilldelade API‑nyckeln/secret i fältet "LMV STAC API Key".
-
Nytt: Auth token (Bearer)
- Applikationen accepterar också ett Auth token (Bearer) som alternativ till user/password + X-API-Key. I användargränssnittet finns nu en valbar autentiseringsmetod: "Användarnamn + API-nyckel" eller "Auth token (Bearer)".
- Om du har ett access token (t.ex. utfärdat av en token-tjänst eller gateway) kan du välja "Auth token" i UI och klistra in token i fältet. Token skickas till servern i fältet
apiTokenoch används som HTTP-headerAuthorization: Bearer <token>.
Exempel (curl) — använda Bearer token mot STAC collections:
# Lista collections med Bearer token
curl -H "Authorization: Bearer <YOUR_TOKEN>" "https://api.lantmateriet.se/stac-vektor/v1/collections"
# Partial GET mot asset med Bearer token
curl -H "Authorization: Bearer <YOUR_TOKEN>" -H "Range: bytes=0-1023" "https://api.lantmateriet.se/path/to/asset.tif"Notera: Om du istället använder user/pass + apiKey (systemkonto) fungerar följande exempel:
curl -u "SYSTEMUSER:API_KEY" -H "X-API-Key: API_KEY" "https://api.lantmateriet.se/stac-vektor/v1/collections"Hjälp i appen
- Öppna menyn "Hjälp" i appen för en steg-för-steg-guide (sve):
hjalp.html. Den innehåller länkar till Geotorget, API-portal, STAC-browsern och GBIF.
Webbgränssnitt
- Hem:
/ - ArtData:
/artdata.html - Vektordata:
/lmv.html - Höjddata:
/lmv_hojd.html - Nedladdningar:
/downloads.html
Support
- Vid problem, buggar eller frågor om kommersiell support: skriv till support@mundogis.se
Behöver ni en färdig Windows-installer eller hjälp med IIS-konfiguration? Om er organisation önskar en färdig Windows-installer som sköter hela installationen automatiskt (Node.js, GDAL/QGIS, tjänsteregistrering m.m.), eller behöver hjälp med att sätta upp och konfigurera IIS med URL Rewrite/ARR enligt ovan, kontakta oss gärna på support@mundogis.se. Vi på MundoGIS hjälper er mer än gärna med en skräddarsydd installation och driftsättning.
Utvecklad av MundoGIS