Import/Catalogue/Topography import for Norway

From OpenStreetMap Wiki
Jump to: navigation, search

Introduction

We plan to import topology from N50, the data for the official 1:50 000 topographical map of Norway. N50 is published by the Norwegian Mapping Authority (Kartverket). First the water and waterways are added, then land coverage (wood, wetland, farmland, etc.).

The import has been thoroughly discussed on the Norwegian OSM mailing list, and this wiki page is the result of consensus there.

For information about other imports from Kartverket, see No:Kartverket import.

Licence and permission to use the data

N50 is licensed under CC BY 4.0.

Kartverket has confirmed by e-mail that the data can be integrated into OSM. The e-mail is archived on the Norwegian OSM mailing list.

Kartverket has been added to the list of contributors.

Data quality

As the dataset is the official topographic map of Norway, the data quality is good/excellent. Still, as for any dataset, there will be errors.

Changeset tags

Changesets shall be tagged with source=Kartverket N50 and source:date=*.

Import process

We will import one municipality at a time. The dataset for a municipality will be imported as a .15 deg times .15 deg grid changeset. The number of elements of each square is usually 5k-20k. The progress of the import is tracked on assignment page. The data is preprocessed by Tibnor and available at a google drive. Elements which needs manual interaction are tagged with Fixme and an description of what to do. Data is then merged with existing OSM data by a python script. The user needs now to fix the conflicts marked with a Fixme tag. The data is then uploaded.

Dedicated import accounts

This will be a community import, and various persons will be involved.

The persons importing the data will use separate import accounts, named username_import, where username is their original username. They will be personally responsible for the quality of the import.

Data transformation

N50 is available from Kartverket as SOSI files. There is one SOSI file for each of the municipalities in Norway, 428 in total.

The original SOSI files from Kartverket have been converted to OSM XML files with sosi2osm and vann.lua and arealdekkeUvann.lua. For the rivers and streams are turned to direct downwards by riverTurner.py. Ways are combined to avoid unnecessary short ways by waySimplifyer.py. Ignored elements are removed by emptyRemover.py. The OSM XML is then splitted in smaller OSM XML to avoid large changeset, which gives less risk of failing uploads. Similarly is done for the areal coverage; however, simplifyRelations.py is used aswell to combine small multipolygones. The OSM XML files can be downloaded from here and here.

Framgangsmåte

Oppsett

  • Installer python
  • Installer pakkene lxml og requests
    • F.eks. via pip med pip install lxml og pip install requests
  • Last ned verktøy fra [1](github.com/tibnor/kartverket2osm)
    • Noter deg stien hvor replaceWithOsm.py ligger og bruk en fullstendig eller relativ path som peker til replaceWithOsm.py — f.eks. kan du legge kartverket2osm som en mappe under $HOME/bin og kjøre kommandoen slik: python $HOME/bin/kartverket2osm/replaceWithOsm.py del.osm del2.osm --import:water
  • Installer UtilsPlugin2 i JOSM (Edit - Preferences - Plugin)
    • Denne gir man muligheten til å "Replace Geometry" dvs flette nye og gamle data uten å miste historikken
    • Bind "Replace Geometry"snarveien til noe enklere enn det som er standard, f.eks. "Ctrl+Q". Dette er kun for å gjøre det litt enklere å bruke dette verktøyet: Edit - Preferences - Keyboard shortcuts - Tool: Replace Geometry = Ctrl+Q
  • Installer kartverketimport-pluginen i JOSM (Edit - Preferences - Plugin)
    • Denne brukes for halvautomatisk korreksjon av retning på elver og bekker
  • Sørg for å ha opprettet en dedikert import_bruker og logg inn med denne. All importdata skal lastes opp med en egen bruker
    • Denne skal ha et navn på formen "brukernavn\_import", der "brukernavn" er ditt vanlige brukernavn
    • Les her for mer info

Last ned data

