@Magnus-Sälgö, samverkan har till viss del skett mellan aktörerna. Det som ligger närmast till hands vad gäller grillplatser är ju arbetet med storskaliga geodata. Här har det bedrivits ett Smart Built-projekt inom det området.. Ett arbete har också påbörjats inom Lantmäteriet i samverkan med andra parter – men det har pausats för att göra omtag framöver.
Community på Sveriges dataportal

lmdaniel
Inlägg
-
-
@Magnus-Sälgö,
Grillplatser finns dessvärre inte som en fastslagen datamängd för Nationella geodataplattformen, NGP – och tillhandahålls därigenom inte än genom den infrastrukturen. Men om dessa hade funnits tillgängliga hade de haft ett UUID som det kunnat gå att koppla annan information till. -
@Magnus-Sälgö, vilken radioövergång från grillplatser till tappkranar till släktträd.
Jag är dock inte säker på att det är Lantmäteriets roll att vara navet för att koppla ihop olika datakällor med varandra. Däremot bygger ju Lantmäteriet produkter där olika datakällor ingår - det kanske är det du är lite inne på? Jag tänker exempelvis NVDB, byggnader, vandringsleder m.m. Jag skulle gärna se att mer sådant tillgängliggjordes genom exempelvis dataportal.se för att sedan kunna skördas av bland annat Lantmäteriet för att sätta samman till en kartprodukt.Intressanta tankar!
-
@Magnus-Sälgö, det där måste jag tänka till lite på innan jag svarar
-
@Matself, nej försvarar inte Lantmäteriet inte som min arbetsgivare utan för att jag på riktigt tycker att OGC API Feature känns riktigt riktigt bra. Det är enkelt att tolka och läsa informationen från apiet, både som människa och maskin. Och än en gång. OGC API Feature är inte en exklusiv maskinkommunikation. Det är fullt möjligt för dig som medmänniska att läsa och på egen hand tolka den data som apiet levereras. Men självklart måste du anropa, antingen med en url, eller skript, eller ett system av ditt val.
-
@Matself, OGC API Feature är anpassat för geospatial användning och andra tillämpningsområden. Du får helt enkelt båda delarna. Det olyckliga i sammanhanget är att den nya standarden inte är implementerad fullt ut i de vanligaste applikationerna för användning. Och det är synd att Lantmäteriet är lite tidig på bollen där. Samt att Lantmäteriet till viss del avviker från standarden – men det hoppas jag innerligt ska rättas framgent. Det är bättre tillämpat för värdefulla data än för NGP. OGC API Feature är mer systemoberoende än vad WFS-standarden är/var.
Jag tycker inte att varje myndighet ska ha ett eget GUI för åtkomst av data. Jag skulle hellre se att alla myndigheter och andra offentliga aktörer hade standardiserade apier som gick att komma åt genom något generiskt GUI. Jag tycker att STAC-apierna ger en hint om hur det skulle kunna fungera genom att de kan nås genom exempelvis Radiant Earth STAC Browser. Här skulle jag vilja se en tydligare styrning från politiken. -
@Matself om du enbart fokuserar på geospatiala tillämpningar så fungerar ju de klassiska WFS-tjänsterna långt. Men om nya tillämpningsområden för datan ska kunna appliceras är den nya standarden OGC API Feature mer ändamålsenliga. Om vi för en sekund tänker bort Lantmäteriets val av autentisering och fokuserar på infrastrukturen så är jag övertygad om att den nya generationens apier, som både värdefulla data-/NGP-tjänsterna bygger på, kommer att vara vassare och mer användbara än de gamla GIS-fokuserade tjänsterna.
-
@Magnus-Sälgö
Det skulle såklart gå att göra. Sedan är det nog just kopplingen mellan objektet byggnad och fastighet som är en av styrkorna också. Så där måste en avvägning göras. Sedan kan ju användaren välja att anonymisera i nästa steg efter att ha hämtat informationen från Lantmäteriet. -
@Magnus-Sälgö
Då kan jag glänsa lite nu då. Det handlar i grund och botten om det UUID som finns knutet på alla byggnader. Samma UUID, för byggnad, går att härleda till en lagfaren ägare genom fastighetsregistret där UUID för byggnad finns registrerat på fastigheten. -
@Magnus-Sälgö
Lantmäteriet mår bra! Dock inte så snabbfotad. Jag personligen skulle gärna se ett tydligt uppdrag för att sprida kod som offentlig sektor tar fram.Med anledning av din GDPR-kommentar så lät Lantmäteriet en extern aktör göra en utredning om ortofoto och byggnad. Utredningen pekade mot att dessa dataset kunde tolkas som personuppgifter. Utredningen går att begära ut och jag vet flera på LinkedIn som gjort det och sedan tillgängliggjort den genom sina kanaler.
-
@Magnus-Sälgö
Bra synpunkt. Som jag nämnde i en annan tråd är detta en fråga som jag försöker att driva på Lantmäteriet. Det finns dock inget ställningstagande än – därför publicerar jag exempel som enskilda trådar just nu. -
@mattias
Jag ska vara transparent och säga att jag försöker driva på just den här frågan internt inom Lantmäteriet om hur myndigheten bättre skulle kunna bidra med kod-exempel på någon Git-plattform eller egen plattform. Vi vet att det är något som efterfrågas. Kanske kan det hända något framöver.I väntan på något ställningstagande provar jag att bidra här!
-
Nedan visas en enkel PHP för att hämta kulturhistoriska lämningar i form av referensobjekt från Nationella geodataplattformen. Det sker inget urval utifrån attribut annat än typ. Limit-parametern begränsar hur många objekt som hämtas. Det går att maximalt hämta 10000 objekt åt gången.
PHP-koden hämtar en OAuth2-token från Lantmäteriets API genom att skicka en POST-förfrågan med dina konsumentnycklar. När token har hämtats, används den för att autentisera en annan POST-förfrågan till Lantmäteriets API för att hämta data om kulturhistoriska lämningar. Slutligen skrivs den hämtade datan ut i JSON-format.
header('Content-Type: application/json'); function getToken() { return json_decode(file_get_contents('https://apimanager.lantmateriet.se/oauth2/token', false, stream_context_create([ 'http' => [ 'header' => [ 'Authorization: Basic ' . base64_encode('consumerKey:consumerSecret'), 'Content-Type: application/x-www-form-urlencoded' ], 'method' => 'POST', 'content' => 'grant_type=client_credentials' ] ])), true)['access_token'] ?? exit('Error fetching token'); } function searchData($token) { return file_get_contents('https://api.lantmateriet.se/distribution/geodatakatalog/sokning/v1/kulturhistorisklamning/v1/search', false, stream_context_create([ 'http' => [ 'header' => [ 'Authorization: Bearer ' . $token, 'Content-Type: application/json' ], 'method' => 'POST', 'content' => json_encode([ 'query' => ['feature.typ' => ['eq' => 'kulturhistorisk lämning']], 'limit' => 10 ]) ] ])) ?? exit('Error fetching data'); } echo searchData(getToken());
-
Nedan visas ett enkelt pythonskript för att hämta kulturhistoriska lämningar i form av referensobjekt från Nationella geodataplattformen. Det sker inget urval utifrån attribut annat än typ. Limit-parametern begränsar hur många objekt som hämtas. Det går att maximalt hämta 10000 objekt åt gången.
Pythonskriptet hämtar en OAuth2-token från Lantmäteriets API genom att skicka en POST-förfrågan med dina konsumentnycklar. När token har hämtats, används den för att autentisera en annan POST-förfrågan till Lantmäteriets API för att hämta data om kulturhistoriska lämningar. Slutligen loggas den hämtade datan till konsolen.
# -*- coding: utf-8 -*-
import urllib.request, json, base64 token = json.loads(urllib.request.urlopen(urllib.request.Request( 'https://apimanager.lantmateriet.se/oauth2/token', data='grant_type=client_credentials'.encode('utf-8'), headers={'Authorization': 'Basic ' + base64.b64encode(b'consumerKey:consumerSecret').decode('utf-8'), 'Content-Type': 'application/x-www-form-urlencoded'} )).read().decode('utf-8')).get('access_token') response = json.loads(urllib.request.urlopen(urllib.request.Request( 'https://api.lantmateriet.se/distribution/geodatakatalog/sokning/v1/kulturhistorisklamning/v1/search', data=json.dumps({"query": {"feature.typ": {"eq": "kulturhistorisk lämning"}}, "limit": 10}).encode('utf-8'), headers={'Authorization': f'Bearer {token}', 'Content-Type': 'application/json'} )).read().decode('utf-8')) print(json.dumps(response, indent=2, ensure_ascii=False))
-
Nedan visas ett enkelt javascript för att hämta kulturhistoriska lämningar i form av referensobjekt från Nationella geodataplattformen. Det sker inget urval utifrån attribut annat än typ. Limit-parametern begränsar hur många objekt som hämtas. Det går att maximalt hämta 10000 objekt åt gången.
Javascriptet hämtar en OAuth2-token från Lantmäteriets API genom att skicka en POST-förfrågan med dina konsumentnycklar. När token har hämtats, används den för att autentisera en annan POST-förfrågan till Lantmäteriets API för att hämta data om kulturhistoriska lämningar. Slutligen loggas den hämtade datan till konsolen.
fetch('https://apimanager.lantmateriet.se/oauth2/token', { method: 'POST', headers: { 'Authorization': 'Basic ' + btoa('consumerKey:consumerSecret'), 'Content-Type': 'application/x-www-form-urlencoded' }, body: 'grant_type=client_credentials' }) .then(res => res.json()) .then(token => fetch('https://api.lantmateriet.se/distribution/geodatakatalog/sokning/v1/kulturhistorisklamning/v1/search', { method: 'POST', headers: { 'Authorization': 'Bearer ' + token.access_token, 'Content-Type': 'application/json' }, body: JSON.stringify({ "query": {"feature.typ": {"eq": "kulturhistorisk lämning"}}, "limit": 10 }) })) .then(res => res.json()) .then(data => console.log(data)) .catch(err => console.error(err));
-
Numera finns ortofoton som avgiftsfria data från Lantmäteriet. Dessa är i sin tur tillgängliga som Cloud Optimized GeoTIFF (COG). Det ger möjligheten att strömma dessa i exempelvis QGIS.
Nedan finns ett pythonskript (QGIS) som inom kartfönstrets utbredningsområde (bbox) gör en sökning mot Lantmäteriets api och lägger till de senaste ortofotona inom området som strömmade bilder (vsicurl). Skriptet kan ju säkert optimeras mer.
import requests import json from qgis.core import QgsVectorLayer, QgsProject, QgsFeature, QgsGeometry, QgsPointXY, QgsField, QgsCoordinateTransform, QgsCoordinateReferenceSystem, QgsRasterLayer from PyQt5.QtCore import QVariant from qgis.utils import iface import os from requests.auth import HTTPBasicAuth from pyproj import Transformer from datetime import datetime # Autentisering session = requests.Session() session.auth = HTTPBasicAuth("användarnamn", "lösenord") # Tidsstämpel timestamp = datetime.now().strftime("%Y%m%d%H%M%S") # Hämta bbox i SWEREF 99 TM och konvertera till WGS 84 extent = iface.mapCanvas().extent() bbox_sweref99 = [extent.xMinimum(), extent.yMinimum(), extent.xMaximum(), extent.yMaximum()] transformer_to_wgs84 = Transformer.from_crs("EPSG:3006", "EPSG:4326") bbox_wgs84 = [transformer_to_wgs84.transform(bbox_sweref99[1], bbox_sweref99[0]), transformer_to_wgs84.transform(bbox_sweref99[3], bbox_sweref99[2])] bbox_wgs84 = [bbox_wgs84[0][1], bbox_wgs84[0][0], bbox_wgs84[1][1], bbox_wgs84[1][0]] # Hämta data från API api_url = "https://api.lantmateriet.se/stac-bild/v1/search" response = session.post(api_url, headers={"Content-Type": "application/json"}, data=json.dumps({"bbox": bbox_wgs84, "limit": 100})) features = response.json().get("features", []) # Skapa lager i QGIS def create_layer(name, features, crs="EPSG:3006"): layer = QgsVectorLayer(f"Polygon?crs={crs}", name, "memory") provider = layer.dataProvider() if features: first_feature = features[0] for key in first_feature['properties'].keys(): provider.addAttributes([QgsField(key, QVariant.String)]) for asset_key in first_feature['assets'].keys(): provider.addAttributes([QgsField(f"asset_{asset_key}", QVariant.String)]) layer.updateFields() transformer = QgsCoordinateTransform(QgsCoordinateReferenceSystem("EPSG:4326"), QgsCoordinateReferenceSystem(crs), QgsProject.instance()) for feature in features: qgs_feature = QgsFeature() attributes = [str(feature['properties'].get(key, "")) for key in first_feature['properties'].keys()] for asset_key in first_feature['assets'].keys(): attributes.append(feature['assets'][asset_key].get('href', '')) qgs_feature.setAttributes(attributes) geom = feature.get("geometry") if geom and geom.get("type") == "Polygon": points = [transformer.transform(QgsPointXY(coord[0], coord[1])) for coord in geom.get("coordinates")[0]] qgs_feature.setGeometry(QgsGeometry.fromPolygonXY([points])) provider.addFeatures([qgs_feature]) QgsProject.instance().addMapLayer(layer) create_layer("Utbredning ortofoton, alla år", features) # Skapa lager med senaste året latest_year = max(int(f['properties'].get('flygar', 0)) for f in features) latest_features = [f for f in features if int(f['properties'].get('flygar', 0)) == latest_year] create_layer(f"Utbredning ortofoton, {latest_year}", latest_features) # Funktion för att skapa ett rasterlager från en URL def create_raster_layer(url): vsicurl_url = f"/vsicurl/{url}" layer_name = os.path.basename(url).replace('.tif', '') raster_layer = QgsRasterLayer(vsicurl_url, layer_name, "gdal") if raster_layer.isValid(): QgsProject.instance().addMapLayer(raster_layer) print(f"Lagret {layer_name} har lagts till i projektet.") else: print(f"Lagret {layer_name} kunde inte läsas in!") # Skapa rasterlager för varje asset-länk (exkludera thumbnails) for feature in latest_features: for asset_key, asset_info in feature['assets'].items(): href = asset_info.get('href', '') if href and not href.endswith('thumbnail.jpg'): create_raster_layer(href)
Har du några egna erfarenheter att jobba med Cloud Optimized GeoTIFF?
-
@DIGG_admin
Oj, jag gör tolkningen att jag då inte heller får skriva under med mitt egna namn eller skriva ut min epost i syfte att underlätta kontakt? Eller är det andras personuppgifter som avses? -
Glad sommar!
️
️
-
Här kommer ett litet lästips!
Jag har på LinkedIn skrivit en ny krönika vad gäller tillgängliggörandet av detaljplaner till Nationella geodataplattformen. Artikeln fokuserar främst på det som hittills förflutit av 2024. Men berör såklart också helheten.
Hoppas att du får några nya insikter – och trevlig sommarläsning!
Här finns länken:
Detaljplaner i NGP under första halvan av 2024
Vägledning för att publicera data om grillplatser
Vägledning för att publicera data om grillplatser
Enkelt pythonskript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
Enkelt pythonskript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
Enkelt pythonskript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
Enkelt pythonskript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
Enkelt pythonskript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
Enkelt pythonskript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
Enkelt pythonskript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
Enkelt pythonskript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
Enkelt pythonskript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
Enkel PHP för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
Enkel PHP för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
Enkelt pythonskript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
Enkelt javascript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
Ortofoton som Cloud Optimized GeoTIFF (COG) från Lantmäteriet
Personuppgifter i inlägg är inte OK
Glad sommar!
Krönika: Detaljplaner i NGP under första halvan av 2024