def recheck_orientation(self, geometry_name, geometry_folder, networkLine): arcpy.env.overwriteOutput = True geodatabaseTopage = geodatabase() geodatabasePath = geodatabaseTopage.path(geometry_folder) print("Recréation du réseau géométrique") if arcpy.Exists(geodatabasePath + "/" + networkLine + "_BUILDERR"): arcpy.Delete_management(geodatabasePath + "/" + networkLine + "_BUILDERR") arcpy.Delete_management(geometry_folder + geometry_name) arcpy.CreateGeometricNetwork_management( geometry_folder, geometry_name, networkLine + " SIMPLE_EDGE NO;" + networkLine + "_summit SIMPLE_JUNCTION YES", "0.001", "#", "#", "#", "PRESERVE_ENABLED") print("Ajout de l'exutoire") arcpy.MakeFeatureLayer_management( geometry_folder + networkLine + "_summit", 'lyr') arcpy.SelectLayerByLocation_management( 'lyr', 'INTERSECT', geometry_folder + networkLine + "_Exutoire") arcpy.CalculateField_management('lyr', 'AncillaryRole', "2", "PYTHON_9.3", "#") arcpy.SelectLayerByAttribute_management('lyr', "CLEAR_SELECTION") arcpy.Delete_management("lyr") print("Calcul du sens d'écoulement") arcpy.SetFlowDirection_management(geometry_folder + geometry_name, "WITH_DIGITIZED_DIRECTION") arcpy.TraceGeometricNetwork_management( geometry_folder + "/" + geometry_name, geometry_name, geometry_folder + networkLine + "_Exutoire", "TRACE_UPSTREAM") arcpy.MakeFeatureLayer_management( geometry_folder + networkLine + "_notUpstream", 'lyr_notUpstream') return arcpy.GetCount_management('lyr_notUpstream').__str__()
snap_tolerance, weights, weight_associations, z_snap_tolerance, preserve_enabled_values) ##arcpy.AddMessage('Made Geom Net for: ' + sFDS) print 'Made Geom Net for: ' + sFDS ##logging.info('Made Geom Net for: ' + sFDS) #Set flow direction for the Sewer Geometric Network in_geometric_network = FGDB_loc + r'\SEWER\SEWER_Net' flow_option = "WITH_DIGITIZED_DIRECTION" ##arcpy.AddMessage('Setting Flow Direction for: ' + in_geometric_network) print 'Setting Flow Direction for: ' + in_geometric_network logging.info('Setting Flow Direction for: ' + in_geometric_network) arcpy.SetFlowDirection_management(in_geometric_network, flow_option) ##arcpy.AddMessage('Finished Setting Flow Direction for: ' + in_geometric_network) print 'Finished Setting Flow Direction for: ' + in_geometric_network ##logging.info('Finished Setting Flow Direction for: ' + in_geometric_network) #------------------------------------------------------------------------------- #Feature Dataset is not Water, Recycled, or Sewer else: print fd + ' Feature Dataset will not have a geometric network created for it' ##arcpy.AddMessage(fd + ' Feature Dataset will not have a geometric network created for it') logging.info( fd + ' Feature Dataset will not have a geometric network created for it' ) #-------------------------------------------------------------------------------
print field + ' added to ' + flags + '...' # Start an edit session. Must provide the worksapce. edit = arcpy.da.Editor(workspace) # Edit session is started without an undo/redo stack for versioned data # (for second argument, use False for unversioned data) # For fgdbs, use settings below. edit.startEditing(False, False) # Start an edit operation edit.startOperation() # Set flow direction of network to follow digitized direction flow = 'WITH_DIGITIZED_DIRECTION' arcpy.SetFlowDirection_management(sdnNet, flow) flagFields = ['OID@', 'FlowTime'] with arcpy.da.UpdateCursor(flags, flagFields) as rows: for row in rows: # Create temporary variables for functions oid = row[0] newNet = 'SDN_Net' + str(oid) flag = 'flag' + str(oid) exp = '"OBJECTID" = ' + str(oid) # Create in memory feature layer of one catch basin arcpy.MakeFeatureLayer_management(flags, flag, exp) # Trace the network downstream arcpy.TraceGeometricNetwork_management(
print('Compute segment length...') arcpy.AddGeometryAttributes_management(outsnsplit, 'LENGTH', 'meters') #----------------------------- Create geometric network ------------------------------------- in_source_feature_classes = "{} SIMPLE_EDGE NO".format(os.path.split(outsnsplit)[1]) if not arcpy.Exists(geonetout): print('Create geometric network...') arcpy.CreateGeometricNetwork_management(netftdat, os.path.split(geonetout)[1], in_source_feature_classes) else: print('{} already exists. Skipping...'.format(geonetout)) ######################################################################################################################## # DCI ANALYSIS ######################################################################################################################## #Set flow direction of geometric network, a pre-requisite for tracing arcpy.SetFlowDirection_management(geonetout, flow_option = "WITH_DIGITIZED_DIRECTION") #For each segment, identify connected reaches with dams as barriers #Get start point of each reach arcpy.FeatureVerticesToPoints_management(outsnsplit, netp, point_location='START') segdic = defaultdict(list) #dictionary to contain segment ID as key and SUBREACH_ID of corresponding reaches as values #Iterate over each reach print('Find connected reaches...') #################### FUTURE EDIT TO DO: WRITE DIRECTLY DIC WITH KEYS AS SUBREACH_id AND VALUE AS SEGID TO MAKE IT FASTER - FINE FOR NOW with arcpy.da.SearchCursor(netp, ['SUBREACH_ID', 'SHAPE@']) as cursor: i=0 for row in cursor: if row[0] not in set(itertools.chain.from_iterable(segdic.values())): #If reach not already part of a segment print(i) #Select all connected reaches using dams a barriers (this includes stopping reaches where dam is though) arcpy.TraceGeometricNetwork_management(in_geometric_network= geonetout,
def check_orientation(self, geometry_name, geometry_folder, networkLine, file_laisse=""): geodatabaseTopage = geodatabase() geodatabasePath = geodatabaseTopage.path(geometry_folder) arcpy.env.overwriteOutput = True if arcpy.Exists(geodatabasePath + "/" + networkLine + "_BUILDERR"): arcpy.Delete_management(geodatabasePath + "/" + networkLine + "_BUILDERR") # Sélection des entités en jointure avec la laisse ou de celles qui ont l'altitude la plus basse print("Création du fichier de l'exutoire") arcpy.MakeFeatureLayer_management(geometry_folder + networkLine, 'lyr') print file_laisse if file_laisse != "": arcpy.SelectLayerByLocation_management( 'lyr', 'INTERSECT', file_laisse, selection_type="NEW_SELECTION") if file_laisse == "" or arcpy.GetCount_management('lyr') == 0: print "le compte est : " + arcpy.GetCount_management( 'lyr').__str__() print "merci d'indiquer le fichier des laisses" return "" # Création du fichier de l'éxutoire à partir de cette sélection arcpy.FeatureVerticesToPoints_management( 'lyr', geometry_folder + networkLine + "_Exutoire", "END") # Suppression du layer arcpy.SelectLayerByAttribute_management('lyr', "CLEAR_SELECTION") arcpy.Delete_management("lyr") # Ecriture de la table des sources et des puits print("Création de la table des puits et cuvettes") arcpy.FeatureVerticesToPoints_management( geometry_folder + networkLine, geometry_folder + networkLine + "_summit", "DANGLE") # Création du réseau géométrique print("Construction du réseau géométrique") arcpy.CreateGeometricNetwork_management( geometry_folder, geometry_name, networkLine + " SIMPLE_EDGE NO;" + networkLine + "_summit SIMPLE_JUNCTION NO", "0.001", "#", "#", "#", "PRESERVE_ENABLED") print("Suppression des éléments non connectés") arcpy.gp.TraceGeometricNetwork( geometry_folder + geometry_name, "lyr", geometry_folder + networkLine + "_Exutoire", "FIND_DISCONNECTED") arcpy.CopyFeatures_management( "lyr/" + networkLine, geometry_folder + networkLine + "_disconnected") arcpy.CopyFeatures_management( "lyr/" + networkLine + "_summit", geometry_folder + networkLine + "_summit_disconnected") arcpy.DeleteFeatures_management("lyr/" + networkLine) arcpy.DeleteFeatures_management("lyr/" + networkLine + "_summit") arcpy.Delete_management("lyr") print("Recréation du réseau géométrique") arcpy.Delete_management(geometry_folder + geometry_name) arcpy.CreateGeometricNetwork_management( geometry_folder, geometry_name, networkLine + " SIMPLE_EDGE NO;" + networkLine + "_summit SIMPLE_JUNCTION YES", "0.001", "#", "#", "#", "PRESERVE_ENABLED") print("Ajout de l'exutoire") arcpy.MakeFeatureLayer_management( geometry_folder + networkLine + "_summit", 'lyr') arcpy.SelectLayerByLocation_management( 'lyr', 'INTERSECT', geometry_folder + networkLine + "_Exutoire") arcpy.CalculateField_management('lyr', 'AncillaryRole', "2", "PYTHON_9.3", "#") arcpy.SelectLayerByAttribute_management('lyr', "CLEAR_SELECTION") arcpy.Delete_management("lyr") print("Calcul du sens d'écoulement") arcpy.SetFlowDirection_management( geometry_folder + "/" + geometry_name, "WITH_DIGITIZED_DIRECTION")