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.
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:
- Les deg opp på artikkelen Hvordan får jeg NVDB-data inn i kartsystemet mitt? | Vegdata.no
- Lag et filter søket ditt til det vegnettet du er interessert i. Eksempel fylkesveger i Innlandet så føyer du til parametrene vegsystemreferanse=Fv&fylke=34
- Last ned segmentert vegnett med det filteret du laget, eksempel https://nvdbapiles-v3.atlas.vegvesen.no/vegnett/veglenkesekvenser/segmentert?vegsystemreferanse=Fv&fylke=34
- Løp gjennom alle vegsegmentene og ta vare på dem som mangler data for kontraktsområder.
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.