Ejemplo n.º 1
0
def ODLayer():
    arcpy.Delete_management("ODMATRIX")

    arcpy.MakeODCostMatrixLayer_na(Network,"ODMATRIX",Costs,Max_Costs,to_find,cost_attr,"","","","","NO_LINES")
    p = arcpy.na.GetSolverProperties(arcpy.mapping.Layer("ODMATRIX"))
    Restriction_0 = list(p.restrictions) ##activate all restrictions
    p.restrictions = Restriction_0
    if Barriers: arcpy.AddLocations_na("ODMATRIX","Line Barriers",Barriers,"","")

    if "Distance" in Modus:
        fm_A = checkfm(A_Shape,ID_A)
        arcpy.na.AddFieldToAnalysisLayer("ODMATRIX", "Origins","tfrom_park", "Integer")
        if fm_A is None: arcpy.AddLocations_na("ODMATRIX","Origins",A_Shape,"Name "+ID_A+\
        " 0; tfrom_park # 1","","",[["MRH_Wege", "SHAPE"],["MRH_Luecken", "SHAPE"],["Ampeln", "NONE"],["Faehre_NMIV", "NONE"]],"","","","","EXCLUDE")
        else:
            fm_A = fm_A+"; tfrom_park tAb 1"
            arcpy.AddLocations_na("ODMATRIX","Origins",A_Shape,fm_A,"","","","","CLEAR","","","EXCLUDE")

    if "Potential" in Modus:
        arcpy.Delete_management("P_Shape")
        if Filter_P: arcpy.MakeFeatureLayer_management(P_Shape, "P_Shape",Filter_P+">0")
        else: arcpy.MakeFeatureLayer_management(P_Shape, "P_Shape")
        fm_P = checkfm("P_Shape",ID_P)
        if fm_P is None: arcpy.AddLocations_na("ODMATRIX","Destinations","P_Shape","Name "+ID_P+\
        " 0; Attr_Minutes # #","","",[["MRH_Wege", "SHAPE"],["MRH_Luecken", "SHAPE"],["Ampeln", "NONE"],["Faehre_NMIV", "NONE"]],"","","","","EXCLUDE")
        else: arcpy.AddLocations_na("ODMATRIX","Destinations","P_Shape",fm_P,"","","","","CLEAR","","","EXCLUDE")
Ejemplo n.º 2
0
def ODLayer(mod,FC,FC_ID,fieldmap):
    arcpy.AddMessage("> starting with: "+mod[0])
    costattr()
    if mod[0] == "bus": arcpy.MakeFeatureLayer_management(FC, "stops",BahnFeld+" = 0")
    else: arcpy.MakeFeatureLayer_management(FC, "stops",BahnFeld+" > 0")
    if mod[1] == 0: arcpy.AddMessage("> no stops in mode: "+mod[0])

    arcpy.MakeODCostMatrixLayer_na(Network,"ODLayer",Costs,MaxCosts,mod[1],cost_attr,"","","","","NO_LINES")

    if fieldmap == "": arcpy.AddLocations_na("ODLayer","Destinations","stops","Name "+FC_ID+\
    " 0; Attr_Minutes # #","","",[["MRH_Wege_Split", "SHAPE"],["MRH_Luecken", "SHAPE"],["Ampeln", "NONE"],["Faehre_NMIV", "NONE"]],"","","","","EXCLUDE")
    else: arcpy.AddLocations_na("ODLayer","Destinations","stops",fieldmap,"","","","","","","","EXCLUDE")
    arcpy.AddMessage("> "+mod[0]+"stops added \n")
    if Barrieren != "": arcpy.AddLocations_na("ODLayer","Line Barriers",Barrieren)
Ejemplo n.º 3
0
import arcpy
from arcpy import env
from datetime import datetime

start = datetime.now()

arcpy.CheckOutExtension("Network")
arcpy.env.overwriteOutput = True

for i in range(0,115):

    env.workspace = "C:/Accessibility_data/gis_data/add_gtfs_model/gtfs_2018.gdb"
    arcpy.MakeFeatureLayer_management("bldgs_all_centroid", "build_lyr")

    # Process: Make OD Cost Matrix Layer
    arcpy.MakeODCostMatrixLayer_na("gtfs_2017_ND", "OD Cost Matrix" + str(i), "TravelTime_WithTransit", "", "", "", "ALLOW_UTURNS", "", "NO_HIERARCHY", "", "STRAIGHT_LINES", "31/12/1899 08:00:00")

    # Process: Select Layer By Attribute
    arcpy.SelectLayerByAttribute_management("build_lyr", "NEW_SELECTION", "(OBJECTID > " + str(i*200 ) + ") AND (OBJECTID <= " + str((i+1)*200)+")")

    # Process: Add Locations- Origins
    arcpy.AddLocations_na("OD Cost Matrix" + str(i), "Origins", "build_lyr", "Name Name #;TargetDestinationCount TargetDestinationCount #;CurbApproach CurbApproach 0;Cutoff_Length Cutoff_Length #;Cutoff_TravelTime_WithTransit Cutoff_TravelTime_WithTransit #", "5000 Meters", "", "Connectors_Stops2Streets SHAPE;Streets_UseThisOne SHAPE;TransitLines SHAPE;Stops SHAPE;Stops_Snapped2Streets SHAPE; NONE", "MATCH_TO_CLOSEST", "APPEND", "NO_SNAP", "5 Meters", "INCLUDE", "Connectors_Stops2Streets #;Streets_UseThisOne #;TransitLines #;Stops #;Stops_Snapped2Streets #;gtfs_2017_ND_Junctions #")

    # Process: Add Locations- Destinations
    arcpy.AddLocations_na("OD Cost Matrix" + str(i), "Destinations", "bldgs_all_centroid", "Name Name #;CurbApproach CurbApproach 0", "8000 Meters", "", "Connectors_Stops2Streets SHAPE;Streets_UseThisOne SHAPE;TransitLines SHAPE;Stops SHAPE;Stops_Snapped2Streets SHAPE;gtfs_2017_ND_Junctions NONE", "MATCH_TO_CLOSEST", "APPEND", "NO_SNAP", "5 Meters", "INCLUDE", "Connectors_Stops2Streets #;Streets_UseThisOne #;TransitLines #;Stops #;Stops_Snapped2Streets #;gtfs_2017_ND_Junctions #")

    #Omry: Check for add location (override)
    
    # Delete
    arcpy.Delete_management("build_lyr")
    
Ejemplo n.º 4
0
loops = (length / loop[0]) + 1
loops = range(loops)
print "Anzahl loops: " + str(len(loops))

##--Counter destinations raster--#
##Only select 100-meter destinations within certain distance to origins
##Do this every 1.000 origins for performance reasons
ni = 0
ni_counter = 1000 / loop[0]  ##Number of loops per 1000 origins

for i in loops:
    print "start loop " + str(i) + " seconds: " + str(
        int(time.clock() - start_time))
    arcpy.Delete_management("ODMATRIX")
    ODLayer = arcpy.MakeODCostMatrixLayer_na(Network, "ODMATRIX", Kosten,
                                             Max_Kosten[0], "",
                                             [Kosten, "t_miv"], "", "", "", "",
                                             "NO_LINES")

    #--add origins centroids--#
    arcpy.Delete_management("origi")
    arcpy.MakeFeatureLayer_management(
        'R500_start', "origi", "OBJECTID >" + str(i * loop[0]) +
        " and OBJECTID <=" + str((i * loop[0]) + loop[0]))
    field_mappings = arcpy.na.NAClassFieldMappings(
        ODLayer.getOutput(0), "Origins", True,
        arcpy.ListFields("ODMATRIX\Origins"))
    arcpy.AddLocations_na(ODLayer, "Origins", "origi", field_mappings, "", "",
                          "", "", "CLEAR")

    #--add destination centroids--#
    arcpy.Delete_management("desti")
