コード例 #1
0
    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'
            )

#-------------------------------------------------------------------------------
コード例 #3
0
            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(
コード例 #4
0
    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,
コード例 #5
0
    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")