KOSTRA-rapportering for kommunal veg

KOSTRA-rapportering er en oppgave som krever mye ressurser av offentlig forvaltning. En av de vanskelige tingene er å telle riktig lengde på vegnettet — selv internt i Vegvesenet sliter vi med det. I vår iver etter å fornye, forbedre og forenkle har vi selvsagt tenkt på hvordan dette kan gjøres mer elegant.

I vegkart og NVDB api’et får man summert opp lengden til alle strekningsobjekter i et søk (det inngår i responsen fra api’et søkefunksjon). Slik sett kunne man brukt et hvilket som helst heldekkende datasett (f.eks. fartsgrenser) til å finne lengden på vegnettet. Vi vegdata-nerder anbefaler at man bruker vegreferanse, men det er et par fallgruber: Vi tar ikke med såkalt «fiktiv veg», og søket avgrenses til vegstatus «eksisterende veg».

 

Eksakt hvorfor det er slik blir litt for omfattende å gå inn på nå, men interesserte anbefales å begynne lesningen i den aldeles utmerkede håndbok v830 Nasjonalt vegreferansesystem.

For alle andre så holder det å vite at dette vegkart-søket gir deg lengden på kommunale veger i Arendal kommune. Tallet du er ute etter er 239.419 meter (per 9/5 2017), som du ser i Vegkart.

Vegkart-søk for KOSTRA-rapportering. Vegreferanse på kommunalveger med filter: Vegtype forskjellig fra "Fiktiv veg" og vegstatus lik "Eksisterende veg" og "konnekteringslenke forskjellig fra konnekteringslenke" (dvs vi tar IKKE med konnekteringslenker i søket)

Disclaimer: Jeg aner ikke om KOSTRA rapportering også omfatter private veger og skogsbilveger. I så fall er det trivielt å føye dem til i søkefeltet.

 

For lokalpatrioter utenfor Arendal er det selvsagt trivielt å skifte ut den vakre sørlandsbyen med sin egen favorittkoummune: Klikk på «x», en bak Arendal, klikk på en ledig plass i søkefeltet og skriv ditt kommunenavn. Press Enter.

Voila, instant KOSTRA-rapportering!

Vegkart og NVDB API er oppdatert

Det ble i dag installert en ny versjon av både Vegkart i NVDB API. Leveransen har hatt fokus på å feilrettinger og utvidete søkemuligheter i Vegkart.

Endringer i Vegkart:

  • Det er nå mulig å søke innenfor én eller flere riksvegruter
  • Det er nå mulig å søke innenfor én eller flere kontraktsområder
  • Feilretting: Maptiles blir ikke lenger plassert feil i IE10 ved rask zooming

Endringer i NVDB API:

  • Det er nå mulig å søke innenfor én eller flere riksvegruter i /sok-endepunktet
  • Det er nå mulig å søke innenfor én eller flere kontraktsområder i /sok-endepunktet
  • Feilretting: Noen objekter inneholder ikke lenger referanse til feil morobjekt
  • Feilretting: /omrader-endepunktet inneholder CORS-headere

Må man krangle med elgen for å forstå lineære referanser?

Vi er så heldige i Statens Vegvesen å ha veldig flinke fagfolk innen mange områder. Knut Jetlund er en av mange flinke kolleger som godt kunne fortjene litt mer skryt for kompetanse og innsats. Foruten det daglige slitet med å flytte rundt og kna på geografiske data så deltar Knut i standardiseringsarbeid nasjonalt og internasjonalt, med vegnett og lineære referanser som spesialområde.

Vi er veldig glade i det geiniale verktøyet FME for å kna i geografiske data. Derfor synes vi det er ekstra gøy når produsenten ikke bare legger merke til Knuts arbeid med lineære referanser, men bruker det som utgangspunkt for webinar og blogginnlegg.

(Ekstra skryt til Norkart Geoservice for å være kjappe med å reklamere for et svært severdig webinar… )