def main(OriginFile):
 
    # Tarkistetaan tarvittavat Lisenssit
    arcpy.CheckOutExtension("Network")

    # ------------------------------------------
    # ArcGIS Serverille kovakoodatut parametrit
    # ------------------------------------------

    #fileNumber = [x for x in range(286,294)]


    #for fileindex in fileNumber:

    ##########################
    #Määritetään tiedostopolut
    ##########################

    Origins = OriginFile   #r"/home/MY_USERNAME/TTM/OD/Subsets/%s_Car_Matrix2015_Origs_KKJ2.shp" % fileindex
    Destinations = r"/home/MY_USERNAME/TTM/OD/Car_Matrix2015_Dest_KKJ2.shp"
    NetworkData = r"/home/MY_USERNAME/TTM/Digiroad/MetropAccess_Digiroad.gdb/MetropAccess_NetworkDataset/MetropAccess_NetworkDataset_ND"
    LiikenneElementit = r"/home/MY_USERNAME/TTM/Digiroad/MetropAccess_Digiroad.gdb/MetropAccess_NetworkDataset/METROPACCESS_DIGIROAD_LIIKENNE_ELEMENTTI"
    origin_fn = os.path.basename(Origins)[:-15]
    TulosNimi = "CarTT_Ruuhka_%s" % origin_fn
    Impedanssi = "Keskpva_aa"
    LaskKohteet = "ALL"
    Pysakointityyppi = ""
    Pysakointikentta = ""
    Kavelynopeus = 70.0
    Grafiikka = "false"

    #Environment määritykset:
    temp = r"/mnt/TTM_Results"


    print("---------------\nProcessing file: %s\n---------------" % os.path.basename(Origins))

    ElemKansio = os.path.dirname(NetworkData)
    OrigKansio = os.path.dirname(Origins)
    DestKansio = os.path.dirname(Destinations)
    arcpy.overwriteOutputs = True

    #Tsekataan onko temp geodatabase vai tavallinen kansio:
    if ".gdb" in temp or ".mdb" in temp:
        gdbCheck = True
        #Etsitään geodatabasen 'juuri'
        try:
            pos = temp.index('.gdb')
        except:
            pos = temp.index('.mdb')
        temp = temp[:pos+4]
    else:
        gdbCheck = False

    #Tsekataan sisältääkö TulosNimi välilyöntejä
    TulosNimi = TulosNimi.replace(" ", "_")

    ##############
    #METODIT
    ##############

    #Suoritusinfot:
    def Aloitus():
        aika = time.asctime()
        teksti = "Aloitus: " + aika
        print(teksti)

    def Valmis():
        aika = time.asctime()
        teksti = "Valmis: " + aika
        print(teksti)

    def msg(Message):
        print(Message)

    def virhe(Virheilmoitus):
        print(Virheilmoitus)
        sys.exit()
 
    def ExDel(haettava):
        if arcpy.Exists(haettava):
            arcpy.Delete_management(haettava)


    msg("------------------------------")
    msg("METROPACCESS-DIGIROAD")
    msg("MetropAccess-tutkimushanke")
    msg("HELSINGIN YLIOPISTO")
    msg("-------------------------------")
    msg("4. Kokonaismatkaketjun laskenta (sis. pysäköinti)")
    msg("-------------------------------")

    time.sleep(2.5)

    ################################################
    #TARKISTUKSET ENNEN LASKENTAA
    ################################################

    Aloitus()
    msg("TARKISTUKSET:")
    ##arcpy.SetProgressor("step", "KOKONAISMATKAKETJUN LASKENTA...Tarkistukset ennen laskentaa...", 0, 100, 5) #Luodaan suoritusinfopalkki

    #Tarkistetaan, että aineisto on joko EurefFinissä tai KKJ:ssa
    Desc = arcpy.Describe(NetworkData)
    NDProjektio = Desc.spatialReference.factoryCode

    msg("Tarkistetaan liikenneverkon projektio.")
    if NDProjektio == 3067 or NDProjektio == 2391 or NDProjektio == 2392 or NDProjektio == 2393 or NDProjektio == 2394 or NDProjektio == 104129:
        True
    else:
        virhe("Tieverkkoaineiston tulee olla projisoituna joko EUREF_FIN_TM35FIN:iin, GCS_EUREF_FIN:iin tai Finland_Zone_1, 2, 3 tai -4:ään (KKJ). Muuta Liikenne_elementti.shp projektio johonkin näistä Project -työkalulla, luo uusi Network Dataset perustuen tähän uuteen projisoituun LiikenneElementti -tiedostoon ja aja työkalu uudelleen.")
        
    #Tarkistetaan pysäköintikentän löytyminen:
    msg("Tarkistetaan pysäköintikentän löytyminen")
    if Pysakointityyppi == 5:
        fieldList = arcpy.ListFields(Destinations, Pysakointikentta)
        fieldCount = len(fieldList)
        if fieldCount == 1:
            teksti = "Käyttäjän määrittelemä pysäköintikenttä!"
            msg(teksti)
        elif Pysakointikentta == "":
            virhe("VIRHE! Pysäköintityypin määrittävää kenttää ei ole määritetty!")
        else:
            virhe("VIRHE! Pysäköintityypin määrittävää kenttää ei löydy taulusta! Tarkista, että pysäköintikenttä on luotu kohdetauluun ja että kirjoitusasu on oikein.")
    if Pysakointikentta == "":
        PysKenttaLog = "NONE"
            
    Valmis()

    #Tarkistetaan mitkä aikasakkolaskennan parametrit löytyvät NetworkDatasetistä:
    msg("Tarkistetaan kustannusparametrit")
    Aloitus()

    desc = arcpy.Describe(NetworkData)
    attributes = desc.attributes
    NDparams = []
    for attribute in attributes:
        NDparams.append(attribute.name)

    Haettava = ["Digiroa_aa", "Kokopva_aa", "Keskpva_aa", "Ruuhka_aa", "Pituus"]
    Nro = 0
    Accumulation = []
    for x in range(5):
        if Haettava[Nro] in NDparams:
            Accumulation.append(Haettava[Nro])
            Nro += 1
        else:
            Nro += 1
    Valmis()

    #Tarkistetaan löytyykö Impedanssi Accumulation taulusta, onko impedanssimuuttuja olemassa:
    msg("Tarkistetaan, että impedanssiatribuutti löytyy Network Datasetistä")
    Aloitus()

    if Impedanssi in NDparams:
        msg("Impedanssi määritetty!")
    else:
        virhe("VIRHE! Määriteltyä impedanssia ei ole määritelty Network Datasettiin. Tarkista, että muuttuja on todella olemassa\nja että Impedanssikentän kirjoitusasu täsmää käytettävän muuttujan kanssa. ")

    NDPath = desc.path
    NDsource = desc.edgeSources[0].name
    LE = os.path.join(NDPath, "%s.shp" % NDsource) #Parsitaan sourcedatan (Liikenne_Elementit) polku ja nimi
    del desc

    desc = arcpy.Describe(LiikenneElementit)
    basename = desc.baseName
    del desc

    if basename != NDsource: #Tarkistetaan onko inputiksi määritelty LiikenneElementti -tiedosto Network Datan todellinen source-layer:
        msg("LiikenneElementti -tiedosto ei ollut Network Datan source-layer. Vaihdettiin LiikenneElementti -tiedosto Network Datan Edge-sourceksi.")
        LiikenneElementit = LE
        
    if not Impedanssi in Accumulation:
        Accumulation.append(Impedanssi)
        msg("Käyttäjän määrittelemä impedanssi lisättiin Accumulation arvoihin!")
        
    #Tarkistetaan laskettavien kohteiden lukumäärä:
    LaskKohteet.replace(" ","")
    if LaskKohteet == "" or LaskKohteet == "ALL" or LaskKohteet == "all" or LaskKohteet == "All":
        LaskKohteet = ""
        LaskLogi = "ALL"
    elif LaskKohteet == "0":
        virhe("Laskettavia kohteita tulee olla vähintään yksi!")
    else:
        LaskKohteet = LaskKohteet
    Valmis()
    ##arcpy.SetProgressorPosition(5)
    msg("----------------------")


    #####################################################
    #***************************************************#
    # LASKENTA                                         *#
    #***************************************************#
    #####################################################

    msg("ALOITETAAN LASKENTA")
    msg("Luodaan tarvittavat attribuutit")
    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Luodaan tarvittavat attribuutit...")
    Aloitus()

    ################################################        
    #Tehdään tiedostoihin tarvittavat attribuutit
    ################################################

    #Origins:
    arcpy.AddField_management(Origins, "NameO", "TEXT")
    arcpy.AddField_management(Origins, "Kavely_O_T", "DOUBLE") #Kävelyaika lähtöpaikasta lähimpään tieverkkoon 
    arcpy.AddField_management(Origins, "Kavely_T_P", "DOUBLE") #Kävelyaika tieverkosta parkkipaikalle 

    #Ajoaika kentät:
    if "Digiroa_aa" in Accumulation:
        arcpy.AddField_management(Origins, "Digiroa_aa", "DOUBLE")
    if "Kokopva_aa" in Accumulation:
        arcpy.AddField_management(Origins, "Kokopva_aa", "DOUBLE")
    if "Keskpva_aa" in Accumulation:
        arcpy.AddField_management(Origins, "Keskpva_aa", "DOUBLE")
    if "Ruuhka_aa" in Accumulation:
        arcpy.AddField_management(Origins, "Ruuhka_aa", "DOUBLE")
    if Impedanssi in Accumulation:                                  #Tehdään jos käyttäjä on haluaa käyttää jotain omaa impedanssiaan
        arcpy.AddField_management(Origins, Impedanssi, "DOUBLE")

    if "Pituus" in Accumulation:
        arcpy.AddField_management(Origins, "KavelMatkO", "DOUBLE") #Matka lähtöpaikasta parkkipaikalle kaupungin alueella/kaupungin ulkopuolella
        arcpy.AddField_management(Origins, "KavelDistO", "DOUBLE") #Kävelymatka lähtöpaikasta lähimpään tieverkkopisteeseen

    #Destinations:
    ##arcpy.AddField_management(Destinations, "NameD", "TEXT")
    ##arcpy.AddField_management(Destinations, "Parkkiaika", "DOUBLE") #Parkkipaikan etsintään kuluva aika 
    ##arcpy.AddField_management(Destinations, "Kavely_P_T", "DOUBLE") #Kävelyaika parkkipaikalta lähimpään tieverkkoon 
    ##arcpy.AddField_management(Destinations, "Kavely_T_D", "DOUBLE") #Kävelyaika lähimmästä tieverkkopisteestä kohteeseen 
    ##
    ##if "Pituus" in Accumulation:
    ##    arcpy.AddField_management(Destinations, "KavelMatkD", "DOUBLE") #Kävelymatka parkkipaikalta lähimpään tieverkkopisteeseen
    ##    arcpy.AddField_management(Destinations, "KavelDistD", "DOUBLE") #Kävelymatka lähimmästä tieverkkopisteestä kohteeseen kantakaupungin alueella/kaupungin ulkopuolella

    Valmis()
    ##arcpy.SetProgressorPosition(10)
    msg("----------------------")

    #Tehdään id-kentät
    msg("Luodaan ID-kentät")
    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Luodaan ID-kentät...")
    Aloitus()

    #Rivi_id ei täsmää geodatabasessa ja shapefileessä!! Tsekataan onko tiedostot mdb:ssä tai gdb:ssä
    if ".mdb" in Origins or ".gdb" in Origins:
        OrigNameID = "'O' + str(!OBJECTID!)"
    else:
        OrigNameID = "'O' + str(!FID!)"

    if ".mdb" in Destinations or ".gdb" in Destinations:
        DestNameID = "'D' + str(!OBJECTID!)"
    else:
        DestNameID = "'D' + str(!FID!)"

    arcpy.CalculateField_management(Origins, "NameO", OrigNameID, "PYTHON", "")
    ##arcpy.CalculateField_management(Destinations, "NameD", DestNameID, "PYTHON", "")

    Valmis()
    ##arcpy.SetProgressorPosition(15)
    msg("----------------------")

    ###############################################
    #Lasketaan pisteiden etäisyydet tieverkostosta
    ###############################################

    msg("Lasketaan kävelyaika ja matka tieverkostosta")
    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Lasketaan kävelyaika ja matka tieverkostosta...")
    Aloitus()

    arcpy.Near_analysis(Origins, LiikenneElementit, "3000 Meters", "NO_LOCATION", "NO_ANGLE")
    ##arcpy.Near_analysis(Destinations, LiikenneElementit, "3000 Meters", "NO_LOCATION", "NO_ANGLE")

    #Lasketaan kävelyaika ja matka tieverkostosta:
    OrigReader = arcpy.UpdateCursor(Origins)
    ##DestReader = arcpy.UpdateCursor(Destinations)

    for row in OrigReader:
        row.Kavely_O_T = row.NEAR_DIST / Kavelynopeus
        row.KavelDistO = row.NEAR_DIST
        OrigReader.updateRow(row)
        del row

    ##for row in DestReader:
    ##    row.Kavely_T_D = row.NEAR_DIST / Kavelynopeus
    ##    row.KavelDistD = row.NEAR_DIST
    ##    DestReader.updateRow(row)
    ##    del row

    del OrigReader
    ##del DestReader

    Valmis()
    ##arcpy.SetProgressorPosition(20)
    msg("----------------------")

    ####################################################################################
    #Lasketaan parkkipaikan etsintään menevä aika perustuen käyttäjän parametreihin
    ####################################################################################

    # Pysäköintityypit - etsintäaika (minuuteissa):
    # 0: Ei oteta huomioon 
    # 1: Keskiarvo - 0.42 (oletus)
    # 2: Kadunvarsipaikka - 0.73
    # 3: Pysäköintitalo - 0.22
    # 4: Erillisalueet - 0.16
    # 5: Pysäköintityyppi löytyy käyttäjän määrittämästä kentästä
    # Pysakointikentta: <String> - Käyttäjän määrittämä kenttä, josta löytyy pysäköintityyppi
    #------------------------------------------------------------------------------------------

    msg("Lasketaan pysäköintipaikan etsintään kuluva aika")
    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Lasketaan pysäköintipaikan etsintään kuluva aika...")
    Aloitus()

    if Pysakointityyppi == 0:
        arcpy.CalculateField_management(Destinations, "Parkkiaika", "0 ", "PYTHON")
    elif Pysakointityyppi == 1:
        arcpy.CalculateField_management(Destinations, "Parkkiaika", "0.42 ", "PYTHON")

    elif Pysakointityyppi == 2:
        arcpy.CalculateField_management(Destinations, "Parkkiaika", "0.73 ", "PYTHON")

    elif Pysakointityyppi == 3:
        arcpy.CalculateField_management(Destinations, "Parkkiaika", "0.22 ", "PYTHON")

    elif Pysakointityyppi == 4:
        arcpy.CalculateField_management(Destinations, "Parkkiaika", "0.16 ", "PYTHON")

    elif Pysakointityyppi == 5: #Käyttäjä määritellyt pysäköintityypin Kohdepiste-tiedostoon
        DestReader = arcpy.UpdateCursor(Destinations)
        for row in DestReader:
            if row.getValue(Pysakointikentta) == 0:
                row.Parkkiaika = 0
            elif row.getValue(Pysakointikentta) == 1:
                row.Parkkiaika = 0.42
            elif row.getValue(Pysakointikentta) == 2:
                row.Parkkiaika = 0.73
            elif row.getValue(Pysakointikentta) == 3:
                row.Parkkiaika = 0.22
            elif row.getValue(Pysakointikentta) == 4:
                row.Parkkiaika = 0.16
            else:
                row.Parkkiaika = 0
                msg("Kohteelle asetettu pysäköintityypin arvo on sallittujen arvojen (0-4) ulkopuolella! Kohteen pysäköintityyppiä ei oteta huomioon.")
            DestReader.updateRow(row)
            del row
        del DestReader

    Valmis()
    ##arcpy.SetProgressorPosition(25)
    msg("----------------------")

    #######################################################
    #Kantakaupunki polygonin luominen laskentaa varten:
    #######################################################

    msg("Luodaan kantakaupunkipolygoni")
    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Luodaan kantakaupunkipolygoni...")
    Aloitus()


    env.workspace = temp

    coordList = [[387678.024778,6675360.99039],[387891.53396,6670403.35286],[383453.380944,6670212.21613],[383239.871737,6675169.85373],[387678.024778,6675360.99039]] #Koordinaatit ovat EUREF_FIN_TM35FIN:issä

    point = arcpy.Point()
    array = arcpy.Array()

    #Lisätään koordinaatit Arrayhin:
    for coordPair in coordList:
        point.X = coordPair[0]
        point.Y = coordPair[1]
        array.add(point)

    Kantakaupunki = arcpy.Polygon(array)

    #Määritetään Spatial Reference:
    sr = arcpy.SpatialReference()
    sr.factoryCode = 3067 #EUREF_FIN_TM35FIN
    sr.create()

    #Luodaan kantakaupunki tiedosto:
    if gdbCheck == True:
        Kantis = os.path.join(temp,"Kantakaupunki")
    else:
        Kantis = os.path.join(temp,"Kantakaupunki.shp")
        
    ExDel(Kantis)
    arcpy.Select_analysis(Kantakaupunki, Kantis)

    #Määritetään kantakaupungille projektio:
    arcpy.DefineProjection_management(Kantis, sr)

    msg("Luotiin kantakaupunki")
    Valmis()
    ##arcpy.SetProgressorPosition(30)
    msg("----------------------")

    ###################################################
    #MÄÄRITETÄÄN TIEDOSTOT SAMAAN KOORDINAATISTOON
    ###################################################

    msg("Määritetään tiedostot samaan koordinaatistoon")
    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Määritetään tiedostot samaan koordinaatistoon...")
    Aloitus()

    #Destinations:
    DDesc = arcpy.Describe(Destinations)
    DestProjektio = DDesc.spatialReference.Name
    DFactCode = DDesc.spatialReference.factoryCode
    DProj = DestProjektio[:8]

    if gdbCheck == True:
        KohdePath = os.path.join(temp, "DestinationsProj")
        LahtoPath = os.path.join(temp, "OriginsProj")
        KantisPath = os.path.join(temp, "KantisProj")

    else:
        KohdePath = os.path.join(temp, "DestinationsProj.shp")
        LahtoPath = os.path.join(temp, "OriginsProj.shp")
        KantisPath = os.path.join(temp, "KantisProj.shp")

    ExDel(KohdePath)
    ExDel(LahtoPath)
    ExDel(KantisPath)

    #Origins:
    ODesc = arcpy.Describe(Origins)
    OrigProjektio = ODesc.spatialReference.Name
    OFactCode = ODesc.spatialReference.factoryCode
    OProj = OrigProjektio[:8]

    #Luodaan spatial reference perustuen NetworkDatan SR:een:
    del sr
    sr = arcpy.SpatialReference()
    if NDProjektio == 3067: #EurefFin
        sr.factoryCode = 3067
        sr.create()
    elif NDProjektio == 104129: #GCS_EurefFIN
        sr.factoryCode = 104129
        sr.create()
    elif NDProjektio == 2391: #KKJ1
        sr.factoryCode = 2391
        sr.create()
    elif NDProjektio == 2392: #KKJ2
        sr.factoryCode = 2392
        sr.create()
    elif NDProjektio == 2393: #KKJ3
        sr.factoryCode = 2393
        sr.create()
    elif NDProjektio == 2394: #KKJ4
        sr.factoryCode = 2394
        sr.create()

    #Määritetään Kohteille ja Lähtöpaikoille oikea projektio, jos NetworkData on EUREF_FIN_TM35FIN:issä tai GCS_EUREF_FIN:issä::
    if NDProjektio == 3067 or NDProjektio == 104129:
        if NDProjektio == 104129:
            arcpy.Project_management(Kantis, KantisPath, sr, "") #Määritetään kantakaupunki samaan koordinaatistoon
            Kantakaupunki = KantisPath

    #Destinations:
        if NDProjektio != DFactCode: #Jos Network Data ja Destinationit ovat eri koordinaatistossa:
            if DFactCode >= 2391 and DFactCode <= 2394:
                Dtransform_method = "KKJ_To_EUREF_FIN"
            elif DFactCode == 3067:
                Dtransform_method = ""
            elif DProj == "WGS_1984" or DFactCode == 4326: #Projected WGS_1984 tai GCS_WGS_1984
                Dtransform_method = "EUREF_FIN_To_WGS_1984"
            elif DProj == "ETRS_198":
                Dtransform_method = "EUREF_FIN_To_ETRS_1989"
            else:
                virhe("Kohdepisteet tulee olla projisoituna johonkin seuraavista koordinaatistoista:")
                virhe("KKJ, EUREF_FIN, WGS_1984, ETRS_1989")
                   
            arcpy.Project_management(Destinations, KohdePath, sr, Dtransform_method) #Määritetään Destinationit samaan koordinaatistoon
            Destinations = KohdePath
            msg("Kohdepaikkojen projektio vaihdettiin samaksi kuin Network Datalla. Luotiin kopio tiedostosta.")

    #Origins:
        if NDProjektio != OFactCode: #Jos Network Data ja Originit ovat eri koordinaatistossa:
            if OFactCode >= 2391 and OFactCode <= 2394:
                Otransform_method = "KKJ_To_EUREF_FIN"
            elif OFactCode == 3067:
                Otransform_method = ""
            elif OProj == "WGS_1984" or OFactCode == 4326: #Projected WGS_1984 tai GCS_WGS_1984
                Otransform_method = "EUREF_FIN_To_WGS_1984"
            elif OProj == "ETRS_198":
                Otransform_method = "EUREF_FIN_To_ETRS_1989"
            else:
                virhe("Lähtöpisteet tulee olla projisoituna johonkin seuraavista koordinaatistoista:")
                virhe("KKJ, EUREF_FIN, WGS_1984, ETRS_1989")
            
            arcpy.Project_management(Origins, LahtoPath, sr, Otransform_method) #Määritetään Destinationit samaan koordinaatistoon
            Origins = LahtoPath
            msg("Lähtöpaikkojen projektio vaihdettiin samaksi kuin Network Datalla. Luotiin kopio tiedostosta.")

    #Määritetään Kohteille ja Lähtöpaikoille oikea projektio, jos NetworkData on KKJ:ssa:
    elif NDProjektio == 2391 or NDProjektio == 2392 or NDProjektio == 2393 or NDProjektio == 2394:
        arcpy.Project_management(Kantis, KantisPath, sr, "KKJ_To_EUREF_FIN") #Määritetään kantakaupunki samaan koordinaatistoon
        Kantakaupunki = KantisPath
        
        if NDProjektio != DFactCode: #Jos NetworkData ja kohdepisteet ovat eri KKJ:ssa projisoidaan ne samaan.
            if DFactCode >= 2391 and DFactCode <= 2394:
                Dtransform_method = ""
            elif DProj == "WGS_1984" or DFactCode == 4326: #Projected WGS_1984 tai GCS_WGS_1984
                Dtransform_method = "KKJ_To_WGS_1984_2_JHS153"
            elif DProj == "ETRS_198":
                Dtransform_method = "KKJ_To_ETRS_1989_2"
            else:
                virhe("Kohdepisteet tulee olla projisoituna johonkin seuraavista koordinaatistoista:")
                virhe("KKJ, EUREF_FIN, WGS_1984, ETRS_1989")
            
            arcpy.Project_management(Destinations, KohdePath, sr, Dtransform_method) #Määritetään Destinationit samaan koordinaatistoon
            Destinations = KohdePath
            msg("Kohdepaikkojen projektio vaihdettiin samaksi kuin Network Datalla. Luotiin kopio tiedostosta.")

        if NDProjektio != OFactCode: #Jos NetworkData ja kohdepisteet ovat eri KKJ:ssa projisoidaan ne samaan.
            if OFactCode >= 2391 and OFactCode <= 2394:
                Otransform_method = ""
            elif OProj == "WGS_1984" or OFactCode == 4326: #Projected WGS_1984 tai GCS_WGS_1984
                Otransform_method = "KKJ_To_WGS_1984_2_JHS153"
            elif OProj == "ETRS_198":
                Otransform_method = "KKJ_To_ETRS_1989_2"
            else:
                virhe("Lähtöpisteet tulee olla projisoituna johonkin seuraavista koordinaatistoista:")
                virhe("KKJ, EUREF_FIN, WGS_1984, ETRS_1989")

            arcpy.Project_management(Origins, LahtoPath, sr, Otransform_method) #Määritetään Destinationit samaan koordinaatistoon
            Origins = LahtoPath
            msg("Lähtöpaikkojen projektio vaihdettiin samaksi kuin Network Datalla. Luotiin kopio tiedostosta.")

    Valmis()
    ##arcpy.SetProgressorPosition(35)
    msg("----------------------")

    ##################################
    #LASKETAAN KÄVELYYN KULUVA AIKA
    ##################################
        
    #Tehdään Feature Layerit spatiaalista valintaa varten:
    Orig_lyr = "Orig_lyr"
    Dest_lyr = "Dest_lyr"
    OrigPath = Orig_lyr + ".lyr"
    DestPath = Dest_lyr + ".lyr"

    env.workspace = OrigKansio


    ExDel(Orig_lyr)   #Varmistetaan ettei FeatureLayeria ole jo olemassa

    env.workspace = DestKansio

    ExDel(Dest_lyr)   #Varmistetaan ettei FeatureLayeria ole jo olemassa
        
    arcpy.MakeFeatureLayer_management(Origins, Orig_lyr, "", OrigKansio)
    arcpy.MakeFeatureLayer_management(Destinations, Dest_lyr, "", DestKansio)

    #Valitaan kohteet, jotka ovat kantakaupungin sisällä:
    arcpy.SelectLayerByLocation_management(Orig_lyr, "INTERSECT", Kantakaupunki, "", "NEW_SELECTION")
    ##arcpy.SelectLayerByLocation_management(Dest_lyr, "INTERSECT", Kantakaupunki, "", "NEW_SELECTION")

    #Lasketaan aika ja matka lähtöpaikasta parkkipaikalle/parkkipaikalta kohteeseen kantakaupungin alueella:
    #Kantakaupungissa matka autolle on 180 metriä

    msg("Lasketaan aika ja matka lähtöpaikasta parkkipaikalle/parkkipaikalta kohteeseen kantakaupungin alueella")
    ##arcpy.ResetProgressor()
    ##arcpy.SetProgressor("step", "KOKONAISMATKAKETJUN LASKENTA...Lasketaan aika ja matka lähtöpaikasta parkkipaikalle/parkkipaikalta kohteeseen kantakaupungin alueella...", 0, 100, 5)
    ##arcpy.SetProgressorPosition(40)
    Aloitus()

    # Calculate walking times with Field Calculator
    expression = "180.0 / %s" % Kavelynopeus
    arcpy.CalculateField_management(Orig_lyr, "Kavely_T_P", expression, "PYTHON", "")
    expression2 = "180.0"
    arcpy.CalculateField_management(Orig_lyr, "KavelMatkO", expression2, "PYTHON", "")

    ##OrigReader = arcpy.UpdateCursor(Orig_lyr)
    ##DestReader = arcpy.UpdateCursor(Dest_lyr)

    ##for row in OrigReader:
    ##    row.Kavely_T_P = 180.0 / Kavelynopeus
    ##    row.KavelMatkO = 180.0
    ##    OrigReader.updateRow(row)
    ##    del row

    ##for row in DestReader:
    ##    row.Kavely_P_T = 180.0 / Kavelynopeus
    ##    row.KavelMatkD = 180.0
    ##    DestReader.updateRow(row)
    ##    del row

    ##del OrigReader
    ##del DestReader

    Valmis()
    ##arcpy.SetProgressorPosition(40)
    msg("----------------------")

    #Vaihdetaan valinta kantakaupungin ulkopuolisille alueille:
    arcpy.SelectLayerByAttribute_management(Orig_lyr, "SWITCH_SELECTION", "")
    ##arcpy.SelectLayerByAttribute_management(Dest_lyr, "SWITCH_SELECTION", "")

    #Lasketaan aika ja matka lähtöpaikasta parkkipaikalle/parkkipaikalta kohteeseen kantakaupungin ulkopuolella:
    #Kantakaupungin ulkopuolella matka autolle on 135 metriä

    msg("Lasketaan aika ja matka lähtöpaikasta parkkipaikalle/parkkipaikalta kohteeseen kantakaupungin ulkopuolella")
    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Lasketaan aika ja matka lähtöpaikasta parkkipaikalle/parkkipaikalta kohteeseen kantakaupungin ulkopuolella...")
    Aloitus()

    # Calculate walking times with Field Calculator
    expression = "135.0 / %s" % Kavelynopeus
    arcpy.CalculateField_management(Orig_lyr, "Kavely_T_P", expression, "PYTHON", "")
    expression2 = "135.0"
    arcpy.CalculateField_management(Orig_lyr, "KavelMatkO", expression2, "PYTHON", "")


    ##OrigReader = arcpy.UpdateCursor(Orig_lyr)
    ##DestReader = arcpy.UpdateCursor(Dest_lyr)

    ##for row in OrigReader:
    ##    row.Kavely_T_P = 135.0 / Kavelynopeus
    ##    row.KavelMatkO = 135.0
    ##    OrigReader.updateRow(row)
    ##    del row

    ##for row in DestReader:
    ##    row.Kavely_P_T = 135.0 / Kavelynopeus
    ##    row.KavelMatkD = 135.0
    ##    DestReader.updateRow(row)
    ##    del row

    ##del OrigReader
    ##del DestReader

    #Poistetaan valinnat:
    arcpy.SelectLayerByAttribute_management(Orig_lyr, "CLEAR_SELECTION", "")
    ##arcpy.SelectLayerByAttribute_management(Dest_lyr, "CLEAR_SELECTION", "")


    #####################################
    #REITITYS: OD-COST MATRIX LASKENTA
    #####################################

    #Tarkistetaan onko aiempia OD-Cost-Matrixeja ja luodaan uniikki nimi:
    env.workspace = temp
    ODnimi = "Kokonaismatkaketju_ODC_MATRIX"
    ODPath = ODnimi + ".lyr"

    ExDel(ODnimi)
        
    Valmis()
    ##arcpy.SetProgressorPosition(45)
    msg("----------------------")

    #Tehdään OD Cost Matrix Layer:
    msg("Tehdään OD Cost Matrix Layer")
    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Tehdään OD-Cost-Matrix Layer...")
    Aloitus()

    if Grafiikka == "true" or "True":
        GrafOut = "STRAIGHT_LINES"
    else:
        GrafOut = "NO_LINES"

    if "Hierarkia" in NDparams:
        Hierarkia = "USE_HIERARCHY"
    else:
        Hierarkia = "NO_HIERARCHY"

    arcpy.MakeODCostMatrixLayer_na(NetworkData, ODnimi, Impedanssi, "", LaskKohteet, Accumulation, "ALLOW_DEAD_ENDS_ONLY", "", Hierarkia, "", GrafOut)

    #Lisätään OD cost matrix Locationit ja määritetään parametrit:
    msg("Lisätään OD cost matrix Locationit")
    Aloitus()

    Lahtopaikat = Orig_lyr
    Kohdepaikat = Dest_lyr

    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Lisätään OD-cost-matrix Lähtöpaikat...Tässä menee hetki...")                                                                            
    arcpy.AddLocations_na(ODnimi, "Origins", Lahtopaikat, "Name NameO #", "5000 Meters", "", "", "MATCH_TO_CLOSEST", "APPEND", "NO_SNAP", "", "EXCLUDE", "")
    ##arcpy.SetProgressorPosition(55)
    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Lisätään OD-cost-matrix Kohdepaikat...Tässä menee hetki...") 
    arcpy.AddLocations_na(ODnimi, "Destinations", Kohdepaikat, "Name NameD #", "5000 Meters", "", "", "MATCH_TO_CLOSEST", "APPEND", "NO_SNAP", "", "EXCLUDE", "")

    ##arcpy.SetProgressorPosition(65)
    Valmis()
    msg("----------------------")

    #Suoritetaan OD cost matrix laskenta:
    msg("Suoritetaan OD-cost-matrix laskenta")
    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Suoritetaan OD-cost-matrix laskenta...") 
    Aloitus()

    arcpy.Solve_na(ODnimi, "SKIP", "TERMINATE")
    Valmis()
    ##arcpy.SetProgressorPosition(70)
    msg("----------------------")

    ################################################################################
    #JOINATAAN KOKONAISMATKOIHIN TIEDOT KOHDE/LÄHTÖPISTEISTÄ (kävelyyn kuluva aika)
    ################################################################################

    #Valitaan muokattavaksi OD C M:n Lines layer:
    arcpy.SelectData_management(ODnimi, "Lines")
    Lines = ODnimi + "/" + "Lines"

    #Lisätään Lines_lyr:iin tarvittavat kentät Joinin mahdollistamiseksi:
    arcpy.AddFieldToAnalysisLayer_na(ODnimi, "Lines", "LahtoNimi", "TEXT")
    arcpy.AddFieldToAnalysisLayer_na(ODnimi, "Lines", "KohdeNimi", "TEXT")

    #Muodostetaan Joinin id-kentät:
    arcpy.CalculateField_management(Lines, "LahtoNimi", "!Name!.split(\" -\")[0]", "PYTHON_9.3")
    arcpy.CalculateField_management(Lines, "KohdeNimi", "!Name!.split(\"- \")[1]", "PYTHON_9.3")

    #Eksportataan Line-feature shapeksi, jotta Join saadaan toimimaan:
    if gdbCheck == True:

        #Geodatabasessa tiedostonimessä ei saa olla tiedostomuodon päätettä (.shp)
        if ".shp" in TulosNimi:
            OutLineNimi = TulosNimi[:-4] 
        else:
            OutLineNimi = TulosNimi
    else:
        if not ".shp" in TulosNimi:
            OutLineNimi = TulosNimi + ".shp"
        else:
            OutLineNimi = TulosNimi
            
    env.workspace = temp
    nameCheck = os.path.join(temp, OutLineNimi)

    if arcpy.Exists(nameCheck):
        unique = arcpy.CreateUniqueName(nameCheck)
        OutLines = unique
        Outnimi = string.split(unique, ".")[0]
        LogName = Outnimi
        
    else:
        OutLines = nameCheck
        Outnimi = nameCheck

    # Save Lines to disk
    msg("----------------------")
    Aloitus()
    msg("Save preliminary results to disk")
    arcpy.Select_analysis(Lines, OutLines)
    Valmis()
    msg("----------------------")

    #Poistetaan väliaikaistiedostot:
    env.workspace = temp
    ExDel(KohdePath)
    ExDel(LahtoPath)
    ExDel(KantisPath)
    ExDel(Kantis)

    # Return filepath to Shapefile
    return [OutLines, Origins, Destinations]
