示例#1
0
文件: test.py 项目: jhaalbu/nvdbskred
def enkeltSkredFagObj():
    skredO = nvdbapi.nvdbFagdata(445)
    skredO.addfilter_geo( { 'vegreferanse' : '1400 fv241 hp1'} )
    #skredO.addfilter_egenskap('2326=4198')
    #ettobjekt = skredO.egenskapverdi()

    return ettobjekt
示例#2
0
def lastned(objtypeId, mappe, v2filter):

    sokv2 = nvdbapi.nvdbFagdata(objtypeId)
    sokv3 = nvdbapiv3.nvdbFagdata(objtypeId)

    # Hvilket miljø bruker vi?
    # sokv2.apiurl = 'https://www.test.vegvesen.no/nvdb/api/v2'
    # sokv3.miljo( 'test')

    Path(mappe).mkdir(parents=True, exist_ok=True)

    sokv2.addfilter_geo(v2filter)

    (allev2, manglerv2) = mengdeuttak(sokv2, antall=1e12)

    vref = v2filter.pop('vegreferanse')
    v3filter = deepcopy(v2filter)
    if vref:
        v3filter['vegsystemreferanse'] = vref

    sokv3.addfilter_geo(v3filter)
    (allev3, manglerv3) = mengdeuttak(sokv3, antall=1e12)

    oo = '_' + str(objtypeId) + '_' + vref

    with open(mappe + 'mangler_geometriv3' + oo + '.json',
              'w',
              encoding='utf-8') as f:
        json.dump(manglerv3, f, ensure_ascii=False, indent=4)

    with open(mappe + 'mengdeuttak_v3' + oo + '.json', 'w',
              encoding='utf-8') as f:
        json.dump(allev3, f, ensure_ascii=False, indent=4)

    with open(mappe + 'mangler_geometriv2' + oo + '.json',
              'w',
              encoding='utf-8') as f:
        json.dump(manglerv2, f, ensure_ascii=False, indent=4)

    with open(mappe + 'mengdeuttak_v2' + oo + '.json', 'w',
              encoding='utf-8') as f:
        json.dump(allev2, f, ensure_ascii=False, indent=4)

    minlogg = sammenlign(allev3, allev2, sokefilter=v3filter)

    print(minlogg)
    return minlogg
示例#3
0
文件: test.py 项目: jhaalbu/nvdbskred
def enkeltSkred():
    #a = nvdbapi.nvdbFagdata(445)
    #a.addfilter_geo( { 'vegreferanse' : 'fv241', 'fylke' : 14} )
    #a.addfilter_egenskap('2326=4198')
    ##skredObj.addfilter_egenskap('2326=4198')
    #stat = a.statistikk()
    #print(stat)
    #b = a.nesteNvdbFagObjekt()
    #print(b.egenskaper())

    n = nvdbapi.nvdbFagdata(445)
    n.addfilter_geo( {'vegreferanse' : '1400 fv241  obj = rstat.json()'})
    n.addfilter_egenskap('2326=4198')
    skred = n.nesteForekomst()
    print(skred)
    print(n.statistikk())
    return 'ok'
示例#4
0
文件: test.py 项目: jhaalbu/nvdbskred
def hentSkred(veg='Fv241', fylke=14):
    skredtypenr = [4198, 4199, 5351, 4200, 4201, 4202, 4203, 13103]
    skredtype = {4198 : 'Stein', 4199: 'Jord/løsmasse', 5351: 'Is/stein', 4200: 'Snø', 4201: 'Is', 4202: 'Flomskred (vann+stein+jord)', 4203: 'Sørpeskred (vann+snø+stein)', 13103: 'Utglidning av veg'}
    liste = []
    skred = nvdbapi.nvdbFagdata(445)
    skred.addfilter_geo( { 'vegreferanse' : veg, 'fylke' : fylke})
#print(skred.egenskaper())
#skred.addfilter_egenskap('2326=4198')
#stat = skred.statistikk()
#liste.append((skredtype[skredtypenr[0]], stat['antall']))
    sNum = 0
    data = []
    for i in skredtypenr:
        #print(i)
        #print(skredtype[i])
        skred.addfilter_egenskap('2326=' + str(skredtypenr[sNum]))
        stat = skred.statistikk()
        data.append([skredtype[i], stat['antall']])
        sNum = sNum + 1
    return data