You can’t reason with a moose – blogginnlegg om lineære referanser (Safe software).

Er vegen kommunens eller statens ansvar?

Etter de forrige innleggene har vi fått en del spørsmål — hvordan kan vi enklest mulig vise om vegen er kommunens  eller statens (d.v.s. Statens Vegvesens)  ansvar? Aller helst skulle vi vist de kommunale vegene i en farge, mens europa-riks- og fylkesveger ble en annen farge. (Fylkesveger er selvsagt fylkeskommunens ansvar, men Vegvesenet hjelper til på vegne av fylkeskommunen).

Dette klarer vi ikke i dagens vegkart-løsning. Den som vil lage sine egne kartløsninger kan glede seg over at logikken støttes i maskineriet bak (vårt åpne api), men dette hjelper dessverre ikke våre ivrige vegkart-brukere. Det nærmeste vi kommer er en av disse løsningene:

  • Løsning 1 (den enkleste) Marker alle kommunale veger (skogsbilveg, privat veg, kommunal veg), slik som nedenfor. Veger uten markering er da statens ansvar.
  • Løsning 2 Utvid den løsningen vi foreslo her ved å legge til tre nye vegreferanse – elementer, hvert med et egenskapsfilter lik h.h.v. Vegkategori=Europaveg, Fylkesveg eller Riksveg. Dette blir en veldig komplisert løsning, med svært mange klikk før man er i mål. Resultatet har masse glade farger som jeg personlig synes blir utrolig rotete, men det er jo smak og behag.

Her viser vi hvordan den første løsningen blir seende ut:

Vegkart - søk: Vegreferanse på private, kommunale og skogsbilveger i Kristiansand.

Nei, det er ikke så mange skogsbilveger i Kristiansand sentrum. Men sammen med kommunale og private veger er de en del av det «kommunale vegnettet» som ikke er statens ansvar.

Lenke til dette søket.

Husk at for akkurat dette søket kan du bli grundig lurt av maksgrensen på antall objekter i kartet. P.t. har vi standardgrense på 500 objekter samtidig, og du skal ikke zoome så veldig langt ut før du er over denne grensen. Klikk på #-symbolet til høyre for Vegreferanse for å øke til et mer rimelig tall.

 

 

Fartshumper på fylkesveger

Det er på tide å si noe om filtrering på vegkategori — eller mer presist: Hva slags type veg det er — og hvem som eier vegen. Vi har i dag disse seks vegkategoriene:

Europaveger
Riksveger
Fylkesveger
Kommunalveger
Privatveger
Skogsbilveger

Merk at Motorveg ikke er noen vegkategori, men en egen objekttype. Igjen anbefaler vi den aldeles utmerkede håndbok v830 (Nasjonalt vegreferansesystem), som har en aldeles utmerket innføring i emnet.

Alle søk i vegkart (og NVDB-api) kan filtreres på vegkategori!

For eksempel kan vi finne alle fartshumper på fylkesveger i Trondheim med dette søket:

Vegkart-søk på fartsdempere langs fylkesveger i Trondheim kommune.

Vegkart-søk på fartsdempere langs fylkesveger i Trondheim kommune.

Lenke til søket. Vi kan også føye til flere vegkategorier i samme søk.

For en tid tilbake viste vi også et eksempel hvor vi gjorde kreativ bruk av egenskapsfiltrering for å vise kommunale veger, private veger og skogsbilveger med separate farger i vegkart. (Se eksempel). Dette kunne vi gjøre fordi objektet Vegreferanse har egenskapstypen Vegkategori. Men vegreferanse-objektet er helt spesielt på mange måter (igjen, vi viser til håndbok v830), og dette trickset kan vi ikke bruke på noen av de andre objekttypene.

Men — felles for alle data i NVDB er at vi kan avgrense søket til hvilken veg som objektet er knyttet til, slik vi gjør med fartshumpene over (gi meg fartshumper langs fylkesveger). Vi kan også avgrense et spesifikt vegnummer, for eksempel fylkesveg 901 i Trondheim kommune:

 