Ejemplo n.º 6
0
    Datenbank = "C:" + f[0] + "Diss_2019.h5"
    if MIV is False: Group_Erg = "Potenzial_NMIV"
    else: Group_Erg = "Potenzial_MIV"
    ##############################

    for Bezug in Bezuege:

        print "--Beginne mit der Berechnung fuer: " + Bezug[2] + "--"
        if MIV == False: Tabelle_E = "E_Potenzial_NMIV" + Bezug[2]
        else: Tabelle_E = "E_Potenzial_MIV" + Bezug[2]

        #--OD-Layer erstellen--#
        arcpy.Delete_management("ODMATRIX")
        if MIV == True:
            ODLayer = arcpy.MakeODCostMatrixLayer_na(Network, "ODMATRIX",
                                                     Kosten, Max_Kosten, "",
                                                     [Kosten, "Meter"], "", "",
                                                     "", "", "NO_LINES")
        else:
            ODLayer = arcpy.MakeODCostMatrixLayer_na(
                Network, "ODMATRIX", Kosten, Max_Kosten, "",
                [Kosten, "tFuss", "Meter"], "", "", "", "", "NO_LINES")
        r = []
        desc = arcpy.Describe(Network)
        attributes = desc.attributes
        for i in attributes:
            if i.usageType == 'Restriction':
                r.append(i.name)
        o = arcpy.mapping.Layer("ODMATRIX")
        p = arcpy.na.GetSolverProperties(o)
        p.restrictions = r
