Kommunedata i GSAK

Duppeditter og programvare
anders99
Re: Kommunedata i GSAK

Legg inn av anders99 » fre 11 okt 2013 11:12

pjacklam skrev:
Kjedalen skrev:Dersom poenget er å få det ut i JSON-format, kan i alle fall programmet Global Mapper lese SOSI-data og eksportere i JSON-format.
JSON, KML, GPX, CSV … bare ikke SOSI. :) Global Mapper ser ut til å fungere, men er et kommersielt produkt. For å kunne eksportere data fra Global Mapper, trenger man en lisens.
Jeg har googlet og testet litt mer.

Du kan bruke gdal (http://www.gdal.org/).
Det finnes en versjon med støtte for SOSI på et github hos Kartverket. Full dokumentasjon for kompilering og installasjon finnes her:
http://trac.osgeo.org/gdal/wiki/SOSI

Jeg har testet og det fungerer helt utmerket. Du bruker ogr2ogr for å konvertere til andre formater. Jeg testet med GML og det så veldig lovende ut.

Anders

anders99

Re: Kommunedata i GSAK

Legg inn av anders99 » fre 11 okt 2013 11:26

Se vedlagte fil med norske polygoner i et nokså fornuftig format.
polygons.mp.gz

pjacklam
Senior
Senior
Innlegg:810
Registrert:tir 13 mai 2008 09:39
Sted:Der bekken stilner av og blir til en svart kulp mellom granene

Re: Kommunedata i GSAK

Legg inn av pjacklam » fre 11 okt 2013 15:14

Kjedalen skrev:
pjacklam skrev:(…)
..DATAUTTAKSDATO 20130715
..NØ
789781070 108368922 ...KP 1
..NØ
789781059 108368916
789764102 108360314
(…)
Grunnen til at første punkt i eksempelet her står atskilt er at det er knyttet en egenskap til dette punktet, i dette tilfellet at det er et knutepunkt (...KP) som betyr at det er knyttet til (f.eks.) en annen kurve. Denne egenskapen ligger på 3-prikksnivå, men siden koordinatene ligger på 2-prikksnivå må egenskapen ..NØ gjentas for å komme tilbake til rett prikknivå. Siden knutepunktegenskapen ikke benyttes i GSAK-fila, vil jeg fjerne alle KP-ene slik at alle koordinatsettene kommer sammenhengende med identiske første og siste koordinatsett. Fila blir da slik som eksempelet mitt i forrige innlegg.
Igjen, takk for info! Dette, samt litt leting og lesing på Kartverket sider, gjør at jeg omsider ser sammenhengen her. Objekttype «Kommunegrense» er bare et fragment av en komplett kommunegrense. Slike fragmenter er det over 20 tusen av, og rekkefølgen på disse i SOSI-filen er noe vilkårlig. Objekttype «Kommune» er en flate som refererer til en rekke fragmenter av objekttype «Kommunegrense». Jeg antar at når man syr sammen alle fragmentene, i henhold til beskrivelsen i «Kommune»-objektet, dannes en komplett, lukket kommunegrense. Jeg må altså først trekke ut alle kommunegrense-fragmentene, og så, for hver kommune, finne de fragmentene for den kommunen, reversere fragmenter om nødvendig, og så sy fregmentene sammen til et polygon. Så må UTM-koordinatene konverteres til geodetiske koordinater og skrives til de respektive filene for hver kommune. I tillegg må enklaver/eksklaver håndteres. De originale SOSI-dataene har centimeter som enhet, noe som tilsvarer geodetiske koordinater med syv desimaler.
~/.signature: No such file or directory.

Brukeravatar
Kjedalen
Senior
Senior
Innlegg:356
Registrert:tir 11 jan 2011 20:14
Sted:Tromsø

Re: Kommunedata i GSAK

Legg inn av Kjedalen » fre 11 okt 2013 16:01

pjacklam skrev:Igjen, takk for info! Dette, samt litt leting og lesing på Kartverket sider, gjør at jeg omsider ser sammenhengen her. Objekttype «Kommunegrense» er bare et fragment av en komplett kommunegrense. Slike fragmenter er det over 20 tusen av, og rekkefølgen på disse i SOSI-filen er noe vilkårlig. Objekttype «Kommune» er en flate som refererer til en rekke fragmenter av objekttype «Kommunegrense». Jeg antar at når man syr sammen alle fragmentene, i henhold til beskrivelsen i «Kommune»-objektet, dannes en komplett, lukket kommunegrense. Jeg må altså først trekke ut alle kommunegrense-fragmentene, og så, for hver kommune, finne de fragmentene for den kommunen, reversere fragmenter om nødvendig, og så sy fregmentene sammen til et polygon. Så må UTM-koordinatene konverteres til geodetiske koordinater og skrives til de respektive filene for hver kommune. I tillegg må enklaver/eksklaver håndteres. De originale SOSI-dataene har centimeter som enhet, noe som tilsvarer geodetiske koordinater med syv desimaler.
Dette er korrekt oppfattet. Vi har vektøy (Fysak) som er spesialtilpasset bearbeiding av SOSI-filer, så denne ryddejobben/sammenslåingsjobben er svært enkel der. Siden vi ikke har bruk for egenskapene på grenselinjene (kvalitet, datafangstdato etc.), kan alt dette slettes slik at vi sitter igjen med sammenhengende kurver. Dersom denne delen av jobben vil bli arbeidskrevende for deg, kan jeg gjerne gjøre denne ryddejobben, eventuelt også transformereing til desimalgrader med 7 desimaler som også enkelt gjøres i Fysak. Du vil da kunne motta ei SOSI-fil som nevnt med en sammenhengende kurve. Det enkleste vil være å gjøre det på ei fil for hele Norge dersom splittinga i 428 kommunefiler (+ ekstra for eksklavene) er enkelt for deg, men det vil jo da bli en kurvebit for hver nabokommune en kommune grenser mot siden hver kurvebit bare fins en gang i fila. Alternativt kan jobben gjøres på 428 ulike filer og vi får da en sammenhengengende kurve for hele kommunepolygonet.

Men dersom du mener at du greit finner et opplegg også for ryddejobben, må du selvsagt gjerne gjøre hele jobben! Det kan kanskje være det beste med tanke på fremtidige oppdateringer.
BildeBilde

pjacklam
Senior
Senior
Innlegg:810
Registrert:tir 13 mai 2008 09:39
Sted:Der bekken stilner av og blir til en svart kulp mellom granene

Re: Kommunedata i GSAK

Legg inn av pjacklam » ons 16 okt 2013 08:11

GadgetCats skrev:Og så dette med enklaver og eksklaver. Clyde har forklart hvordan det skal gjøres, og jeg har testet og fastslått at det fungerer slik det skal:

Enklaver: I tillegg til polygonet for området, legges polygonet for enklaven til i samme fil. Polygoner som er fullstendig inni et annet polygon, blir av GSAK behandlet som et "hull".
Eksklaver: En egen polygonfil for eksklaven legges til. GsakName settes i denne til samme som "eierområdet".

I praksis betyr dette at områder med enklaver har to (eller flere) sluttede polygoner i samme fil. Forskjellen er at første og siste koordinat i filen, ikke er like, og at det trekkes en linje mellom slutningspunktene for disse polygonene.

Hvis noen andre vil lage nye og bedre polygonfiler til GSAK, foreslår jeg at vi bruker følgende navnekonvensjon for lettere å finne frem og ha oversikt i dette:

Jeg bruker Himberg som eksempel:

Kode: Velg alt

0706.txt - hovedpolygonet for Sandefjord, GsakName=Sandefjord
0706ex1.txt - polygonfil 1 for eksklaven Himberg, også GsakName=Sandefjord
0707en.txt - hovedpolygonet for Larvik, inkludert polygonet for Himberg, GsakName=Larvik. Suffikset "en" for å synliggjøre at polygonfilen inneholder en enklave.
Jeg har nå laget filer for GSAK ut fra de originale SOSI-dataene med centimeterpresisjon. Jeg har også valgt filnavn slik du har angitt ovenfor. Etter noe testing, ser det for meg ut til at de nye filene fungerer greit, bortsett fra at eksklaver/enklaver blir stående ukategorisert. Feltet «County» blir stående tomt. Siden du (GadgetCats) har fått til dette før, er det antagelig noe jeg har gjort feil, men jeg forstår ikke hva.

Jeg har lastet opp filene i Dropbox, men ettersom Dropbox tydeligvis er svartelistet av min arbeidsgiver, får jeg ikke lagt ved lenker til dataene her. Jeg skal poste lenker når jeg kommer hjem i ettermiddag, så kan forhåpentlig andre teste dem.
~/.signature: No such file or directory.

Brukeravatar
Kjedalen
Senior
Senior
Innlegg:356
Registrert:tir 11 jan 2011 20:14
Sted:Tromsø

Re: Kommunedata i GSAK

Legg inn av Kjedalen » ons 16 okt 2013 14:34

pjacklam skrev:Jeg har nå laget filer for GSAK ut fra de originale SOSI-dataene med centimeterpresisjon.
Flott at du fant ut av SOSI-formatet og nærmer deg målet. Ser fram til å få disse i GSAK.

Så bare for å presisere en ting som jeg glemte i tidligere innlegg, men som jo du selvfølgelig har oppdaget:

Omkretsen av kommuneflata i SOSI-fila (..OBJTYPE Kommune) kan dannes av følgende ulike kurver som det refereres til i kommuneflata:
..OBJTYPE Kommunegrense
..OBJTYPE Fylkesgrense
..OBJTYPE Riksgrense
..OBJTYPE Territorialgrense

------------------------------------------

Og et lite eksempel til eventuelt andre som ikke kjenner SOSI-formatet (koordinatene er i UTM i centimeter):

Hvert kurvestykke i omkretsen har et gruppenummer (eks. .KURVE 7:) som det blir referert til i flata, og disse kan ligge i tilfeldig rekkefølge på fila. Eksempel der opplysninger om kvalitet, datafangstdato, knutepunkt etc. er fjernet):