def hentfelt(veglenke, posisjon):

    # Bug, må ha strekning fra-til, ikke match på punkt:
    delta = 0.0000000001
    if posisjon - delta < 0:
        a = posisjon
        b = posisjon + 2 * delta
    elif posisjon + delta > 1:
        a = posisjon - 2 * delta
        b = posisjon
    else:
        a = posisjon - delta
        b = posisjon + delta

    felt = nvdbapi.nvdbFagdata(616)

    geofilter = {'veglenke': str(a) + '-' + str(b) + '@' + str(veglenke)}
    felt.addfilter_geo(geofilter)
    mittfelt = felt.nesteNvdbFagObjekt()
    if mittfelt:
        data = mittfelt.egenskapverdi('felt', empty='')
    else:
        data = '1#2'
        print("Fant ingen feltstrekning for: " + geofilter['veglenke'])
    # Sjekker om det finnes flere:
    test = felt.nesteNvdbFagObjekt()
    while test:

        blurp = mittfelt.egenskapverdi('felt')
        if blurp == data:
            print('Fant flere feltstrekningobj ' + geofilter['veglenke'])
        else:
            print('Fant flere feltstrekningobj DATA MISMATCH' +
                  geofilter['veglenke'])

        test = felt.nesteNvdbFagObjekt()

    return data
示例#6
0
#tettsted[ tettsted.Areal_km2 > 50].sort_values('Areal_km2', ascending=False )


# Dette er storbyene våre. Hvem er de minste tettstedene? 

# In[25]:

#tettsted.sort_values('Areal_km2' ).head()


# # Les data fra Nasjonal vegdatabank

# In[6]:

turistveger = nvdbapi.nvdbFagdata(777)
turistveger_geojson = nvdb2geojson.fagdata2geojson( turistveger)
turist2 = gpd.GeoDataFrame.from_features( turistveger_geojson['features'])


# # Finn turistveger i tettsteder 
# 
# http://geopandas.org/mergingdata.html , spatial joins. Først må vi sette 
# koordinatsystem. Merk at du bygger koordinatsystem i geopandas med linje kode. 
# http://geopandas.org/projections.html#re-projecting 
# 
# 

# In[8]:

tettsted.crs = {'init': 'epsg:25833'}
    for bom in data:
        #curs.execute( 'INSERT INTO bomstasjoner( geom, id, Navn, anlId, bomId, ekteretning, felt, innkrevingsretning, kompassretn, muligeFelt, status, veg, veglenke, veglenkepos )'
        #                'VALUES( ST_SetSRID(%(geom)s::geometry, %(srid)s), %(id)s, %(Navn)s, %(anlId)s, %(bomId)s, %(ekteretning)s, %(felt), %(innkrevingsretning), %(kompassretn), %(muligeFelt), %(status), %(veg), %(veglenke), %(veglenkepos) )' ,
        #               bom)
        # conn.commit()
        curs.execute(
            'INSERT INTO bomstasjoner( geom, id, navn, anlid, bomid, ekteretning, felt, innkrevingsretning, vegnettretn, metreringretn, kompassretn, muligefelt, status, veg, veglenke, veglenkepos)'
            'VALUES( ST_SetSRID(%(geom)s::geometry, %(srid)s), %(id)s, %(Navn)s, %(anlId)s, %(bomId)s, %(ekteretning)s, %(felt)s, %(innkrevingsretning)s, %(vegnettretn)s, %(metreringretn)s, %(kompassretn)s, %(muligeFelt)s, %(status)s, %(veg)s, %(veglenke)s, %(veglenkepos)s )',
            bom)
        conn.commit()


### Start her!

data = []
bomstasjoner = nvdbapi.nvdbFagdata(45)
# Henter bomstasjoner med gyldige verdier for bomst.id og bompengeanlegg.id
# bomstasjoner.addfilter_egenskap( '9596!=null AND 9595!=null' )

# bomstasjoner.addfilter_egenskap( '9595=15 AND 9596=8')

print(['Filtre: ', bomstasjoner.allfilters()])
bomst = bomstasjoner.nesteNvdbFagObjekt()

while bomst:

    print(bomst.egenskapverdi('Navn bomstasjon'))

    tmp = {'felt': ''}

    tmp['id'] = bomst.id