Ejemplo n.º 7
0
        "Network Analyst Extension license is not available.")

# Set local variables

#destinationsList = [os.path.join(inter_dir,"stops79_EqDmode0.shp"),os.path.join(inter_dir,"stops79_EqDmode1.shp"),os.path.join(inter_dir,"stops79_EqDmode2.shp")]

# Delete Duplicates from PCCF
#arcpy.DeleteIdentical_management(origins, "field6;field7" , "", "0")

od = 0
for destinations in allstopsList:
    if arcpy.management.GetCount(destinations)[0] != "0":
        outlayer800 = "outlayer800_" + str(od)
        output_layer_file = os.path.join(inter_dir, outlayer800 + ".lyrx")
        # Create a new OD Cost matrix layer. * Maximum walking distance to a bus stop is 800m.
        result_object = arcpy.MakeODCostMatrixLayer_na(network, outlayer800,
                                                       "Length", "800", 1)
        # Get the layer object from the result object.
        outlayer800 = result_object.getOutput(0)
        arcpy.AddLocations_na(outlayer800, "origins", origins, "",
                              '800 Meters')
        arcpy.AddLocations_na(outlayer800, "destinations", destinations, "",
                              "800 Meters")
        # Solve the OD cost matrix layer
        arcpy.Solve_na(outlayer800)
        print('ODMatrix is solved for mode' + str(od))
        arcpy.SaveToLayerFile_management(outlayer800, output_layer_file,
                                         "RELATIVE")
        # Extract OD Lines layer
        linesSublayer = arcpy.mapping.ListLayers(outlayer800, "Lines")[0]
        arcpy.CopyFeatures_management(linesSublayer,
                                      os.path.join(gdb, 'odLines_' + str(od)))