.KURVE 4:
..OBJTYPE Kommunegrense
..NØ
774839613 71068135
774840550 71081961
774841691 71096187
.KURVE 8:
..OBJTYPE Fylkesgrense
..NØ
774784775 70771303
774624408 71024046
.KURVE 25:
..OBJTYPE Riksgrense
..NØ
774624408 71024046
774853171 71218395
.KURVE 7:
..OBJTYPE Territorialgrense
..NØ
774784775 70771303
774839503 71067536

Flata dannes ved at omkretsen av flata settes sammen av kurveobjekter slik:

.FLATE 23:
..KOMM 1999
..OBJTYPE Kommune
..NAVN Testkommune
..REF :-8 :7 :4 :-25
..NØ
774758294 71003724

Positive gruppenummer i referansen betyr at kurvegruppa tas "med sola" i flatedanninga mens negative gruppenummer tas "mot sola".

Først i fila har vi et filhode (.HODE) med ulik informasjon, og fila avsluttes med .SLUTT.
BildeBilde

pjacklam
Senior
Senior
Innlegg:810
Registrert:tir 13 mai 2008 09:39
Sted:Der bekken stilner av og blir til en svart kulp mellom granene

Re: Kommunedata i GSAK

Legg inn av pjacklam » ons 16 okt 2013 18:02

