def getDownstreamGridCodes(gridcode, catchFC, flownet, flownetFC): '''Traces downstream from the project's catchment and lists all downstream catchment GRIDCODES''' #Get the catchment corresponding to the gridcode theCatchLyr = arcpy.MakeFeatureLayer_management( catchFC, "theCatch", "GRIDCODE = {}".format(gridcode)) #Clip the flowine within the catchment and get its lowest point theFlowline = arcpy.Clip_analysis(flowlineFC, theCatchLyr, "in_memory/theFlowline") theFlowpoint = arcpy.FeatureVerticesToPoints_management( theFlowline, "in_memory/thePoint", "END") #Trace from this point downstream to the end of the HUC8 geometric network theTraceLyr = arcpy.TraceGeometricNetwork_management( flownet, "DownStrmLyr", theFlowpoint, "TRACE_DOWNSTREAM") #Extract the line feature theTraceLine = arcpy.SelectData_management(theTraceLyr, os.path.basename(flownetFC)) #Make a new feature layer of catchments and select those that intersect the downstream trace theCatchLyr = arcpy.MakeFeatureLayer_management(catchFC, "theCatch") theCatchments = arcpy.SelectLayerByLocation_management( theCatchLyr, "INTERSECT", theTraceLine) #Create a list of catchment GRIDCODEs in the selected catchments outGridcodes = [] with arcpy.da.SearchCursor(theCatchments, "GRIDCODE") as cur: for rec in cur: outGridcodes.append(rec[0]) return outGridcodes
def get_distance(points): point = arcpy.Point() pointGeometryList = [] for pt in points: point.X = pt[0] point.Y = pt[1] pointGeometry = arcpy.PointGeometry(point).projectAs( arcpy.SpatialReference(4326)) pointGeometryList.append(pointGeometry) arcpy.CopyFeatures_management(pointGeometryList, m) arcpy.AddLocations_na(B1_route, "Stops", m, "Name Name #", "0 Miles", "", "", "MATCH_TO_CLOSEST", "CLEAR", "NO_SNAP", "0 Miles", "INCLUDE", "") # just in case try: arcpy.Solve_na(B1_route, "SKIP", "TERMINATE", "") arcpy.SelectData_management(B1_route, "Routes") arcpy.FeatureToLine_management(B1_route + "/Routes", feature, "", "ATTRIBUTES") except: return 999999 try: arcpy.Append_management(feature, empty_memory) except: arcpy.CopyFeatures_management(feature, empty_memory) return ([f[0] for f in arcpy.da.SearchCursor(feature, 'SHAPE@LENGTH')][0])
def get_dist(points, current_id, buffer_id): point = arcpy.Point() pointGeometryList = [] for pt in points: point.X = pt[0] point.Y = pt[1] pointGeometry = arcpy.PointGeometry(point).projectAs( arcpy.SpatialReference(4326)) pointGeometryList.append(pointGeometry) arcpy.CopyFeatures_management(pointGeometryList, m) arcpy.AddLocations_na(B1_route, "Stops", m, "Name Name #", "0 Miles", "", "", "MATCH_TO_CLOSEST", "CLEAR", "NO_SNAP", "0 Miles", "INCLUDE", "") # just in case try: arcpy.Solve_na(B1_route, "SKIP", "TERMINATE", "") arcpy.SelectData_management(B1_route, "Routes") arcpy.FeatureToLine_management(B1_route + "/Routes", feature, "", "ATTRIBUTES") except: print "Cannot Solve" return [], 999999 arcpy.AddField_management(feature, "curr_id", "LONG") arcpy.AddField_management(feature, "buffer_id", "LONG") arcpy.CalculateField_management(feature, "curr_id", current_id, "PYTHON") arcpy.CalculateField_management(feature, "buffer_id", buffer_id, "PYTHON") arcpy.SelectLayerByLocation_management("newlf", "WITHIN", feature) _list_ = [f[0] for f in arcpy.da.SearchCursor("newlf", '_ID_')] return _list_, ([ f[0] for f in arcpy.da.SearchCursor(feature, 'SHAPE@LENGTH') ][0])
def add_route_to_layer(linkid, points, sumlayer): point = arcpy.Point() pointGeometryList = [] for pt in points: point.X = pt[0] point.Y = pt[1] pointGeometry = arcpy.PointGeometry(point).projectAs( arcpy.SpatialReference(4326)) pointGeometryList.append(pointGeometry) arcpy.CopyFeatures_management(pointGeometryList, m) arcpy.AddLocations_na(B1_route, "Stops", m, "Name Name #", "2 Meters", "", "", "MATCH_TO_CLOSEST", "CLEAR", "NO_SNAP", "2 Meters", "INCLUDE", "") try: arcpy.Solve_na(B1_route, "SKIP", "TERMINATE", near_snap_dist) arcpy.SelectData_management(B1_route, "Routes") arcpy.FeatureToLine_management(B1_route + "/Routes", feature, "", "ATTRIBUTES") arcpy.CalculateField_management( feature, "FID_Routes", linkid, "PYTHON") # since ID field is not available except: print("Route not found. 999999 Returned") return 999999 arcpy.Merge_management([feature, sumlayer], temp2) arcpy.Copy_management(temp2, sumlayer) return 0
def get_length_route(points): point = arcpy.Point() pointGeometryList = [] for pt in points: point.X = pt[0] point.Y = pt[1] pointGeometry = arcpy.PointGeometry(point).projectAs(arcpy.SpatialReference(4326)) pointGeometryList.append(pointGeometry) arcpy.CopyFeatures_management(pointGeometryList, m) arcpy.AddLocations_na(route_f, "Stops", m, "Name Name #", "0.5 Miles", "", "", "MATCH_TO_CLOSEST", "CLEAR", "NO_SNAP", "10 Meters", "INCLUDE", "") arcpy.Solve_na(route_f, "SKIP", "TERMINATE", "500 Kilometers") arcpy.SelectData_management(route_f, "Routes") arcpy.FeatureToLine_management(route_f + "\\Routes", f, "", "ATTRIBUTES") # corrected to "Total_Length" from "Total_Leng" leng = [row.getValue("Total_Length") for row in arcpy.SearchCursor(f)][0] / 1609.34 return leng
def get_dist_AB(fips_a, fips_b): arcpy.Select_analysis(snapped_dumm, m, 'FIPS = {0} OR FIPS = {1}'.format(fips_a, fips_b)) arcpy.AddLocations_na("Route", "Stops", m, "Name Name #", "5000 Kilometers", "", "B1 SHAPE;B1_ND_Junctions SHAPE", "MATCH_TO_CLOSEST", "CLEAR", "NO_SNAP", "5 Meters", "INCLUDE", "B1 #;B1_ND_Junctions #") try: arcpy.Solve_na("Route", "SKIP", "TERMINATE", "5000 Kilometers") except: return [9999999, 9999999] arcpy.SelectData_management("Route", "Routes") #arcpy.CopyFeatures_management("Route/Routes", feature) arcpy.FeatureToLine_management("Route/Routes", feature) dummy = [[row[0], row[1] * 0.000621371] for row in arcpy.da.SearchCursor( feature, ['Total_resi', "SHAPE@LENGTH"], spatial_reference=sr)][0] return dummy
def get_shortest_path_link_ids(fips_a, fips_b): #print ("ArgGIS analyst: Job Received, OFIPS: {0}, DFIPS: {1} *".format(fips_a, fips_b)) arcpy.CheckOutExtension("Network") arcpy.Select_analysis(snapped_fips, o, 'FIPS = {0}'.format(fips_a)) arcpy.Select_analysis(snapped_fips, d, 'FIPS = {0}'.format(fips_b)) arcpy.Merge_management([o, d], m) arcpy.AddLocations_na("Route", "Stops", m, "Name Name #", "5000 Kilometers", "", "B1 SHAPE;B1_ND_Junctions SHAPE", "MATCH_TO_CLOSEST", "CLEAR", "NO_SNAP", "5 Meters", "INCLUDE", "B1 #;B1_ND_Junctions #") try: arcpy.Solve_na("Route", "SKIP", "TERMINATE", "500 Kilometers") arcpy.SelectData_management("Route", "Routes") arcpy.FeatureToLine_management("Route/Routes", feature, "", "ATTRIBUTES") except: print ("Route between FIPS: {0} and {1} not found.".format(fips_a,fips_b)) unknown_routes_dict[fips_a]=fips_b return [] arcpy.SelectLayerByLocation_management(alllinks_f,"INTERSECT",feature, "", "NEW_SELECTION", "NOT_INVERT") dummy = [row.getValue("OBJECTID") for row in arcpy.SearchCursor(alllinks_f)] return dummy
def get_dist_AB(fips_a, fips_b): #print ("ArgGIS analyst: Job Received, ONODE: {0}, DNODE: {1} *".format(fips_a, fips_b)) arcpy.CheckOutExtension("Network") arcpy.Select_analysis(snapped_dumm, o, 'FIPS = {0}'.format(fips_a)) arcpy.Select_analysis(snapped_dumm, d, 'FIPS = {0}'.format(fips_b)) arcpy.Merge_management([o, d], m) arcpy.AddLocations_na("Route", "Stops", m, "Name Name #", "5000 Kilometers", "", "B1 SHAPE;B1_ND_Junctions SHAPE", "MATCH_TO_CLOSEST", "CLEAR", "NO_SNAP", "5 Meters", "INCLUDE", "B1 #;B1_ND_Junctions #") try: arcpy.Solve_na("Route", "SKIP", "TERMINATE", "500 Kilometers") arcpy.SelectData_management("Route", "Routes") arcpy.FeatureToLine_management("Route/Routes", feature, "", "ATTRIBUTES") except: print("Route not found. 999999 Returned") return -99 dummy = [ row.getValue("Total_Leng") for row in arcpy.SearchCursor(feature) ][0] return dummy * 0.000621371
def add_route_to_layer(nodeA, nodeB, sumlayer): print("ArgGIS analyst: Job Received, ONODE: {0}, DNODE: {1} *".format( nodeA, nodeB)) # *these nodes are in different layers arcpy.CheckOutExtension("Network") arcpy.Select_analysis(SnappedNodes, o, 'ID = {0}'.format(nodeA)) arcpy.Select_analysis(SnappedNodes, d, 'ID = {0}'.format(nodeB)) arcpy.Merge_management([o, d], m) arcpy.AddLocations_na("Route", "Stops", m, "Name Name #", "5000 Kilometers", "", "B1 SHAPE;B1_ND_Junctions SHAPE", "MATCH_TO_CLOSEST", "CLEAR", "NO_SNAP", "5 Meters", "INCLUDE", "B1 #;B1_ND_Junctions #") try: arcpy.Solve_na("Route", "SKIP", "TERMINATE", "500 Kilometers") arcpy.SelectData_management("Route", "Routes") arcpy.FeatureToLine_management("Route\\Routes", feature, "", "ATTRIBUTES") except: print("Route not found. 999999 Returned") return 0 arcpy.Merge_management([feature, sumlayer], templayer) arcpy.Copy_management(templayer, sumlayer) return 0
def get_dist(points, current_id, buffer_id): if points[0] == points[ 1]: # if both the snapped connecting node and the point being tested is the same return [], 0 arcpy.MakeFeatureLayer_management(new_l, "newlf") arcpy.MakeRouteLayer_na(B1_ND, B1_route, "Length") # print current_id # print buffer_id point = arcpy.Point() pointGeometryList = [] for pt in points: point.X = pt[0] point.Y = pt[1] pointGeometry = arcpy.PointGeometry(point).projectAs(sr_g) pointGeometryList.append(pointGeometry) arcpy.CopyFeatures_management(pointGeometryList, m) arcpy.AddLocations_na(B1_route, "Stops", m, "Name Name #", "", "", "", "MATCH_TO_CLOSEST", "CLEAR", "NO_SNAP", "", "INCLUDE", "") # just in case try: arcpy.Solve_na(B1_route, "SKIP", "TERMINATE", "") except: return {}, 99999 #arcpy.Solve_na(B1_route, "SKIP", "TERMINATE", "") arcpy.SelectData_management(B1_route, "Routes") arcpy.FeatureToLine_management(B1_route + "/Routes", feature, "", "ATTRIBUTES") arcpy.AddField_management(feature, "curr_id", "LONG") arcpy.AddField_management(feature, "buffer_id", "LONG") arcpy.CalculateField_management(feature, "curr_id", current_id, "PYTHON") arcpy.CalculateField_management(feature, "buffer_id", buffer_id, "PYTHON") arcpy.SelectLayerByLocation_management("newlf", "WITHIN", feature) _list_ = [f[0] for f in arcpy.da.SearchCursor("newlf", '_ID_')] return _list_, ([ f[0] for f in arcpy.da.SearchCursor(feature, 'SHAPE@LENGTH', "", sr_p) ][0]) / 1604.34
def get_distance(nodeAlayer, nodeBlayer, nodeAColumnName, nodeBColumnName, nodeA, nodeB): #create a set of origin and destination FIPS to be loaded in the network analyst #print ("ArgGIS analyst: Job Received, ONODE: {0}, DNODE: {1} *".format(nodeA, nodeB)) # *these nodes are in different layers sys.stdout.write('.') arcpy.CheckOutExtension("Network") arcpy.Select_analysis(nodeAlayer + ".shp", o, '{0} = {1}'.format(nodeAColumnName, nodeA)) arcpy.Select_analysis(nodeBlayer + ".shp", d, '{0} = {1}'.format(nodeBColumnName, nodeB)) arcpy.Merge_management([o, d], m) arcpy.AddLocations_na("Route", "Stops", m, "Name Name #", "5000 Kilometers", "", "B1 SHAPE;B1_ND_Junctions SHAPE", "MATCH_TO_CLOSEST", "CLEAR", "NO_SNAP", "5 Meters", "INCLUDE", "B1 #;B1_ND_Junctions #") try: arcpy.Solve_na("Route", "SKIP", "TERMINATE", "500 Kilometers") arcpy.SelectData_management("Route", "Routes") arcpy.FeatureToLine_management("Route\\Routes", feature, "", "ATTRIBUTES") except: return 999999 return ([f[0] for f in arcpy.da.SearchCursor(feature, 'SHAPE@LENGTH')][0])
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") try: # Process: Solve arcpy.Solve_na("OD Cost Matrix" + str(i), "SKIP", "TERMINATE", "") # Process: Select Data arcpy.SelectData_management("OD Cost Matrix" + str(i), "Lines") # Process: Copy Features env.workspace = "D:/Data_for_model/output" arcpy.CopyFeatures_management("Lines", "lines_" + str(i) + ".shp", "", "0", "0", "0") # Delete arcpy.Delete_management("OD Cost Matrix" + str(i)) Print print("success! " + i) print(datetime.now()) print(i) except:
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]
Feeders, "", "", "", "TRIM_POLYS", distance_from_line) Existing_TX_SA = Existing_TX_SA.getOutput(0) #Load Elements arcpy.na.AddLocations(Existing_TX_SA, "Facilities", Existing_TX, "", "25 Meters") arcpy.na.AddLocations(Existing_TX_SA, "Facilities", Injection_TX, "", "25 Meters") #Solve arcpy.na.Solve(Existing_TX_SA, "SKIP") #CHECK FOR ERRORS #Export polygon layer Existing_TX_Polygons_300m = arcpy.SelectData_management( Existing_TX_SA, "Polygons") #C2# Existing_TX_SA_600m = arcpy.na.MakeServiceAreaLayer( network, "Existing_TX_SA_600m", "Length", "TRAVEL_FROM", "600", "DETAILED_POLYS", "MERGE", "DISKS", "NO_LINES", "NON_OVERLAP", "NO_SPLIT", Feeders, "", "", "", "TRIM_POLYS", distance_from_line) #Existing_TX_SA_600m = Existing_TX_Polygons_600m.getOutput(0) #Load Elements arcpy.na.AddLocations(Existing_TX_SA_600m, "Facilities", Injection_TX, "", "25 Meters") arcpy.na.AddLocations(Existing_TX_SA_600m, "Facilities", Existing_TX, "", "25 Meters") #Solve
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:
"DETAILED_POLYS", "MERGE", "DISKS", "NO_LINES", "NON_OVERLAP", "NO_SPLIT", Feeders, "", "", "", "TRIM_POLYS", distance_from_line) Existing_TX_SA = Existing_TX_SA.getOutput(0) #Load Elements arcpy.na.AddLocations(Existing_TX_SA, "Facilities", Existing_TX, "field mapping", "25 Meters") arcpy.na.AddLocations(Existing_TX_SA, "Point Barriers", Injection_TX, "field mapping", "25 Meters") #Solve arcpy.na.Solve(Existing_TX_SA, "SKIP") #CHECK FOR ERRORS #Export polygon layer Existing_TX_Polygons = arcpy.SelectData_management(Existing_TX_SA, "Polygons") ##T2## #SA of 200m was drawn from the injection TX sites. #Setting existing TX SA as a barrier prevents the SA made in the previous step from being crossed or considered as a valid injection TX SA. #This method allows to include LV lines that extend from the injection TX, are terminal, #and can be most directly attributed to the injection TX to be prioritized as treatment sites. Treatment_SA = arcpy.na.MakeServiceAreaLayer( network, district + "_Treatment_SA", "Length", "TRAVEL_FROM", "200", "DETAILED_POLYS", "NO_MERGE", "DISKS", "NO_LINES", "NON_OVERLAP", "NO_SPLIT", Feeders, "", "", "", "TRIM_POLYS", distance_from_line) Treatment_SA = Treatment_SA.getOutput(0) #Load Elements arcpy.na.AddLocations(Treatment_SA, "Facilities", Injection_TX, "",
print txt arcpy.AddMessage(txt) return ##---PROCESSES--- # Convert raster to polygon msg("Converting %s to polygons" %subPatchRaster) tmpPoly = "in_memory/tmpPoly" arcpy.RasterToPolygon_conversion(subPatchRaster,tmpPoly,"NO_SIMPLIFY") dslvPoly = "in_memory/dslvPoly" arcpy.Dissolve_management(tmpPoly,dslvPoly,"grid_code") # Convert the subpatch polygons to a coverage msg("Converting subpatch zones to an Arc/Info coverage") arcpy.FeatureclassToCoverage_conversion("%s POLYGON" %dslvPoly,subpatchCov) subpatchCovPoly = arcpy.SelectData_management(subpatchCov,"polygon").getOutput(0) subpatchCovArc = arcpy.SelectData_management(subpatchCov,"arc").getOutput(0) # Select records into tmpTable msg("Creating connectitivty table") subPatchEdgeTbl = "in_memory/subPatchEdgeTbl" selString = r'"$LEFTPOLYGON" > 1 AND "$RIGHTPOLYGON" > 1' arcpy.TableSelect_analysis(subpatchCovArc,subPatchEdgeTbl,selString) # Join ID codes to the subPatchedgeTable msg("Joining IDs to connecitivty table") arcpy.JoinField_management(subPatchEdgeTbl, "LEFTPOLYGON", subpatchCovPoly, "SUBPATCHPOLY#", "GRID_CODE") arcpy.JoinField_management(subPatchEdgeTbl, "RIGHTPOLYGON", subpatchCovPoly, "SUBPATCHPOLY#", "GRID_CODE") # Initialize output edge list edgeList = open(edgeListFN, 'w')
"NO_LINES", "OVERLAP", "NO_SPLIT", "", "", "ALLOW_UTURNS", "Oneway", "TRIM_POLYS", "100 Meters", "NO_LINES_SOURCE_FIELDS", "NO_HIERARCHY", "") # Process: Add Locations arcpy.AddLocations_na( Service_Area, Select_Layer_Type, Destinations_Layer, "Name Address #", "5000 Meters", "", "Hennepin_County_Street_Centerlines SHAPE;StreetCenterlines_NetworkDataset_Junctions NONE", "MATCH_TO_CLOSEST", "APPEND", "NO_SNAP", "5 Meters", "INCLUDE", "Hennepin_County_Street_Centerlines #;StreetCenterlines_NetworkDataset_Junctions #" ) # Process: Solve arcpy.Solve_na(Service_Area_with_Destinations, "SKIP", "TERMINATE", "", "") # Process: Select Data arcpy.SelectData_management(Solved_Service_Area, "Polygons") # Process: Make Feature Layer arcpy.MakeFeatureLayer_management( Polygons, SAPolygons_Layer, "", "", "ObjectID ObjectID VISIBLE NONE;Shape Shape VISIBLE NONE;FacilityID FacilityID VISIBLE NONE;Name Name VISIBLE NONE;FromBreak FromBreak VISIBLE NONE;ToBreak ToBreak VISIBLE NONE" ) # Process: Clip arcpy.Clip_analysis(Parcels_shp, SAPolygons_Layer, AllWalkableParcels_shp, "") # Process: Select arcpy.Select_analysis(AllWalkableParcels_shp, WalkableParcels_shp, "\"LOT_TYPE\" = 'Residential'")