Ejemplo n.º 8
0
script_start = time.time()

env.workspace = r"E:\jeff\food\transit_may.gdb"
env.overwriteOutput = True
arcpy.CheckOutExtension("Network")
network = r"E:\jeff\food\transit_may.gdb\transit_may\transit_may_ND"

origins = r"E:\jeff\RealTime\temp.gdb\Origin1"
destinations = r"E:\Jeff\tor\points_for_street_dest_1.shp"
out_folder = r"E:\Jeff\tor"
# time to run the calc at
what_time = datetime.datetime(2016, 5, 25, 5, 0, 0)  # May 25, 2016

#Create OD Matrix for the time that is next in the time step
arcpy.MakeODCostMatrixLayer_na(network, 'OD Cost Matrix',
                               'TravelTime_WithTransit', 99999, '#', '#',
                               'ALLOW_UTURNS', '#', 'NO_HIERARCHY', '#',
                               'STRAIGHT_LINES', what_time)

#Add origin points
arcpy.AddLocations_na(
    'OD Cost Matrix', 'Origins', origins, 'Name DAuid #', '5000 Meters', '#',
    'Connectors_Stops2Streets NONE;Streets_UseThisOne SHAPE;TransitLines NONE;Stops NONE;Stops_Snapped2Streets NONE;GTFS_FD_ND_Junctions NONE',
    'MATCH_TO_CLOSEST', 'APPEND', 'SNAP', '0 Meters', 'EXCLUDE',
    'Connectors_Stops2Streets #;Streets_UseThisOne #;TransitLines #;Stops #;Stops_Snapped2Streets #;GTFS_FD_ND_Junctions #'
)