{{Topography import Norway assignment
| status = påbegynt
|kommunenummer=0000
|relation = 000000
|kommunenavn=kommunenavn
|user =   [[User:brukernavn|visningsnavn]]
|mentor =  
|kommentar = 
|kyst = 0
| vann = 0
| areal =0
| start = dato
| slutt = dato
}}
  • Last ned data for den kommunen du vil importere herfra og pakk ut filen
    • Filen man laster er en ZIP og innholder filer med navn xxxx__type_part_yy.yy_zz.zz.osm. Der xxxx er kommunenummeret, type er coast, water eller landcover, yy.y er nedre breddegrad og zz.z er venstre lengdegrad.

Import av kystlinje

  • Åpne den første filen xxxx_coast_part_0_yy.yy_zz.zz.osm i JOSM
  • Søk etter "FIXME"="Check direction of coastline. Land should be on the left side and water on the right side." og sørg for at alt er korrekt og deretter fjern denne taggen
  • Last ned data fra OSM som dekker området til denne filen
  • Marker en bit med gammel kyst og en bit med ny kyst og "Replace Geometry" (Ctrl+Q)
    • Velg source=Kartverket N50 og klikk "Apply"
  • Gjenta dette til hele kysten i denne delfilen er byttet ut
  • Når du er ferdig med å bytte ut alle kystbitene i denne delfilen:
    • Søk etter dette i JOSM: natural=coastline -source="Kartverket N50" for å se om du har glemt å fjerne noen gamle kystlinjer hvor det har blitt importert ny
    • Søk etter dette i JOSM: source:PGS type:node modified og fjern denne taggen fra noden.
  • Etter man har er ferdig med å erstatte kystlinje og rette opp i feil trykk på "Validation" (Shift+V eller knappen nede til høyre) i JOSM og se spesielt etter Reversed coastline, Unordered coastline og Unconnected coastline
  • Last opp og marker changesettet med feks Kartverket N50 coastline import part 1/x for $kommunenavn og kilde/source "Kartverket"
  • Gjenta dette for alle delfilene i denne kommunen

En stund(neste dag) etter du har importert kan man bruke dette verktøyet for å se om man har gjort noe feil

Import av elver og vann

VIKTIG: import av data for kommuner med kyst bør gjøres etter at kysten er importert, for å unngå merarbeid.

  • Åpne den første filen xxxx_water_part_0_yy.yy_zz.zz.osm i JOSM
  • Trykk på "Validation"
  • Under "Errors" dukker det gjerne opp Waterway duplicated nodes - Duplicated nodes, klikk på den kategorien og klikk "Fix"
  • Under "Warnings" dukker det gjerne opp Mixed type duplicated nodes - Duplicated nodes, klikk på denne kategorien og klikk "Fix"
  • Søk etter FIXME=* (store bokstaver i fixme), man får da opp alle elver der retningen er usikker
    • Disse behandles halvautomatisk ved hjelp av tibnors JOSM-plugin (installasjon er beskrevet ovenfor under "Oppsett")
    • Pluginen finner man på verktøyslinjen: More tools - Check directions of streams
    • Pluginen vil da gå igjennom hver elv med FIXME:Check direction of stream. For hver av disse får du opp en boks der du velger Correct/Wrong/Ignore/Stop.
    • Endel bekker må manuelt splittes der retning skal endres. F.eks. hvis to bekker møtes men henger sammen som én linje.. Trykk Ignore på disse og ta dem manuelt etterpå.
  • Søk også etter Fixme=*(små bokstaver i fixme), du får da opp elver/riverbanks med manglende midtlinje (Tag:waterway=riverbank).
  • Legg til midtlinjer, koble på bekker/elver som kommer innpå, og fjern Fixme-taggen
    • For å tegne midtlinjer er "Viewport Following (Ctrl+Shift+F)" et nyttig verktøy. Da flyttes fokuset på skjermen nedover elven etterhvert som du tegner
  • Lagre filen, feks med samme navnet den allerede har (Ctrl+S i JOSM)
  • Nå må man kjøre programmet replaceWithOsm.py for å flette sammen denne datafilen med data fra OSM
  • Programmet kan kjøres slik python replaceWithOsm.py xxxx_water_part_0_yy.yy_zz.zz.osm output_part0.osm --import:water
  • Åpne output_part0.osm i JOSM.
  • Last ned data fra OSM for samme område. Sørg for at "Download as new layer" ikke er haket av
  • Søk etter "FIXME=Merge", dette er vann, bekker og elver som finnes i OSM fra før og flett dataene sammen med "Replace Geometry"
  • Trykk "Validation", og rett opp feil
  • Last opp og marker changesettet med feks Kartverket N50 rivers and water import part 1/x for $kommunenavn og kilde/source "Kartverket"
  • Gjenta dette for alle delfilene i kommunen

