Example #1
0
def dumpkontraktsomr():
    """
    Dumper et har (hardkodede) kontraktsområder 
    """

    komr = ['9302 Haugesund 2020-2025', '9304 Bergen', '9305 Sunnfjord']

    objliste = [
        540,  # Trafikkmengde
        105,  # Fartsgrense
        810,  # Vinterdriftsklasse
        482,  # trafikkregistreringsstasjon
        153,  # Værstasjon
        64,  # Ferjeleie
        39,  # Rasteplass 
        48,  # Fortau
        199,  # Trær
        15,  # Grasdekker
        274,  # Blomsterbeplanting
        511,  # Busker
        300,  # Naturområde (ingen treff i Haugesund kontrakt)
        517,  # Artsrik vegkant
        800,  # Fremmede arter
        67,  # Tunnelløp
        846,  # Skredsikring, bremsekjegler 
        850  # Skredsikring, forbygning
    ]

    for enkontrakt in komr:

        filnavn = nvdbapiv3.esriSikkerTekst(enkontrakt)

        nvdb2gpkg(objliste,
                  filnavn=filnavn,
                  mittfilter={'kontraktsomrade': enkontrakt})
Example #2
0
def nvdb2gpkg(objekttyper,
              filnavn='datadump',
              mittfilter=None,
              vegnett=True,
              vegsegmenter=False,
              geometri=True):
    """
    Lagrer NVDB vegnett og angitte objekttyper til geopackage

    ARGUMENTS
        objekttyper: Liste med objekttyper du vil lagre 

    KEYWORDS
        mittfilter=None : Dictionary med filter til søkeobjekt i nvdbapiv3.py, for eksempel { 'kommune' : 5001 }
        Samme filter brukes på både vegnett og fagdata

        vegnett=True : Bool, default=True. Angir om vi skal ta med data om vegnett eller ikke

        vegsegmenter=False : Bool, default=False. Angir om vi skal repetere objektet delt inn etter vegsegementer

        geometri=True : Bool, default=True. Angir om vi skal hente geometri fra egengeometri (hvis det finnes)

        Hvis du ønsker å presentere vegobjekt ut fra objektets stedfesting langs veg så bruker du kombinasjonen 
        vegsegmenter=True, geometri=False. Ett enkelt objekt blir da repetert for hvert vegsegment som det er 
        tilknyttet (stedfestet til). 
        
        Standardverdiene vegsegmenter=False, geometri=True er valgt ut fra antagelsen om at du ønsker 
        en rad per objekt, uten duplisering. 

    RETURNS 
        None 
    """

    if not '.gpkg' in filnavn:
        filnavn = filnavn + '_' + datetime.today().strftime(
            '%Y-%m-%d') + '.gpkg'

    if not isinstance(objekttyper, list):
        objekttyper = [objekttyper]

    for enObjTypeId in objekttyper:

        enObjTypeId = int(enObjTypeId)

        sok = nvdbapiv3.nvdbFagdata(enObjTypeId)
        if mittfilter:
            sok.filter(mittfilter)

        stat = sok.statistikk()
        objtypenavn = sok.objektTypeDef['navn']
        print('Henter', stat['antall'], 'forekomster av objekttype',
              sok.objektTypeId, objtypenavn)
        lagnavn = 'type' + str(enObjTypeId) + '_' + nvdbapiv3.esriSikkerTekst(
            objtypenavn.lower())

        rec = sok.to_records(vegsegmenter=vegsegmenter, geometri=geometri)

        # Lagringsrutine skilt ut med funksjonen records2gpkg, IKKE TESTET (men bør gå greit)
        if len(rec) > 0:
            records2gpkg(rec, filnavn, lagnavn)
        else:
            print('Ingen forekomster av', objtypenavn, 'for filter',
                  mittfilter)

    if vegnett:
        veg = nvdbapiv3.nvdbVegnett()
        if mittfilter:
            junk = mittfilter.pop('egenskap', None)
            junk = mittfilter.pop('overlapp', None)
            veg.filter(mittfilter)
        print('Henter vegnett')
        rec = veg.to_records()
        mindf = pd.DataFrame(rec)
        mindf['geometry'] = mindf['geometri'].apply(wkt.loads)
        mindf.drop('geometri', 1, inplace=True)
        minGdf = gpd.GeoDataFrame(mindf, geometry='geometry', crs=5973)
        minGdf.to_file(filnavn, layer='vegnett', driver="GPKG")
Example #3
0
def nvdb2gpkg(objekttyper, filnavn='datadump', mittfilter=None):
    """
    Lagrer NVDB vegnett og angitte objekttyper til geopackage

    ARGUMENTS
        objekttyper: Liste med objekttyper du vil lagre 

    KEYWORDS
        mittfilter=None : Dictionary med filter til søkeobjekt i nvdbapiv3.py, for eksempel { 'kommune' : 5001 }
        Samme filter brukes på både vegnett og fagdata

    RETURNS 
        None 
    """

    if not '.gpkg' in filnavn:
        filnavn = filnavn + datetime.today().strftime('%Y-%m-%d') + '.gpkg'

    if not isinstance(objekttyper, list):
        objekttyper = [objekttyper]

    for enObjTypeId in objekttyper:

        enObjTypeId = int(enObjTypeId)

        sok = nvdbapiv3.nvdbFagdata(enObjTypeId)
        if mittfilter:
            sok.filter(mittfilter)

        stat = sok.statistikk()
        objtypenavn = sok.objektTypeDef['navn']
        print('Henter', stat['antall'], 'forekomster av objekttype',
              sok.objektTypeId, objtypenavn)
        lagnavn = 'type' + str(enObjTypeId) + '_' + nvdbapiv3.esriSikkerTekst(
            objtypenavn.lower())

        rec = sok.to_records(vegsegmenter=False, geometri=True)
        if len(rec) > 0:
            mindf = pd.DataFrame(rec)
            # Må trickse litt for å unngå navnekollisjon
            kolonner = list(mindf.columns)
            lowerkolonner = [x.lower() for x in kolonner]
            # Duplicate element indices in list
            # Using list comprehension + list slicing
            # https://www.geeksforgeeks.org/python-duplicate-element-indices-in-list/
            res = [
                idx for idx, val in enumerate(lowerkolonner)
                if val in lowerkolonner[:idx]
            ]
            for ii, dublett in enumerate(res):
                mindf.rename(columns={
                    mindf.columns[dublett]:
                    kolonner[dublett] + '_' + str(ii + 1)
                },
                             inplace=True)

            mindf['geometry'] = mindf['geometri'].apply(wkt.loads)
            minGdf = gpd.GeoDataFrame(mindf, geometry='geometry', crs=5973)
            # må droppe kolonne vegsegmenter hvis du har vegsegmenter=False
            if 'vegsegmenter' in minGdf.columns:
                minGdf.drop('vegsegmenter', 1, inplace=True)

            minGdf.drop('geometri', 1, inplace=True)
            minGdf.to_file(filnavn, layer=lagnavn, driver="GPKG")
        else:
            print('Ingen forekomster av', objtypenavn, 'for filter',
                  mittfilter)

    veg = nvdbapiv3.nvdbVegnett()
    if mittfilter:
        veg.filter(mittfilter)
    print('Henter vegnett')
    rec = veg.to_records()
    mindf = pd.DataFrame(rec)
    mindf['geometry'] = mindf['geometri'].apply(wkt.loads)
    mindf.drop('geometri', 1, inplace=True)
    minGdf = gpd.GeoDataFrame(mindf, geometry='geometry', crs=5973)
    minGdf.to_file(filnavn, layer='vegnett', driver="GPKG")