示例#8
0
def fagdata2geojson(fagdata,
                    maxcount=False,
                    vegsegmenter=True,
                    ignoreregenskaper=False,
                    ignorervegref=False,
                    strictGeometryType=True):
    """Konverterer NVDB fagdata til geojson feature collection NB utm sone 33
    UTM sone 33 (epsg:25833) er ikke standard geojson lenger, men vi angir 
    det likevel i header. 
    
    Args: 
        fagdata : nvdbFagObjekt fra nvdbapi.py (søkeobjekt som henter data fra 
                    NVDB api)
        
    Keywords: 
        maxcount (0) Integer : Barnesikring, default av. Skru på ved å angi 
                    heltall større enn 0. 
        
        vegsegmenter (True) Boolean : Lag et objekt per vegsegment hvis 
                    stedfestet på mer enn ett vegsegment
                    Se forklaring under. 
        
        ignoreegenskaper (False) Boolean : Dropp egenskapsverdier
        
        ignorevegref (False) Boolean : Dropp vegreferanse-detaljer 
        
        strictGeometryType (True) Boolean : Krev at geometritypen er slik som 
                    definert i datakatalogen. Medfører f.eks at vi ignorerer 
                    linjer som har degenerert til punkt (pga kort utstrekning)
        
    Returns: 
        Python Dict geojson feature collections
 
   Eksempel
        f = ndbFagdata(105) # Fartsgrense
        f.addfilter_geo( { 'kommune' : 1601, 'vegreferanse' : 'Ev6' })
        gjson = fagdata2geojson( f) 
     
    
    Mange vegobjekter er stedfestet på mer enn en veglenke/veglenkedel. I NVDB
    API er dette synlig ved at objektet går over mer enn ett vegsegment
    (ved å føye til parameter &inkluder=vegsegmenter i spørringen). Disse 
    objektene vil typisk ha en MULTIPOINT/MULTILINESTRING-geometri, satt sammen av 
    POINT/LINESTRING-verdiene fra alle vegsegmentene. Altså får du en blanding av 
    LINE- og MULTILINE-string i resultatsettet. 
    
    Default (vegsegmenter=True) er at vi oppretter en unik geojson-feature per 
    vegsegment. NVDB ID og egenskapsverdier blir like, og i tillegg numererer 
    vi segmentene og oppgir hvor mange segmenter som inngår i det opprinnelige 
    NVDB-fagobjektet. (egenskapene "vegsegment nr", "antall vegsegment")
    
    Fordeler
        * Unike vegreferanser per geojson-feature(vegnummer, hp og meterverdier)
        * Unike veglenke-ID og veglenkeposisjon per geojson-feature
        * Ingen MULTIPONT/MULTILINESTRING-geometri 
        
    Ulemper
        * Mister informasjon om egengeometri
        
    Alternativt kan man angi nøkkelord vegsegmenter=False. Da får man potensielt
    en multi-geometri. Fordelen er at man får evt egengeometri (der det finnes)
    
    """

    mygeojson = geojsontemplate()

    if isinstance(fagdata, nvdbapi.nvdbFagdata):

        if strictGeometryType:
            geometrityper = fagdata.objektTypeDef['stedfesting']
        else:
            geometrityper = ''

        f*g = fagdata.nesteForekomst()
        count = 0
        stopp = False
        while f*g and not stopp:

            # Sjekker om vi har tomme data (typisk fagdata på historisk vegnett)
            if len(f*g['vegsegmenter']) > 0:
                mygeojson = __addfag2geojson(
                    f*g,
                    mygeojson,
                    vegsegmenter=vegsegmenter,
                    ignoreregenskaper=ignoreregenskaper,
                    ignorervegref=ignorervegref,
                    geometrityper=geometrityper)
            else:
                print('Ignorerer tomt objekt ' + f*g['href'])

            count += 1
            if maxcount and count >= maxcount:
                stopp = True

            f*g = fagdata.nesteForekomst()

    elif isinstance(fagdata, dict) and 'egenskaper' in fagdata.keys():

        mittobj = nvdbapi.nvdbFagdata(fagdata['metadata']['type']['id'])
        if strictGeometryType:
            geometrityper = mittobj.objektTypeDef['stedfesting']
        else:
            geometrityper = ''

        mygeojson = __addfag2geojson(fagdata,
                                     mygeojson,
                                     vegsegmenter=vegsegmenter,
                                     ignoreregenskaper=ignoreregenskaper,
                                     ignorervegref=ignorervegref,
                                     geometrityper=geometrityper)
    else:
        warn("Sorry, gjenkjente ikke dette som NVDB fagdata")
    return mygeojson