Vegkart-søk fartsdempere langs Fv901 i Trondheim kommune.

Fartsdempere langs Fv901 i Trondheim kommune.

Lenke til dette søket.

Hvor står skiltet?

Jeg fikk en rutebeskrivelse over telefon, men fikk ikke helt med meg eksakt hvor og i hvilken retning jeg skulle svinge av fra E6, og både lydkvalitet og uvant dialekt var barrierer mot effektiv kommunikasjon.

Det som berget situasjonen var opplysningen om «trur det er skiltet til Hovin» — og litt kreativ bruk av vegkart.

Objekttype skiltplate med filter Tekst = Hovin gir 5 treff i aktuelt område, resten var trivielt.

Vegkart-søk på skilt med teksten "Hovin" i Trøndelag

Skilt med teksten «Hovin» i Trøndelag

Lenke til dette søket.

Er vegen kommunal eller privat?

I vegkart kan man klikke på en veg og få opp en såkalt vegreferanse.

Vegreferanse vist i Vegkart

Vegreferanse

Her får du opp en litt i overkant kryptisk kode:  «KV 4500 H1 m713»

Den første bokstaven («K» ) forteller deg at vegen er kommunal, mens tallet 4500 er selve vegnummeret. For skogsbilveger er første bokstav «S», private veger har en «P», mens europa-, riks-, og fylkesveger har «E», «R» eller «F». Resten av koden er grundig forklart her: Nasjonalt vegreferansesystem – håndbok v830

Men hvordan kan jeg få et kart som viser hvilke veger som er kommunale og private?

Med den nye versjonen av vegkart kan du nå søke på flere ganger på samme objekt. Kombinert med egenskapsfilter kan du for eksempel søke tre ganger på objektet «vegreferanse» med filter for vegkategori lik kommunal, privat og skogsbilveg, og dette vil bli tegnet opp med ulike farger i kartet. For eksempel slik:

Vegkart-søk for å vise private v.s. kommunale veger - og skogsbilveger

Vegkart-søk for å vise private v.s. kommunale veger – og skogsbilveger

Lenke til dette søket

Visst finnes det verktøy der det er mer intuitivt og kjappere å få fram kart over kommunale versus private veger. Vi har absolutt ingen ambisjon om at vegkart skal være førstevalg til absolutt alt — noen oppgaver er og blir mer rett fram i andre verktøy, og det er slik det skal være.

Vi vil først og fremst vise at vegkart nå kan brukes på nye og mer kreative måter, med enda smartere spørringer.

Tilføyelse: Vegreferanse er på mange måter spesiell, og den eneste objekttypen som har egenskapen Vegkategori som vi kan utnytte på akkurat denne måten. Hvis vi ønsker å avgrense søk etter andre typer data til f.eks. kommunale veger eller fylkesveger må vi gjøre ting på en litt annen måte. Vi sier litt mer om dette i dette innlegget.

Hva er forbindelsen mellom ELVEG, VBASE og NVDB?

Vegnettsdataene FKB veg, Elveg og Vbase bruker alle elementet TRANSID som unik nøkkel på akkurat denne vegstrekningen. Bruken av TransID er eldre enn NVDB, men NVDB er i dag orginalkilden til både TransID (og øvrige vegnettsdata). Disse TransID’ene vedlikeholdes i NVDB under navnet Transportlenke. NVDB ID’en til et transportlenke-objekt er identisk med transID-verdien i Elveg, Vbase eller FKB veg. Dermed er det trivielt å hente data ut fra det nye NVDB-api’et.