Kjedalen skrev:
pjacklam skrev:Jeg har nå laget filer for GSAK ut fra de originale SOSI-dataene med centimeterpresisjon.
Flott at du fant ut av SOSI-formatet og nærmer deg målet. Ser fram til å få disse i GSAK.

Så bare for å presisere en ting som jeg glemte i tidligere innlegg, men som jo du selvfølgelig har oppdaget:

Omkretsen av kommuneflata i SOSI-fila (..OBJTYPE Kommune) kan dannes av følgende ulike kurver som det refereres til i kommuneflata:
..OBJTYPE Kommunegrense
..OBJTYPE Fylkesgrense
..OBJTYPE Riksgrense
..OBJTYPE Territorialgrense
Alle kurvene har en unik ID, uansett hva slags kurvetype de er, så når jeg setter sammen kurvesegmentene til en lukket kurve, bryr jeg meg bare om hvilken ID de har, ikke hvilken type. Dette gjelder både for kommuner og fylker. Etter at kurven er satt sammen, fjerner jeg også påfølgende duplikater. Når to segmenter er skjøtt sammen, vil skjøtepunktet opptre to ganger i kurven. Det er unødvendig. Du kan se resultatet i GPX-filene jeg har lenket til. GPX-filene inneholder nøyaktig de samme koordinatene og kurvene som TXT-filene for GSAK.