Import av arealdekke

VIKTIG: Gjør først ferdig importen av kyst og vann før arealdekke importeres
Her vises en lukket relasjon(de markerte) der alle har rolle 'outer' og skulle hatt 'inner'
  • Åpne den første filen xxxx_landcover_part_0_yy.yy_zz.zz.osm i JOSM
  • Trykk "Validation"
  • Under "Warnings" dukker det gjerne opp Role for '0(x nodes)' should be 'inner'.
  • Klikk på en av linjene og klikk deg inn på relasjonen i "Edit new relation in layer ..."-vinduet. Trykk på knappen for å sortere relasjonen. "Sort the relation members (Alt+End)". Dette gjør det mye enklere å se hvilke medlemmer som har feil rolle. Se skjermbilde til høyre her
  • En annen warning som kan dukke opp er Intersection between multipolygon ways. Dette er typisk hvis en myr eller en skog som har rollen 'inner' og berører, altså deler node med en 'outer'-way. Marker skogen og noden og unglue(Alt+J), og flytt myr-noden litt unna. Da løses problemet. Se skjermbilde til nede høyre
  • Lagre filen, feks med samme navnet den allerede har (Ctrl+S i JOSM)
  • Nå må man kjøre programmet replaceWithOsm.py for å flette sammen denne datafilen med data fra OSM
  • Kjør kommandoen python replaceWithOsm.py xxxx_landcover_part_0_yy.yy_zz.zz.osm output_part0.osm --import:area
  • Åpne output_part0.osm i JOSM
  • Last ned data fra OSM for samme område. Sørg for at "Download as new layer" ikke er haket av
  • Søk etter FIXME=Merge, dette er skoger, myrer, etc som finnes i OSM fra før. Flett dataene sammen med "Replace Geometry" og fjern FIXME=Merge-taggen.
  • Trykk "Validation", og rett opp feil
  • Last opp og marker changesettet med feks Kartverket N50 landcover import part 1/x for $kommunenavn og kilde/source "Kartverket"
    "Intersection between multipolygon ways" i JOSM. Noden i rødt er den som skaper problemer
  • Gjenta dette for alle delfilene i kommunen
  • Etter å ha lastet opp et stort changeset, vent helst en stund (f.eks. 15min) før man prosesserer neste fil med replaceWithOsm.py. Hvis man har vært for kjapp så merker man at en får opp en haug med konflikter, duplicate nodes og duplicate ways.
  • Til slutt: Oppdater oversikten over N50importen ved å sitte kommunen til "Ferdig"
    {{Topography import Norway assignment
    | status = ferdig
    |kommunenummer=0000
    |relation = 000000
    |kommunenavn=kommunenavn
    |user =   [[User:brukernavn|visningsnavn]]
    |mentor =  
    |kommentar = 
    |kyst = 100
    | vann = 100
    | areal =100
    | start = dato
    | slutt = dato
    }}

Keeping the information up to date

We plan to keep the topography information in OSM up to date by regularly comparing OSM data with data from N50. We will write a script which detects changes in the N50 data and merge these changes into OSM, for data which is unchanged since the import.

Links