Et transportlenke-objekt i NVDB har vegreferanse (vegnummer, parsellnummer) og meterverdier (til-fra). Vegreferanse er en av tre mulige måter å søke opp vegstrekninger i NVDB (de to andre er geometri og ID til veglenken, ref http://api.vegdata.no/verdi/vegreferanse.html  ). Vegreferanser stammer fra tiden før presis satelittnavigasjon, og er en menneskelig forståelig måte å navigere vegnettet på. Interesserte kan lese mer om dette fascinerende temaet i den utmerkede håndbok v830 – anbefalt lesning!

Det å bruke vegreferanse som koblingsnøkkel har et par ulemper: Vegnettsendringer blir ikke håndtert på en robust måte, i tillegg til at kommunenummer og vegnummer kan endres ved et pennestrøk. Men bruken av vegreferanse er veldig innarbeidet. Som «dynamisk» oppslagsnøkkel funker det helt greit. Men ønsker du systemintegrasjon med persistent koblingsnøkkel mot NVDB bør du bruke NVDB ID til objektet — eller veglenkeID og posisjon.

Eksempel fra Elveg-SOSI versjon 4.0  (Eigersund kommune, Elveg-leveranse 1.9.2013)

.KURVE 2:
..OBJTYPE VegSenterlinje
..KVALITET 60 200
..DATAFANGSTDATO 20001206
..TRANSID 145816634
..KOMM 1101
..VNR K V 100
..VPA 1 28 48
..VKJORFLT 1#2
..VFRADATO 19500101
..NØH
652134340 -1759380 8560 ...KP 1
..NØH
652134680 -1759020 8570
652134930 -1758660 8590
652135270 -1758190 8620
652135580 -1757820 8650 ...KP 1

TransID’en kan da søkes opp i NVDB slik: https://www.vegvesen.no/nvdb/api/v2/vegobjekter/539/145816634.xml

Begrepet «TransID» eksisterer for øvrig ikke lenger fra og med Sosi 4.5. I stedet brukes de generelle Sosi-mekanismene for identifikasjon – slik:

..IDENT
...LOKALID 145816634
...NAVNEROM NVDB_Transportlenker

 

Hvordan laste vegnett fra NVDB inn i QGIS med 6 linjer Python

I dag ble Kartverkets og Statens vegvesens skattekister åpnet, et frislipp mange har ventet på lenge. Vi hadde gleden av å presentere en ny prototype for dataleveranser av vegnett, hvor vegnettet kan hentes på GeoJSON-format gjennom en REST-basert webtjeneste: http://vegnett.vegdata.no/ Prototypen er lagt i graven

Kombinasjonen GeoJSON og REST kan gi mange muligheter i GIS-verktøy, spesielt de som har integrasjon mot språk som Python. Dette innlegget beskriver hvor enkelt og raskt det er å importere vegnettet inn klienten Quantum GIS (QGIS), som er basert på åpen kildekode.

APIet som tilbyr vegnett har foreløpig ikke mange paremetere, siden det kun er en prototype. En bruker har følgende valg:

  • Hent vegnettet innenfor hele Norge, innenfor et bestemt fylke, eller innenfor en bestemt kommune.
  • Hent vegnettet innenfor én eller flere vegkategorier: Europaveg (E), RIksveg (R), Fylkesveg (F), Kommunalveg (K), Privatveg (P), Skogsbilveg (S)

For å importere vegnettet inn i QGIS, er det ønskelig å lage en funksjon i Python som oppretter et nytt vektorlag. Funksjonen skal ha tre innparametere:

  1. Lokasjon
  2. Vegkategorier
  3. Lagnavn
def lag(sted, vegkategori, navn):
    api = 'http://vegnett.vegdata.no/nvdb/api/vegnett/' 
    uri = api+sted+'.json?kategori='+vegkategori

    lag = QgsVectorLayer(uri, navn, "ogr")
    QgsMapLayerRegistry.instance().addMapLayer(lag)

UTDATERT – denne vegnetts-prototypen eksisterer ikke lengre. Vegnettsendepunktet til NVDB api V1 kan brukes i stedet. Eksempel 

Merk at NVDB api’et V2 har fått nytt vegnett-endepunkt.

Ovenfor er den ferdige funksjonen, med 5 linjer Python-kode, pluss et mellomrom for å øke lesbarheten. De tre øverste linjene er selvforklarende.

Den nest nedeste linjen laster et vektorlag fra APIet, ved hjelp av OGR-biblioteket: http://www.qgis.org/en/docs/pyqgis_developer_cookbook/loadlayer.html

Den nederste linjen registrerer laget i QGIS sitt brukergrensesnitt: http://www.qgis.org/en/docs/pyqgis_developer_cookbook/canvas.html

Funksjonen kan kalles på følgende måte:

lag('17/19', 'ERF', 'Levanger ERF')

Koden ovenfor laster ned alle europa-, riks- og fylkesveger i Levanger kommune. Lokasjon angis ved hjelp av fylke- og kommunenummer. For en rask referanse, kan dere benytte samme liste som APIet prototypen benytter: http://vegnett.vegdata.no/js/lokasjon.js

Nedenfor er et utsnitt fra QGIS etter at koden ovenfor er kjørt.

vegnett-prototype

Med den grunnleggende funksjonen i boks, er det lett å utvide med mer avanserte spørringer etter data. Funksjonen nedenfor henter hele vegnettet i en bestemt fylke eller kommune, og oppretter samtidig ett lag for hver vegkategori.

def lag_kategorier(sted, navn):
    vegkategorier = ['e', 'r', 'f', 'k', 'p', 's']

    for kategori in vegkategorier:
        lag(sted, kategori, navn+' '+kategori)

 

Hvordan finner jeg skilt med elg og julenisser?

Hvordan kan jeg finne posisjonen til alle elg-skilt i Norge via vegatabankens API? 🙂 Hva med løpende nisse med sekk-skilt?

Se opp for elg!

Fare for elg!
@ http://www.flickr.com/photos/antoinettejanssen/7016975067/ etter CC-lisens

Skilt er relativt komplisert å finne ut av – men håndbok 050 Trafikkskilt er til god hjelp. Det er også verdt å merke seg at vi skiller mellom skiltpunkt (fundamentet, om du vil) og skiltplate (selve tegningen). Ett skiltpunkt kan ha ett eller flere skiltplater som datterobjekter.

Elgskiltet er en skiltplate der egenskapen Skiltnummer HB-050 er satt lik 146.1 – Elg. I moderne nettlesere får du adskillig hjelp med å velge lovlige blant lovlige verdier for disse feltene. Her er f.eks. søk på elgskilt i Elverum (vegkart). Tilsvarende søk i API’et:

GET / http/1.1. 
https://www.vegvesen.no/nvdb/api/sok?kriterie={"lokasjon":{"kommune":["427"]},"objektTyper":[{"id":96,"antall":"250","filter":[{"type":"Skiltnummer HB-050","operator":"=","verdi":["146.1 - Elg"]}]}]}

Accept: application/vnd.vegvesen.nvdb-v1+xml

Hvis du tør kan du jo prøve å hente elgene direkte i nettleseren din: https://www.vegvesen.no/nvdb/api/sok?kriterie={«lokasjon»:{«kommune»:[«427″]},»objektTyper»:[{«id»:96,»antall»:»250″,»filter»:[{«type»:»Skiltnummer HB-050″,»operator»:»=»,»verdi»:[«146.1 – Elg»]}]}]}

… men dette vil ikke funke i alle nettlesere.

Men hvor finner vi Julenissen???

Ryktene florerer om at det er observert julenisser i datakatalogen natt til 25. desember, men dette har ikke latt seg verifisere innenfor normal arbeidstid. Vi er nødt til å konkludere med at julenisser ikke er en gyldig objekttype i datakatalogen. Men det står da beviselig et julenisseskilt i Drøbak (der julenissen bor):

Annen fare - julenisse (c) julehus.no

Annen fare – julenisse
(c) julehus.no

Etter litt detektivarbeid har vi funnet ut at denne skiltplaten har nummer 156 – Annen fare og teksten Julenisse. Og ja – som dere ser  (vegkart-søk etter julenisseskilt) finnes det bare en forekomst i NVDB