Skip to content

Instantly share code, notes, and snippets.

@LtGlahn
Last active August 19, 2020 14:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LtGlahn/a522be7c31e202ccd3d1f316978fe249 to your computer and use it in GitHub Desktop.
Save LtGlahn/a522be7c31e202ccd3d1f316978fe249 to your computer and use it in GitHub Desktop.
Finne NVDB-objekter med startdato inn i framtida
"""
Konseptutvikling / demonstrasjon av hvordan du finner vegobjekt med framtidig startdato i NVDB
Eksemplet leter etter tunneler (587) som har startdato > dagen i dag.
Per 19. august vet vi om ett objekt med startdato = 10. september 2020.
(https://nvdbapiles-v3.atlas.vegvesen.no/vegobjekter/581/1008940122/1)
Vi har funnet to metoder som begge virker:
- Metode 1: Hente alle versjoner (alle start/sluttdatoer) for en objekttype
- Metode 2: Hent alle forekomster som antas å være gyldig en gang langt inn i framtida
Begge metodene får med de objektene som er gyldige i dag, så du må filtrere på startdato > i dag.
(metode 2 får kun dem som ikke har sluttdato < langt inn i framtida)
Eksemplet bruker dette bibiloteket: https://github.com/LtGlahn/nvdbapi-V3
Men
"""
from datetime import datetime
import nvdbapiv3
# Dagens dato
idag = datetime.now()
idag = idag.replace(hour=0, minute=0, second=0, microsecond=0)
print( "\nFinner framtidige tunnelløp, metode 1: Hent alle versjoner (all tid)")
tun = nvdbapiv3.nvdbFagdata( 581)
tun.addfilter_geo( { 'alle_versjoner' : True })
treff = [ ]
t0 = datetime.now()
t1 = tun.nesteForekomst( )
count = 0
while t1:
startdato = datetime.strptime( t1['metadata']['startdato'], '%Y-%m-%d' )
if startdato > idag:
print( 'Fant objekt med startdato', startdato, t1['href'])
treff.append( t1 )
count += 1
t1 = tun.nesteForekomst()
dt = datetime.now() - t0
print( 'Metode 1: ', dt.total_seconds(), 'sekund på å lete blant', count, "objekt for å finne", len( treff ), 'objekt med framtidig startdato')
print( "\n===============================================\n")
print( "Finner framtidige tunnelløp, metode 2: Tidspunkt langt fram")
tun = nvdbapiv3.nvdbFagdata( 581)
tun.addfilter_geo( { 'tidspunkt' : '2050-09-10' })
treff = [ ]
t0 = datetime.now( )
t1 = tun.nesteForekomst( )
count = 0
while t1:
startdato = datetime.strptime( t1['metadata']['startdato'], '%Y-%m-%d' )
if startdato > idag:
print( 'Fant objekt med startdato', startdato, t1['href'])
treff.append( t1 )
count += 1
t1 = tun.nesteForekomst()
dt = datetime.now() - t0
print( 'Metode 2: ', dt.total_seconds(), 'sekund på å lete blant', count, "objekt for å finne", len( treff ), 'objekt med framtidig startdato')
@LtGlahn
Copy link
Author

LtGlahn commented Aug 19, 2020

Output fra koden (kjørt 19.august 2020)

Finner framtidige tunnelløp, metode 1: Hent alle versjoner (all tid)
Fant objekt med startdato 2020-09-10 00:00:00 https://nvdbapiles-v3.atlas.vegvesen.no/vegobjekter/581/1008940122/1
Metode 1: 5.251668 sekund på å lete blant 4391 objekt for å finne 1 objekt med framtidig startdato

===============================================

Finner framtidige tunnelløp, metode 2: Tidspunkt langt fram
Fant objekt med startdato 2020-09-10 00:00:00 https://nvdbapiles-v3.atlas.vegvesen.no/vegobjekter/581/1008940122/1
Metode 2: 8.786157 sekund på å lete blant 1226 objekt for å finne 1 objekt med framtidig startdato

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment