Hvor mangler vi kontraktsområde?

Fra våre venner hos fylkeskommunen fikk vi denne utfordringen:

Det fylkeskommunen ønsker, er å finne ut om det er noen deler av fylkesvegnettet som ikke har knyttet et kontraktsområde til seg. Slik det er i dag, må man sammenligne to rapporter og finne forskjellen

Dette er et flott eksempel på noe som ikke er ferdig støttet i våre produksjons- og rapporteringsystemer, men som fint lar seg løse med ørlite grann koding, for eksempel i FME eller python.

Kontraktsområder er såpass viktige at vi i NVDB api segmenterer alle andre data med informasjon hentet fra objekttype 580 kontraktsområde. Dermed kan du bruke navnet på kontraktsområde som søkefilter i Vegkart og NVDB api. I vegkart-veiledningen har vi et eksempel på hvordan du kan vise vegnettet for et kontraktsområde i Vegkart.

Skjermdump som viser vegkart-søk etter utstrekningen til kontraktsområde 1202 Stor-Bergen 2015-2020

Men hvordan finner vi det vegnettet som mangler kontraktsområde?

Ta en litt grundigere titt på en bit av segmentert vegnett: https://nvdbapiles-v3.atlas.vegvesen.no/vegnett/veglenkesekvenser/segmentert/804767 . På JSON-format ser det noenlunde slik ut (forkortet for lesbarhet):

{
  "href": "https://nvdbapiles-v3.atlas.vegvesen.no/vegnett/veglenkesekvenser/segmentert/804767",

  8< --- forkortet for lesbarhet 
  
  "kontraktsområder": [
    {
      "id": 1013305686,
      "nummer": 9304,
      "navn": "9304 Bergen 2021-2026"
    },
    {
      "id": 1010943925,
      "nummer": 1202,
      "navn": "1202 Stor-Bergen 2020-2021"
    }
  ]
  
  8< ---- forkortet for lesbarhet 
}

For hvert eneste vegsegment har vi altså en liste med de kontraktsområdene som gjelder for dette vegsegmentet. Hvis det ikke er registrert noe kontraktsområde for et segment så er denne listen enten tom (for JSON-formatet) eller mangler (XML-formatet). For eksempel https://nvdbapiles-v3.atlas.vegvesen.no/vegnett/veglenkesekvenser/segmentert/2720672

{
  "href": "https://nvdbapiles-v3.atlas.vegvesen.no/vegnett/veglenkesekvenser/segmentert/2720672",
  
  8< --- forkortet for lesbarhet 
  
  "kontraktsområder": [],
  
  8< --- forkortet for lesbarhet 

}

Løsningen for å finne veger uten kontraktsområde blir da å lage litt kode som henter data fra NVDB api:

Har du kodeeksempler?

Klart det – her er et enkelt python kodeeksempel

Et mer komplett python-kodeeksemplet gjør bruk av Pandas Dataframes og Geopandas Geodataframes, samt mitt eget python-bibliotek for å lese data fra NVDB api. Installasjon av disse komponentene kan gi høy brukerterskel for uøvde brukere.

Vi kan helt sikkert lage et FME-kodeeksempel hvis det er interessant.