#Add destination points
arcpy.AddLocations_na(
    'OD Cost Matrix', 'Destinations', destinations, 'Name GEO_ID #',
    '5000 Meters', '#',
    'Connectors_Stops2Streets NONE;Streets_UseThisOne SHAPE;TransitLines NONE;Stops NONE;Stops_Snapped2Streets NONE;GTFS_FD_ND_Junctions NONE',
arcpy.SetProgressorLabel(
    "KOKONAISMATKAKETJUN LASKENTA...Tehdään OD-Cost-Matrix Layer...")
Aloitus()

if Grafiikka == "true" or "True":
    GrafOut = "STRAIGHT_LINES"
else:
    GrafOut = "NO_LINES"

if "Hierarkia" in NDparams:
    Hierarkia = "USE_HIERARCHY"
else:
    Hierarkia = "NO_HIERARCHY"

arcpy.MakeODCostMatrixLayer_na(NetworkData, ODnimi, Impedanssi, "",
                               LaskKohteet, Accumulation,
                               "ALLOW_DEAD_ENDS_ONLY", "", Hierarkia, "",
                               GrafOut)

#Lisätään OD cost matrix Locationit ja määritetään parametrit:
msg("Lisätään OD cost matrix Locationit")
Aloitus()

Lahtopaikat = Orig_lyr
Kohdepaikat = Dest_lyr

arcpy.SetProgressorLabel(
    "KOKONAISMATKAKETJUN LASKENTA...Lisätään OD-cost-matrix Lähtöpaikat...Tässä menee hetki..."
)
arcpy.AddLocations_na(ODnimi, "Origins", Lahtopaikat, "Name NameO #",
                      "5000 Meters", "", "", "MATCH_TO_CLOSEST", "APPEND",
                      "NO_SNAP", "", "EXCLUDE", "")
def network_analysis(gdb_path=working_gdb_path,
                     destination='destination_grocery_super',
                     destination_field='Establishm',
                     origin='origin_naTransitCentroids',
                     origin_field='node_id',
                     mode='transit',
                     cutoff=30,
                     start='8:00:00',
                     ampm='AM',
                     date='6/1/2015',
                     step_amount=1,
                     minutes_to_step=30):
    import arcpy

    # check for na extension
    if arcpy.CheckExtension("Network") == "Available":
        arcpy.CheckOutExtension("Network")
        print "checked out Network Analyst license..."
    else:
        return "Network Analyst license is unavailable, ask Ann ^_^"

    # create list of times

    start_times = [
        '{0}{1}'.format(start[:-5],
                        str(x).zfill(2)) for x in xrange(minutes_to_step)
    ]

    for time in start_times:
        time_to_eval = '{0} {1}{2} {3}'.format(date, time, start[-3:], ampm)
        print "Evaluating {0}".format(time_to_eval)
        print "Creating OD Cost Matrix Layer..."

        outNALayer = arcpy.MakeODCostMatrixLayer_na(
            in_network_dataset="{0}/semTransit/semTransit_ND".format(gdb_path),
            out_network_analysis_layer="OD Cost Matrix",
            impedance_attribute="Transit_TT",
            default_cutoff="{0}".format(cutoff),
            default_number_destinations_to_find="#",
            accumulate_attribute_name="#",
            UTurn_policy="ALLOW_UTURNS",
            restriction_attribute_name="#",
            hierarchy="NO_HIERARCHY",
            hierarchy_settings="#",
            output_path_shape="NO_LINES",
            time_of_day=time_to_eval)

        outNALayer = outNALayer.getOutput(0)
        subLayerNames = arcpy.na.GetNAClassNames(outNALayer)
        originsLayerName = subLayerNames["Origins"]
        destinationsLayerName = subLayerNames["Destinations"]
        linesLayerName = subLayerNames["ODLines"]

        print "Adding Destinations"
        arcpy.AddLocations_na(
            in_network_analysis_layer="OD Cost Matrix",
            sub_layer="Destinations",
            in_table=destination,
            field_mappings="Name {0} #".format(destination_field),
            search_tolerance="5000 Meters",
            sort_field="#",
            search_criteria=
            "Connectors_Stops2Streets NONE;Streets_UseThisOne SHAPE;TransitLines NONE;Stops NONE;Stops_Snapped2Streets NONE;semTransit_ND_Junctions NONE",
            match_type="MATCH_TO_CLOSEST",
            append="APPEND",
            snap_to_position_along_network="NO_SNAP",
            snap_offset="5 Meters",
            exclude_restricted_elements="INCLUDE",
            search_query=
            "Connectors_Stops2Streets #;Streets_UseThisOne #;TransitLines #;Stops #;Stops_Snapped2Streets #;semTransit_ND_Junctions #"
        )

        print "Adding origins"
        arcpy.AddLocations_na(
            in_network_analysis_layer="OD Cost Matrix",
            sub_layer="Origins",
            in_table=origin,
            field_mappings="Name {0} #".format(origin_field),
            search_tolerance="5000 Meters",
            sort_field="#",
            search_criteria=
            "Connectors_Stops2Streets NONE;Streets_UseThisOne SHAPE;TransitLines NONE;Stops NONE;Stops_Snapped2Streets NONE;semTransit_ND_Junctions NONE",
            match_type="MATCH_TO_CLOSEST",
            append="APPEND",
            snap_to_position_along_network="NO_SNAP",
            snap_offset="5 Meters",
            exclude_restricted_elements="INCLUDE",
            search_query=
            "Connectors_Stops2Streets #;Streets_UseThisOne #;TransitLines #;Stops #;Stops_Snapped2Streets #;semTransit_ND_Junctions #"
        )

        print "Begin Solving"
        arcpy.na.Solve(outNALayer)

        outFile = '/'.join(
            gdb_path.split('/')[:-1]) + '/{0}_result_{1}.csv'.format(
                destination.split('_')[:-1][-1], time.replace(':', ''))

        print outFile
        fields = ['Name', 'Total_Transit_TT']
        for lyr in arcpy.mapping.ListLayers(outNALayer):
            if lyr.name == linesLayerName:
                with open(outFile, 'w') as f:
                    f.write(','.join(fields) + '\n')  # csv headers
                    with arcpy.da.SearchCursor(lyr, fields) as cursor:
                        print "Successfully created lines searchCursor.  Exporting to " + outFile
                        for row in cursor:
                            f.write(','.join(
                                [str(r).replace(',', ' ')
                                 for r in row]) + '\n')

    arcpy.Delete_management(outNALayer)

    arcpy.CheckInExtension("Network")
Ejemplo n.º 11
0
def NMT():
    arcpy.AddMessage("> starting with proximity area (" + str(Radius) +
                     " meter)")
    arcpy.AddMessage("> maximum costs: " + Costs + " = " + str(Max_Costs))
    arcpy.Delete_management("ODMATRIX")
    arcpy.Delete_management("P_Shape")
    arcpy.Delete_management("O_Shape")

    #OD-Matrix
    if Filter_Group_P: NMT_find = 50
    elif "Potential" in Modus: NMT_find = ""
    else: NMT_find = to_find + 1
    arcpy.MakeODCostMatrixLayer_na(Network, "ODMATRIX", Costs, Max_Costs,
                                   NMT_find, [Costs], "", "", "", "",
                                   "NO_LINES")
    p = arcpy.na.GetSolverProperties(arcpy.mapping.Layer("ODMATRIX"))
    Restriction_0 = list(p.restrictions)  ##activate all restrictions
    p.restrictions = Restriction_0
    del p
    if Barriers != "":
        arcpy.AddLocations_na("ODMATRIX", "Line Barriers", Barriers, "", "")

    arcpy.MakeFeatureLayer_management(O_Shape, "O_Shape")
    fm_O = checkfm("O_Shape", O_Shape_ID)
    if Filter_P:
        arcpy.MakeFeatureLayer_management(P_Shape, "P_Shape", Filter_P + ">0")
    else:
        arcpy.MakeFeatureLayer_management(P_Shape, "P_Shape")
    fm_P = checkfm("P_Shape", P_Shape_ID)

    if "Distance" in Modus:
        arcpy.SelectLayerByLocation_management("O_Shape", "intersect",
                                               "P_Shape", Radius)
    if "Potential" in Modus:
        arcpy.SelectLayerByLocation_management("P_Shape", "intersect",
                                               "O_Shape", Radius)

    if fm_O is None:        arcpy.AddLocations_na("ODMATRIX","Origins","O_Shape","Name "+O_Shape_ID+\
" 0; Attr_Minutes # #","","",[["MRH_Wege_Split", "SHAPE"],["MRH_Luecken", "SHAPE"],["Ampeln", "NONE"],["Faehre_NMIV", "NONE"]],"","","","","EXCLUDE")
    else:
        arcpy.AddLocations_na("ODMATRIX", "Origins", "O_Shape", fm_O, "", "",
                              "", "", "CLEAR", "", "", "EXCLUDE")

    if fm_P is None:        arcpy.AddLocations_na("ODMATRIX","Destinations","P_Shape","Name "+P_Shape_ID+\
" 0; Attr_Minutes # #","","",[["MRH_Wege_Split", "SHAPE"],["MRH_Luecken", "SHAPE"],["Ampeln", "NONE"],["Faehre_NMIV", "NONE"]],"","","","","EXCLUDE")
    else:
        arcpy.AddLocations_na("ODMATRIX", "Destinations", "P_Shape", fm_P, "",
                              "", "", "", "CLEAR", "", "", "EXCLUDE")

    arcpy.na.Solve("ODMATRIX", "", "CONTINUE")

    df = pandas.DataFrame(
        arcpy.da.FeatureClassToNumPyArray("ODMATRIX\Lines",
                                          ["Name", "Total_" + Costs]))
    if len(df) == 0: return df

    df[[ID_O, ID_P + "_P"]] = df.Name.str.split(
        ' - ',
        expand=True,
    ).astype(int)
    df = df.rename(columns={'Total_' + Costs: 'Time'})
    df["UH"], df["BH"], df[k_O], df[k_P + "_P"] = [111, 111, 0, 0]
    df.drop("Name", axis=1, inplace=True)

    if "Potential" in Modus:
        StructData.append(P_Shape_ID)
        Strukturen = pandas.DataFrame(
            arcpy.da.FeatureClassToNumPyArray("P_Shape", StructData))
        df = pandas.merge(df,
                          Strukturen,
                          left_on=ID_P + '_P',
                          right_on=P_Shape_ID)
        df.drop(P_Shape_ID, axis=1, inplace=True)
        df = df.groupby([ID_P + '_P', ID_O]).first()
        df = df.reset_index()

    if "Distance" in Modus: df["FromStop"], df["ToStop"] = [0, 0]
    if "Potential" in Modus: df.drop([k_O, k_P + "_P"], axis=1, inplace=True)

    #arcpy.management.SaveToLayerFile("ODMATRIX",r'PATH\CF_Ergebnis',"RELATIVE")

    arcpy.AddMessage("> proximity area finished\n")
    return df
Ejemplo n.º 12
0
        odname = "dh" + year
        centroids = directory + "/centroids_p.shp"
        border = directory + "/border_p.shp"

        name = "cost_dh_" + year

        out_k_routes = workspace2 + "solve_" + str(year)
        csv = os.path.join(folder, name + ".txt")

        #defining elements for closest facilities
        impedanceAttribute = "cost_hd"

        # Create a OD Matrix

        layer = arcpy.MakeODCostMatrixLayer_na(
            networkdataset, odname, "cost_hd", "", "", "", "ALLOW_UTURNS", "",
            "NO_HIERARCHY", "", "STRAIGHT_LINES", "").getOutput(0)
        print odname + "OD matrix done done"

        # Load centroids as Origins

        arcpy.AddLocations_na(layer, "Origins", centroids, "", "5000 Meters",
                              "")

        print odname + "add origins done"

        # Load centroids as Destinations

        arcpy.AddLocations_na(layer, "Destinations", centroids, "",
                              "5000 Meters", "")
        print odname + "add destination done"
output_csv = 'D:/ArcPy/arcpy_scripts/jenniferJennings/'

#Collecting files from directory
fListOrigins = glob.glob(origins)
fListDestinations = glob.glob(destinations)

#Solving OD Matrix for each state in a given year.
for index in range(len(fListOrigins)):
    
    #Creating OD Matrix
    print "Creating OD matrix for file %s"%index
    result_object  = arcpy.MakeODCostMatrixLayer_na(in_network_dataset="D:/ESRI_Data_2013/streetmap_na/data/streets",\
                               out_network_analysis_layer="OD Cost Matrix", \
                               impedance_attribute="Length", default_cutoff="25", \
                               default_number_destinations_to_find="", accumulate_attribute_name="Length", \
                               UTurn_policy="ALLOW_UTURNS",\
                               restriction_attribute_name="'Driving a Passenger Car';'Avoid Service Roads';'Avoid Pedestrian Zones';\
                               'Avoid Walkways';'Avoid Roads for Authorities';'Avoid Private Roads';'Avoid Unpaved Roads';\
                               'Through Traffic Prohibited';'Avoid Express Lanes';'Avoid Carpool Roads'", 
                               hierarchy="USE_HIERARCHY", hierarchy_settings="", \
                               output_path_shape="NO_LINES", time_of_day="")
    
    layer_object = result_object.getOutput(0)
    sublayer_names = arcpy.na.GetNAClassNames(layer_object)
    origins_layer_name = sublayer_names["Origins"]
    destinations_layer_name = sublayer_names["Destinations"]
    linesLayerName = sublayer_names['ODLines']
    
    #Adding Origin and Destination to the OD Matrix
    print "Adding Origin for file %s"%fListOrigins[index]
    arcpy.na.AddLocations(layer_object,  origins_layer_name, fListOrigins[index], 
                          "Name leaid #;TargetDestinationCount # #", "1000 Meters")
Ejemplo n.º 14
0
           ["C:"+f[7],"Haltestelle","NAME",0,1000,5],\
           ["C:"+f[8],"Int_Flug","name",1,150000,10],\
           ["C:"+f[8],"Reg_Flug","name",2,150000,5],\
           ["C:"+f[8],"Hafen","name",3,150000,5],\
           ["C:"+f[8],"KV_Terminal","name",4,100000,3],\
           ["C:"+f[8],"Gueter_Bhf","name",5,100000,3],\
           ["C:"+f[8],"Landepl","name",7,150000,5]]


