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")
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)
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")
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]
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
"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)))
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")
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
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")
["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()