locations.zip Tekst-filer for GSAK
gpx-test-cacher.zip GPX-filer med fiktive test-cacher lokalisert i enklavene/eksklavene samt noen andre cacher
gpx-adm-enheter.zip GPX-filer med alle data for fylker og kommuner

I henhold til SOSI-standarden er eksklavene som henger sammen med «hovedområdet» for kommunen, slik det er for Frogn og Nome, faktisk regnet som eksklaver og ikke som et «vedheng» til «hovedområdet» for kommunen. Jeg vet ikke hvordan GSAK håndterer dette, så det er mulig at dette må gjøre om.
~/.signature: No such file or directory.

anders99

Re: Kommunedata i GSAK

Legg inn av anders99 » tor 17 okt 2013 07:50

Kjedalen skrev: Og et lite eksempel til eventuelt andre som ikke kjenner SOSI-formatet (koordinatene er i UTM i centimeter):
For dem som ikke vil finne opp hjulet på nytt, så fungerer gdal utmerket og konverterer SOSI-filer til nærmest hva du ønsker og på hvilken måte du ønsker. Bare kompiler opp i henhold den oppskriften på kartverket jeg lenket til i meldingen min over.

pjacklam
Senior
Senior
Innlegg:810
Registrert:tir 13 mai 2008 09:39
Sted:Der bekken stilner av og blir til en svart kulp mellom granene

Re: Kommunedata i GSAK

Legg inn av pjacklam » fre 18 okt 2013 08:16

anders99 skrev:For dem som ikke vil finne opp hjulet på nytt, så fungerer gdal utmerket og konverterer SOSI-filer til nærmest hva du ønsker og på hvilken måte du ønsker. Bare kompiler opp i henhold den oppskriften på kartverket jeg lenket til i meldingen min over.
Jeg forsøkte det før jeg bestemte meg for å «finne opp hjulet på nytt», og det var ikke «bare»:

Kode: Velg alt

$ autoreconf --force --install
-bash: autoreconf: command not found
Greit nok. Jeg installerer pakken autoconf og forsøker igjen:

Kode: Velg alt

$ autoreconf --force --install
configure.ac:16: error: possibly undefined macro: AC_PROG_LIBTOOL
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
autoreconf-2.69: /usr/bin/autoconf-2.69 failed with exit status: 1
Fremfor å lære meg autoconf, m4 og ev. annet som må til for å fikse alt som tryner underveis, bestemte jeg meg for heller å lage noe ut av de verktøyene jeg behersker.
~/.signature: No such file or directory.

anders99

Re: Kommunedata i GSAK

Legg inn av anders99 » fre 18 okt 2013 08:46

pjacklam skrev:
anders99 skrev:For dem som ikke vil finne opp hjulet på nytt, så fungerer gdal utmerket og konverterer SOSI-filer til nærmest hva du ønsker og på hvilken måte du ønsker. Bare kompiler opp i henhold den oppskriften på kartverket jeg lenket til i meldingen min over.
Jeg forsøkte det før jeg bestemte meg for å «finne opp hjulet på nytt», og det var ikke «bare»:

Kode: Velg alt

$ autoreconf --force --install
-bash: autoreconf: command not found
Greit nok. Jeg installerer pakken autoconf og forsøker igjen:
Pussig, jeg kjørte dette på to maskiner med Ubuntu 13.04, og bortsett fra å måtte installere noen ekstra pakker (som det var lett å identifisere ut fra feilmeldinger - bl.a. autoconf) så gikk det helt smertefritt på begge.

Google: "possibly undefined macro: AC_PROG_LIBTOOL"
og du finner en side som foreslår: "apt-get install libtool"

Svar