################################################
#--Berechnung--#
################################################
arcpy.Delete_management("ODMATRIX")
arcpy.Delete_management("A_Shape")
arcpy.Delete_management("E_Shape")
ODLayer = arcpy.MakeODCostMatrixLayer_na(Network,"ODMATRIX",Kosten,10,10,[Kosten],"","","","","NO_LINES")
arcpy.MakeFeatureLayer_management(A_Shape, "A_Shape")
arcpy.MakeFeatureLayer_management(E_Shape, "E_Shape")
field_mappings = "Name "+A_Shape_ID+" 0; SourceID SourceID_MIV 0;SourceOID SourceOID_MIV 0;PosAlong PosAlong_MIV 0;SideOfEdge SideOfEdge_MIV 0"
arcpy.AddLocations_na(ODLayer,"Origins","A_Shape",field_mappings,"","","","","","","","EXCLUDE")


for typ in Gruppen:
    print(typ[1])
#    if "Lande" not in typ[1]: continue
    
    #--create new field--#    
    try: arcpy.AddField_management("E_Shape", typ[1], "TEXT", field_length=400)
    except: 
        arcpy.DeleteField_management("E_Shape", typ[1])
        arcpy.AddField_management("E_Shape", typ[1], "TEXT", field_length=400)
ExDel(ODC)

