HobbyGIS: GIS på et garagebudget

Eller - Geoinformatik uden Grænser

af Niels Kjøller Hansen
niha07@frederiksberg.dk
linkedin.com/in/nielskjoller
@nkjoller

Min baggrund

  • Geoinformatiker fra Københavns Universitet (2010)
  • Offentligt ansat i 12 år
  • Tidligere Fri Software-fanatiker,
    nu Open Source-entusiast
  • Problemet

    • Studiet er færdigt
    • Software kræver licenser
    • Licenser koster penge
    • Penge kan være svære at få fat på

    Tudekiks

    Men at lege med GIS er jo det sjoveste i verden, hvad gør man så?

    GIS er sjovt!

    Løsningsmodel nr 1:

    Skaf pengene

    prostitution

    Løsningsmodel nr 2:

    Piracy. It's a crime.

    Min løsning: Kig udad, brug Open Source

    Der ligger en MASSE sjove ting derude, mere eller mindre klar til at bruge, både data og software

    Data, data, data

    • Kortforsyningen
    • OpenStreetMap
    • Adresser
    • U.S. Geological Survey
    • Masser, masser af meget mere

    Q
    QGIS

    Et desktop-GIS som vi kender det.

    • Kan skrive mange formater
    • Kan læse endnu flere
    • Se, tematisere og filtrere data
    • Lave pæne papir-layouts
    • Masser af plugins

    Screenshot

    Billede af QGIS i funktion

    Hvordan?

    Et helt almindeligt program som alle andre. Installationspakken hentes her:

    http://www.qgis.org/

    Eller her, hvis man bruger Windows og vil have den store pakke:

    http://osgeo4w.osgeo.org/

    Case: Saskias plakatkort

    Et billede af et flot kort

    Bare rolig, kode er ikke farligt

    Leaflet

    Et javascript-bibliotek til at lave smidige web-kort

    • Fylder 33kb komprimeret
    • Mindre funktionalitet er en feature
    • Tusind plugins

    Hvordan?

    1. Hent pakke fra http://leafletjs.com/
    2. Importer javascript og css
    3. Tilføj et html-element til kortet
    4. Sæt kortets størrelse op til hvad du ønsker
    5. Tilføj et baggrundskort

    HTML-siden

    Importer javascript og css

    <link rel="stylesheet" 
      href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css" />
    <script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>

    Tilføj et kort-element (og angiv størrelse)

    <div style="width: 600px; height: 300px;" id="map"></div>

    Javascript-siden

    Sæt kortet på kort-elementet

    var map = L.map('map').setView([55.1,13.5]);

    Tilføj et baggrundslag til kortet

    L.tilelayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
        attribution: '&copy; OpenStreetMap'
    }).addTo(map);

    Gør noget fedt!

    // Tilføj en markør til kortet
    L.marker([55.1,13.5]).addTo(map)
        .bindPopup('Fed markørinfo')
        .openPopup();

    Demo

    Case 1: Frederiksbergs nye borgervendte kort

    Et billede af et flot kort

    Case 2: Find rundt på Rådhuset

    Rådhuset

    PostgreSQL PostGIS

    Et (geo)databasesystem

    • Performance
    • Rigtigt god understøttelse i andet Open Source
    • Administrationsværktøj med syntax highlighting
    • En god mængde hjælp på nettet

    Screenshot

    Billede fra PG-Admin

    Hvordan?

    1. Hent PostgreSQL http://www.postgresql.org/download/
    2. Læg PostGIS ovenpå via "Stack Builder", der følger med PostGIS
    3. Aktiver extension på din database

    Case: Frederiksbergs Boligsociale Landkort (BoSoLaK)

    Det boligsociale landkort

    SELECT 
      distrikter.type_navn,
      distrikter.distrikt_id,
      count(cpr.*)
      FROM konfiguration.distrikter
      LEFT JOIN individ.cpr
        ON ST_INTERSECTS(cpr.geometry,distrikter.geometry)
    
      WHERE cpr.udtraek_dato = '2014-10-01' 
    
      GROUP BY distrikter.type_navn,
               distrikter.distrikt_id;        

    GDAL - Geospatial Data Abstraction Library

    Et oversættelsesbibliotek til en lang række geodataformater

    • Geodatas svar på en schweizerkniv
    • Læs, skriv og konverter mellem en masse formater
    • Omprojicering
    • Georeferering, skalering (raster)
    • En masse små værktøjer


    Jeg vil snakke om min yndling - OGR2OGR

    Hvordan?

    1. Kommer med i OSGEO4W (http://osgeo4w.osgeo.org/)
    2. Kald ogr2ogr fra kommandoprompten, og husk
      • Hvor data skal skrives, og i hvilket format
      • Hvor data skal læses fra
      • Diverse options, som geometri-type, rumlig reference mv.

    Kald af OGR2OGR

    c:\>ogr2ogr
    
    
          

    Mål

    c:\>ogr2ogr -f PostgreSQL PG:"host=localhost dbname=demo user=niels password
    =demo"
    
          

    Kilde

    c:\>ogr2ogr -f PostgreSQL PG:"host=localhost dbname=demo user=niels password
    =demo" WFS:"http://arealinformation.miljoeportal.dk/gis/services/public/MapS
    erver/WFSServer?SERVICE=WFS" 
          

    Det specifikke lag

    c:\>ogr2ogr -f PostgreSQL PG:"host=localhost dbname=demo user=niels password
    =demo" WFS:"http://arealinformation.miljoeportal.dk/gis/services/public/MapS
    erver/WFSServer?SERVICE=WFS" dmp:DKJord_V2 
          

    Begræns kaldet geografisk

    c:\>ogr2ogr -f PostgreSQL PG:"host=localhost dbname=demo user=niels password
    =demo" WFS:"http://arealinformation.miljoeportal.dk/gis/services/public/MapS
    erver/WFSServer?SERVICE=WFS" dmp:DKJord_V2 -spat 719000 6174500 724500 61785
    00

    Nyt navn til database-tabellen

    c:\>ogr2ogr -f PostgreSQL PG:"host=localhost dbname=demo user=niels password
    =demo" WFS:"http://arealinformation.miljoeportal.dk/gis/services/public/MapS
    erver/WFSServer?SERVICE=WFS" dmp:DKJord_V2 -spat 719000 6174500 724500 61785
    00 -nln "jordforurening_v2"

    Lidt hjælp

    c:\>ogr2ogr -f PostgreSQL PG:"host=localhost dbname=demo user=niels password
    =demo" WFS:"http://arealinformation.miljoeportal.dk/gis/services/public/MapS
    erver/WFSServer?SERVICE=WFS" dmp:DKJord_V2 -spat 719000 6174500 724500 61785
    00 -nln "jordforurening_v2" -a_srs "EPSG:25832" -nlt MULTIPOLYGON

    Samlet, på én linje

    ogr2ogr -f PostgreSQL PG:"host=localhost dbname=demo user=niels password=demo" WFS:"http://arealinformation.miljoeportal.dk/gis/services/public/MapServer/WFSServer?SERVICE=WFS" dmp:DKJord_V2 -spat 719000 6174500 724500 6178500 -nln "jordforurening_v2" -a_srs "EPSG:25832" -nlt MULTIPOLYGON

    Open Source Business

    • Prototype til salgbart produkt uden licensudgifter
    • Man kan dele sin løsning med alt alle (og få tilbage)
    • Den enes udgifter kommer andre til gode
    Open Source Business

    Min virkelighed

  • QGIS rulles ud til alle der har lyst til at kigge på det
  • Man kan bygge alt!
  • En prototype er klar hurtigere end det ville tage at finde pengene
  • Fra én desktop eller server til flere - også på tværs
  • En prototype er bedre end en kravspecifikation
  • Empowerment!
  • Prototyper! Prototyper!! Prototyper!!1
  • Prototyper

  • Kan sættes i drift
  • Kan bruges som eksempel til at finde penge til 'rigtig' udvikling
  • Kan smides ud, hvis det er noget bavl
  • Noget obligatorisk

    TileMill: Lav dine egne tiles

    Design dine egne baggrundskort til fx Leaflet, der tiles lynhurtigt.

    TileStream: En tileserver til ovenstående kort

    En server, der kan levere tiles til fx. Leaflet


    (Begrænset til PseudoMercator (Google-projektionen), men til gengæld hurtig og fleksibel)

    PGRouting: Rutefunktioner i PostGIS

    En rutesøgningsmotor man kan bruge i sin SQL-forespørgsel!

    OSRM: Open Source Routing Machine

    En rutesøgningsservice på OpenStreetMap-data med prædefinerede profiler.

    Python i QGIS-plugins

    Progammatisk adgang til GDAL

    Tak!

    Niels Kjøller Hansen
    niha07@frederiksberg.dk
    linkedin.com/in/nielskjoller
    @nkjoller