import STARTHER
import lastnedvegnett
import skrivdataframe
import nvdbapiv3
import nvdbgeotricks

t0 = datetime.now()

# egenskapfilter_bk904_u10t = 'egenskap(10901)=18186 OR egenskap(10901)=18187 OR egenskap(10901)=18188 OR egenskap(10901)=18189 OR egenskap(10901)=18190'
# overlappfilter  = '904(10901=18186 OR 10901=18187 OR 10901=18188 OR 10901=18189 OR 10901=18190)'

mittfilter = lastnedvegnett.kostraFagdataFilter(
    mittfilter={'egenskap': '1263=7304 OR 1263=7305'})
sok = nvdbapiv3.nvdbFagdata(60)
sok.filter(mittfilter)
bruGdf = nvdbgeotricks.records2gdf(sok.to_records())

# Oppsummerer bru. Her må vi ta hensyn til at noen av bruene mangler egenskapen "Lengde"
bruGdf_medLengde = bruGdf[~bruGdf['Lengde'].isnull()].drop_duplicates(
    subset='nvdbId')
bruGdf_uLengde = bruGdf[bruGdf['Lengde'].isnull()].copy()
bruGdf_uLengde['Lengde'] = bruGdf_uLengde['segmentlengde']
bru_alleharLengde = pd.concat([bruGdf_medLengde, bruGdf_uLengde])

telling = bru_alleharLengde.groupby(['fylke']).agg({
    'nvdbId': 'nunique',
    'Lengde': 'sum'
}).reset_index()
telling.rename(columns={
    'nvdbId': 'Antall',
    'lengde': 'Lengde (m)'
import lastnedvegnett
import skrivdataframe
import nvdbapiv3
import nvdbgeotricks

t0 = datetime.now()

# Tunneller (evt tunnelløp) som overlapper med høydebegrensning under 4m
overlappfilter = '591(5277<4)'
mittfilter = lastnedvegnett.kostraFagdataFilter(
    mittfilter={'overlapp': overlappfilter})

# Henter tunneler
sok = nvdbapiv3.nvdbFagdata(581)
sok.filter(mittfilter)
tunnelGdf = nvdbgeotricks.records2gdf(sok.to_records())
tunnelGdf.to_file('tunneldebug.gpkg', layer='tunnelpunkt_u_4m', driver='GPKG')

# Dessverre er det noen tunneller som mangler egnenskapen "Lengde, offisiell"
# Vi skal supplere manglende data fra tunnelløp
# aller først deler vi tunnel-datasettet i to
manglerLengde = tunnelGdf[tunnelGdf['Lengde, offisiell'].isnull()].copy()
harLengde = tunnelGdf[~tunnelGdf['Lengde, offisiell'].isnull()]

# Først få tak i tunnelløp
sok = nvdbapiv3.nvdbFagdata(67)
sok.filter(mittfilter)
tLopGdf = nvdbgeotricks.records2gdf(sok.to_records())
tLopGdf.to_file('tunneldebug.gpkg', layer='tunnelpunkt_u_4m', driver='GPKG')

# Lager en buffer rundt tunnel (punktobjekt) og gjør geografisk join
import STARTHER
import lastnedvegnett
import skrivdataframe
import nvdbapiv3
import nvdbgeotricks

t0 = datetime.now()

mittfilter = lastnedvegnett.kostraFagdataFilter()
mittfilter['egenskap'] = '1216=3615'
mittfilter['overlapp'] = '540(4623>=5000)'

sok = nvdbapiv3.nvdbFagdata(241)
sok.filter(mittfilter)
myGdf = nvdbgeotricks.records2gdf(sok.to_records())

myGdf.to_file('debug_grus.gpkg', layer='grus aadt over 5000', driver='GPKG')

# Debugger, henter det inverse søket.
filter2 = lastnedvegnett.kostraFagdataFilter(mittfilter={})
filter2['overlapp'] = '241(1216=3615)'
filter2['egenskap'] = '4623>=5000'

sok = nvdbapiv3.nvdbFagdata(540)
sok.filter(filter2)
aadt_Gdf = nvdbgeotricks.records2gdf(sok.to_records())
aadt_Gdf.to_file('debug_grus.gpkg', layer='AADT over 5000 grus', driver='GPKG')

# Debugger, sjekker lengde per vegnummer
lengde = myGdf.groupby(['fylke', 'vegkategori', 'nummer']).agg({
import pandas as pd
import numpy as np

import STARTHER
import lastnedvegnett  
import skrivdataframe
import nvdbapiv3
import nvdbgeotricks

t0 = datetime.now()
mittfilter = lastnedvegnett.kostraFagdataFilter( mittfilter={ 'egenskap' : '5277 < 4 AND 5270=8151' } )
# mittfilter = lastnedvegnett.kostraFagdataFilter( mittfilter={ 'egenskap' : ' 5277 < 4 AND ( 5270=8168 OR 5270=8149 ) ', 'overlapp' : '60(1263=7304)'} )
# mittfilter = lastnedvegnett.kostraFagdataFilter( mittfilter={ 'overlapp' : '591(5277 < 4 AND ( 5270=8168 OR 5270=8149 ) ) ', 'egenskap' : '1263=7304'} )
sok = nvdbapiv3.nvdbFagdata( 591 )
sok.filter( mittfilter  ) 
myGdf = nvdbgeotricks.records2gdf( sok.to_records( ) )

# myGdf.to_file(  'brudebug.gpkg', layer='nyeHoydeBegrBruer', driver='GPKG')

# Debugger hvilken effekt overlapp med bru evt måtte ha... 
filter2 = deepcopy( mittfilter )
filter2['overlapp'] = '60'
sok = nvdbapiv3.nvdbFagdata( 591 )
sok.filter( filter2 )
testGdf = nvdbgeotricks.records2gdf( sok.to_records())


telling = myGdf.groupby( ['fylke' ]).agg( { 'nvdbId': 'nunique' } ).astype(int).reset_index()
telling.rename( columns={ 'nvdbId' : 'Antall', 'lengde' : 'Lengde (m)' }, inplace=True )