if "Hierarkia" in NDparams:
    Hierarkia = "USE_HIERARCHY"
else:
    Hierarkia = "NO_HIERARCHY"

#Tehdään OD-Cost-Matrix Layer ja LASKETAAN VAIN kohteet, jotka ovat 20 metrin päässä Origineista:
msg("Luodaan ODC-Cost-Matrix. Haetaan tie-elementit 20m liikennevaloista.")
Aloitus()
arcpy.SetProgressor(
    "step",
    "Luodaan OD-Cost-Matrix...Haetaan tie-elementit 20m liikennevaloista...",
    0, 100, 25)  #Luodaan suoritusinfopalkki
arcpy.MakeODCostMatrixLayer_na(NetworkData, ODC, "Pituus", "20", "", "",
                               "ALLOW_DEAD_ENDS_ONLY", "", Hierarkia, "",
                               "STRAIGHT_LINES")
arcpy.SetProgressorPosition(20)
Valmis()

#Origineiksi määritellään Liikennevalosegmentit(pistemuotoisena):
msg("Lisätään OD-Cost-Matriisiin Lähtöpisteet")
Aloitus()
arcpy.SetProgressorLabel(
    "Lisätään OD-Cost-Matriisiin Lähtöpisteet...Tässä menee hetki...")
arcpy.AddLocations_na(ODC, "Origins", LVSpoint, "Name FID #", "10 Meters", "",
                      "", "MATCH_TO_CLOSEST", "CLEAR", "NO_SNAP", "5 Meters",
                      "EXCLUDE", "")
arcpy.SetProgressorPosition(30)
Valmis()