示例#9
0
# download the appropriate wheel for your python version and platform
# (python 2.x or 3.x, 32 or 64 bit architecture of your PYTHON INSTALLATION
# (on 64 bit machines you may choose 32 or 64 bit installations of python , 
# so beware))

def reverseShapelyCoords_dropZ(shapelygeom): 
    """
    Reverses the axis order (X,Y => Y,X) and drops the Z coordinate
    from input shapely geometry object
    """
    
    if type(shapelygeom) == 'shapely.geometry.multilinestring.MultiLineString':
        pass


turistveger = nvdbapi.nvdbFagdata(777)
turistveger.respons['srid'] = 4326 # lat/lon coordinates

myGeojson = { "type": "FeatureCollection",
    "features": []
}


turistveg1 = turistveger.nesteNvdbFagObjekt() 


while turistveg1: 
    egenskaper = {  'navn' : turistveg1.egenskapverdi('Navn'), 
                      'linkturistveg' : turistveg1.egenskapverdi('Link turistveg'), 
                    'status' : turistveg1.egenskapverdi('Status')
                }
示例#10
0
def nvdb2kart(nvdbref,
              iface,
              kunfagdata=True,
              kunvegnett=False,
              miljo='prod',
              lagnavn=None,
              **kwargs):
    """
    Legger noe fra NVDB til kartflaten. Dette kan være en ID 
    til nvdb veglenke(r) eller  fagobjekt, eller et søkeobjekt 
    (nvdbFagdata eller nvdbVegnett). Et søkeobjekt vil bli avgrenset
    til QGIS kartflate. (Hvis dette ikke er ønsket - send direkte 
    til funksjonen nvdb2qgis) 
    
    Nøkkelordene kunfagdata, kunvegnett og miljø sendes til funksjonen
    nvdbapi.finnid.
    
    Resten av nøkkeordene sendes til funksjonen 
    """

    # Konverterer string => int
    if isinstance(nvdbref, str):
        try:
            nvdbref = int(nvdbref)
        except ValueError:
            pass



    if (isinstance( nvdbref, nvdbFagdata) or \
                                    isinstance( nvdbref, nvdbVegnett)):

        ext = iface.mapCanvas().extent()

        kartutsnitt = str(ext.xMinimum()) + ',' + \
            str(ext.yMinimum()) + ',' + str(ext.xMaximum()) + \
            ',' + str(ext.yMaximum())
        nvdbref.addfilter_geo({'kartutsnitt': kartutsnitt})

        nvdbsok2qgis(nvdbref, **kwargs)

    elif isinstance(nvdbref, int):

        f*g = finnid(nvdbref,
                     kunfagdata=kunfagdata,
                     kunvegnett=kunvegnett,
                     miljo=miljo)

        if f*g:
            if isinstance(f*g, dict) and 'id' in f*g.keys():
                sokeobj = nvdbFagdata(f*g['metadata']['type']['id'])
                sokeobj.data['objekter'].append(f*g)
                sokeobj.antall = 1

                if not lagnavn:
                    lagnavn = str(f*g['metadata']['type']['id']) + \
                                '_' + str( nvdbref)

            elif isinstance( f*g, list) and len(f*g) > 0 and \
            isinstance( f*g[0], dict) and 'veglenkeid' in f*g[0].keys():

                sokeobj = nvdbVegnett()
                sokeobj.data['objekter'] = f*g
                sokeobj.antall = len(f*g)

                lagnavn = 'veglenke_' + str(nvdbref)

            else:
                print("fant ingen data???", str(nvdbref))
                return

            sokeobj.paginering['dummy'] = True
            sokeobj.paginering['hvilken'] = 0

            # Sender til kartet
            nvdbsok2qgis(sokeobj, lagnavn=lagnavn, **kwargs)

    else:
        print("kjente ikke igjen", nvdbref,
              "som NVDB referanse eller søkeobjekt")