Skip to content

Instantly share code, notes, and snippets.

@LtGlahn
Last active August 28, 2020 10:42
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/0ffc4ea310a2694b62ba12efb85b4a5f to your computer and use it in GitHub Desktop.
Save LtGlahn/0ffc4ea310a2694b62ba12efb85b4a5f to your computer and use it in GitHub Desktop.
Hvilke veger fikk endret status og eierskap i Oslo ved forvaltningsreformen? Dvs fra europa-, riks- og fylkesveg => kommunalveg?
"""
Analyserer hvilke europa, riks og fylkesveger som ble til kommunalveger nyttår 2010 i Oslo
Forutsetter at du har geopandas og dette biblioteket tilgjengelig https://github.com/LtGlahn/nvdbapi-V3
"""
import sqlite3
import geopandas as gpd
import pandas as pd
from shapely import wkt
import nvdbapiv3 # https://github.com/LtGlahn/nvdbapi-V3
def pandas2gpkg( mindf, filnavn, lagnavn):
"""
Lagrer pandas dataFrame med NVDB-objekt til geopackage
ARGUMENTS:
mindf - pandas dataframe med NVDB-objekt
filnavn - navn på .gpkg-fil vi skal skrive til
lagnavn - navn på tabellen vi skal lagre
KEYWORDS:
Nada
RETURNS:
Nada
"""
mindf = mindf.copy()
mindf['geometry'] = mindf['geometri'].apply( wkt.loads )
minGdf = gpd.GeoDataFrame( mindf, geometry='geometry', crs=25833 )
minGdf.to_file(filnavn, layer=lagnavn, driver="GPKG")
if __name__ == '__main__':
oslo = 301
sokVegref2009 = nvdbapiv3.nvdbFagdata( 532)
sokVegref2009.filter( { 'kommune' : oslo, 'vegsystemreferanse' : [ 'E', 'R', 'F' ], 'tidspunkt' : '2009-12-31' })
temp2009 = pd.DataFrame( sokVegref2009.to_records() )
sokVegref2010 = nvdbapiv3.nvdbFagdata( 532)
sokVegref2010.filter( { 'kommune' : oslo, 'vegsystemreferanse' : [ 'K' ], 'tidspunkt' : '2010-01-02' })
temp2010 = pd.DataFrame( sokVegref2010.to_records() )
temp2009 = temp2009.add_prefix( 'd2009_')
# Lager virituell database, slik at vi kan gjøre SQL-spørringer
conn = sqlite3.connect( ':memory:')
temp2010.to_sql( 'v2010', conn, index=False )
temp2009.to_sql( 'v2009', conn, index=False )
# Finner overlapp mellom ERF-veger per 31.12.2009 og K-veger per 1.1.2010
# Overlapp = samme plassering på samme veglenkesekvens
qry = """
select max( v2010.startposisjon, v2009.d2009_startposisjon ) as frapos,
min( v2010.sluttposisjon, v2009.d2009_sluttposisjon ) as tilpos,
* from v2009
INNER JOIN v2010 ON
v2009.d2009_veglenkesekvensid = v2010.veglenkesekvensid and
v2009.d2009_startposisjon < v2010.sluttposisjon and
v2009.d2009_sluttposisjon > v2010.startposisjon
"""
joined = pd.read_sql_query( qry, conn)
# Pynter litt på kolonnenavn, gidder ikke ta med alle kolonnene etc
joined.rename( columns={'d2009_vref' : 'vegref2009', 'vref' : 'vegref2010' }, inplace=True )
utskrift = joined[ [ 'd2009_Vegkategori', 'd2009_Vegstatus', 'd2009_Vegnummer', 'd2009_detaljnivå', 'vegref2009', 'Vegkategori', 'Vegstatus', 'Vegnummer', 'vegref2010', 'geometri' ] ]
# Lagrer som geopackage
pandas2gpkg( utskrift, 'refomr2010oslo.gpkg', 'endringer2010')
# Skriver ut brukervennlig oppsummering, se kommentar nedenfor
print( joined[['vegref2010', 'vegref2009']].drop_duplicates().to_string(index=False ) )
@LtGlahn
Copy link
Author

LtGlahn commented Aug 28, 2020

Oppsummert - disse vegene skiftet eier nyttår 2010:
print( joined[['vegref2010', 'vegref2009', 'Vegstatus']].drop_duplicates().to_string(index=False ) )

vegref2010 vegref2009 Vegstatus
KV6 EV6 Eksisterende veg
KV18 EV18 Eksisterende veg
KV4 RV4 Eksisterende veg
KV150 RV150 Eksisterende veg
KV155 RV155 Eksisterende veg
KV160 RV160 Eksisterende veg
KV161 RV161 Eksisterende veg
KV162 RV162 Eksisterende veg
KV168 RV168 Eksisterende veg
Kg160 Rg160 Gang-/sykkelveg
Kg150 Rg150 Gang-/sykkelveg
Kg80859 Rg190 Gang-/sykkelveg

Merk at vi har en liten snag i "vegref"-kolonnen: Gang/-sykkelveg skal strengt tatt være Rg150, ikke RV150. Dette er retta manuelt i denne tabellen.

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