• Hem
  • Kategorier
  • 0 Olästa 0
  • Senaste
  • Taggar
  • Populära
  • Användare
  • Grupper
Collapse
Dataportal logo

Community på Sveriges dataportal

lmdanielL

lmdaniel

@lmdaniel
Sluta följ Följ
About
Inlägg
86
Ämnen
10
Grupper
0
Följare
0
Följer
1

Flagga profil
Blockera användare
Sluta blockera användare

Inlägg

Senaste Bästa Controversial

    Enkelt pythonskript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
  • lmdanielL lmdaniel
    7 apr. 2025 14:39

    @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!


  • Enkelt pythonskript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
  • lmdanielL lmdaniel
    6 apr. 2025 16:05

    @Magnus-Sälgö, det där måste jag tänka till lite på innan jag svarar 🙂


  • Enkelt pythonskript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
  • lmdanielL lmdaniel
    6 apr. 2025 16:02

    @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.


  • Enkelt pythonskript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
  • lmdanielL lmdaniel
    6 apr. 2025 13:57

    @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.


  • Enkelt pythonskript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
  • lmdanielL lmdaniel
    6 apr. 2025 09:52

    @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.


  • Enkelt pythonskript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
  • lmdanielL lmdaniel
    31 mars 2025 13:04

    @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.


  • Enkelt pythonskript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
  • lmdanielL lmdaniel
    30 mars 2025 21:55

    @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.


  • Enkelt pythonskript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
  • lmdanielL lmdaniel
    30 mars 2025 15:12

    @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.


  • Enkelt pythonskript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
  • lmdanielL lmdaniel
    29 mars 2025 23:57

    @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. 👍


  • Enkel PHP för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
  • lmdanielL lmdaniel
    28 mars 2025 13:54

    @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! 💡


  • Enkel PHP för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
  • lmdanielL lmdaniel
    28 mars 2025 11:30

    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());
    

  • Enkelt pythonskript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
  • lmdanielL lmdaniel
    28 mars 2025 09:52

    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))
    

  • Enkelt javascript för att hämta kulturhistoriska lämningar från Nationella geodataplattformen
  • lmdanielL lmdaniel
    27 mars 2025 15:07

    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));
    

  • Ortofoton som Cloud Optimized GeoTIFF (COG) från Lantmäteriet
  • lmdanielL lmdaniel
    13 mars 2025 17:05

    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?


  • Personuppgifter i inlägg är inte OK
  • lmdanielL lmdaniel
    6 sep. 2024 20:25

    @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!
  • lmdanielL lmdaniel
    1 juli 2024 10:59

    Glad sommar! ☀️⛈️


  • Krönika: Detaljplaner i NGP under första halvan av 2024
  • lmdanielL lmdaniel
    28 juni 2024 13:35

    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


  • Bidra till webbinariet: Framtidens innovationer med data från Nationella geodataplattformen (NGP)
  • lmdanielL lmdaniel
    19 juni 2024 10:34

    Här kommer länken till sändningen att finnas tillgänglig.

    https://www.lantmateriet.se/sv/smartare-samhallsbyggnadsprocess/om-smartare-samhallsbyggnad/informationsmoten/#faq=a943


  • Dataportal och NGP
  • lmdanielL lmdaniel
    13 juni 2024 14:38

    @Jonas-Nordqvist
    Det där lät hårt!
    Dataportal.se är en av många viktiga pusselbitar för att skapa en helhet.

  • 1
  • 2
  • 3
  • 4
  • 5
  • 4 / 5
Finansieras av Europeiska unionen logo
    • Online PierreMesure
    • Status
    • Online Online
    • Borta Borta
    • Stör inte Stör inte
    • Osynlig Osynlig
    • Bokmärken
    • Redigera profil
    • Inställningar
  • Sök
  • 0 Notiser 0
    • Markera alla notiser som lästa All notifications
  • 0 Drafts 0
    •  
       
       
      You have no drafts
  • Första inlägget
    Sista inlägget
0
  • Hem
  • Kategorier
  • Olästa 0
  • Senaste
  • Taggar
  • Populära
  • Användare
  • Grupper
  • Sök
  • 0 Notiser 0
    • Markera alla notiser som lästa All notifications
  • 0 Drafts 0
    •  
       
       
      You have no drafts
    • Online PierreMesure
    • Status
    • Online Online
    • Borta Borta
    • Stör inte Stör inte
    • Osynlig Osynlig
    • Bokmärken
    • Redigera profil
    • Inställningar

Ser ut som din anslutning till Community på Sveriges dataportal gick förlorad, vänta medan vi försöker att återansluta.