コード例 #1
0
def retrieve_directory_recursive(ftp, output_folder, directory):
    """
    recursively retrieves files from an ftp directory
    """

    verify_path_exists(output_folder)
    AddMessage('Navigating to {}'.format(directory))
    filenames = None
    try:
        ftp.cwd(directory)
        ftp.retrlines('LIST')
        AddMessage('Accessing files')
        filenames = ftp.nlst() # get filenames within the directory
    except Exception as inst:
        AddWarning('Could not access the directory: {}'.format(directory))
        return

    AddMessage(filenames)
    dirs = []
    for filename in filenames:
        AddMessage('Processing file: {}'.format(filename))
        local_filename = join(output_folder, filename)

        #if its a directory
        if len(filename.split('.')) == 1:
            dirs.append(join(directory, filename))
        else:
            file = open(local_filename, 'wb')
            ftp.retrbinary('RETR '+ filename, file.write)

            file.close()
    #navigate sub directories
    for d in dirs:
        folder = join(output_folder, d)
        retrieve_directory_recursive(ftp, folder, d)
コード例 #2
0
    def updateMessages(self, parameters):

        # auto create output folder
        if parameters[p_autocreate_folder].valueAsText == "true":
            path = parameters[p_export_location].valueAsText
            if not arcpy.Exists(path):
                try:
                    verify_path_exists(path)
                    parameters[p_export_location].clearMessage()
                except Exception as e:
                    parameters[p_export_location].setErrorMessage("The path you entered is not valid: {}".format(e))

        # filter the field list
        if not parameters[p_layer].hasError() and parameters[p_layer].valueAsText:
            parameters[p_title_field].filter.list = [
                f.baseName for f in arcpy.Describe(parameters[p_layer].valueAsText).fields
            ]

        # set title field to enabled if we are creating individual maps
        parameters[p_title_field].enabled = parameters[p_individual].valueAsText == "true"
コード例 #3
0
    def updateMessages(self, parameters):

        # auto create output folder
        if parameters[p_autocreate_folder].valueAsText == 'true':
            path = parameters[p_export_location].valueAsText
            if not arcpy.Exists(path):
                try:
                    verify_path_exists(path)
                    parameters[p_export_location].clearMessage()
                except Exception as e:
                    parameters[p_export_location].setErrorMessage(
                        'The path you entered is not valid: {}'.format(e))

        # filter the field list
        if not parameters[p_layer].hasError(
        ) and parameters[p_layer].valueAsText:
            parameters[p_title_field].filter.list = [
                f.baseName
                for f in arcpy.Describe(parameters[p_layer].valueAsText).fields
            ]

        # set title field to enabled if we are creating individual maps
        parameters[p_title_field].enabled = (
            parameters[p_individual].valueAsText == 'true')
コード例 #4
0
    def execute(self, parameters, messages):
        """generates the site map pdf and csv files"""

        # set up local vars for easy access
        layer = parameters[p_layer].valueAsText
        export_location = parameters[p_export_location].valueAsText
        buffer_dist = parameters[p_buffer_dist].valueAsText
        title_field = parameters[p_title_field].valueAsText
        individual = parameters[p_individual].valueAsText
        document_title = parameters[p_title].valueAsText
        current_document = arcpy.mapping.MapDocument("CURRENT")
        data_frame = arcpy.mapping.ListDataFrames(current_document)[0]

        arcpy.AddMessage(
            """layer={}; export_location={}; buffer_dist={};
                title_field={}; individual={}; document_title={};""".format(
                layer, export_location, buffer_dist, title_field, individual, document_title
            )
        )

        # generate the output workspace
        if document_title and document_title != "":
            directory = document_title
            file_name = get_safe_string(document_title)
        else:
            directory = time.strftime("%m-%d-%y-(%H.%M)")
            file_name = time.strftime("%m-%d-%y-(%H.%M)")

        export_location = os.path.join(export_location, directory)
        verify_path_exists(export_location)
        arcpy.AddMessage("Creating temp workspace: {}/{}_data.gdb".format(export_location, file_name))
        arcpy.CreateFileGDB_management(export_location, "{}_data.gdb".format(file_name))
        file_gdb = "{}/{}_data.gdb".format(export_location, file_name)

        # activate export view
        current_document.activeView = "PAGE_LAYOUT"

        # export the selected features
        arcpy.AddMessage("Exporting: layer={}, {}/selected".format(layer, file_gdb))
        arcpy.FeatureClassToFeatureClass_conversion(layer, file_gdb, "selected")

        # perform buffer if necessary
        if buffer_dist:
            # buffer and select features
            arcpy.AddMessage("Buffering and Selecting: layer={}, {}/buffer".format(layer, file_gdb))
            arcpy.Buffer_analysis(layer, "{}/buffer".format(file_gdb), buffer_dist, "FULL", "ROUND", "ALL")
            arcpy.SelectLayerByLocation_management(layer, "INTERSECT", "{}/buffer".format(file_gdb), 0, "NEW_SELECTION")
            buffer = MapDocument.add_map_layer(
                "{}/buffer".format(file_gdb), symbols["orange"], "{} Buffer".format(buffer_dist)
            )

        # export the selected features
        arcpy.AddMessage("Exporting: layer={}, {}/buffer_selected".format(layer, file_gdb))
        arcpy.FeatureClassToFeatureClass_conversion(layer, file_gdb, "buffer_selected")
        buffer_selected = MapDocument.add_map_layer(
            "{}/buffer_selected".format(file_gdb), symbols["gray"], "Buffered Features"
        )

        # add original selection
        selected = MapDocument.add_map_layer("{}/selected".format(file_gdb), symbols["red"], "Selected Features")

        # prep output pdf
        final_pdf = arcpy.mapping.PDFDocumentCreate(os.path.join(export_location, "{}_Final.pdf".format(file_name)))
        arcpy.AddMessage("exporting pdf file {}_Final.pdf to {}".format(file_name, export_location))

        # activate export view
        current_document.activeView = "PAGE_LAYOUT"

        # zoom to the extent of the buffer
        data_frame.extent = Extent.expand(buffer_selected.getExtent(), 10)

        # set the title
        current_document.title = document_title

        # clear selection in layers with selected rows
        for l in arcpy.mapping.ListLayers(current_document):
            try:
                if arcpy.Describe(l).fidSet != "":
                    # throws errors on mosaic layers
                    arcpy.SelectLayerByAttribute_management(l, "CLEAR_SELECTION")
            except:
                pass

        # export
        MapDocument.export_and_append(export_location, final_pdf)

        rows = []
        cursor = arcpy.da.SearchCursor("{}/buffer_selected".format(file_gdb, file_name), ["SHAPE@", "*"])
        for row in cursor:
            rows.append(row)
            if individual == "false":
                continue
            # generate the pdf
            if title_field in cursor.fields:
                current_document.title = row[cursor.fields.index(title_field)]
            data_frame.extent = Extent.expand(row[0].extent, 10)
            MapDocument.export_and_append(export_location, final_pdf)

        # write out csv rows
        arcpy.AddMessage("Exporting csv: {}_output.csv to {}".format(file_name, export_location))
        # open csv file as binary so it avoids windows empty lines
        csv_output = open(os.path.join(export_location, "{}_output.csv".format(file_name)), "wb")
        csv_writer = csv.writer(csv_output, delimiter=",", quoting=csv.QUOTE_ALL, dialect="excel")
        csv_writer.writerow(cursor.fields)
        csv_writer.writerows(rows)

        # save the outputs
        csv_output.close()
        final_pdf.saveAndClose()

        # open explorer
        Popen('explorer "{}"'.format(export_location.replace("/", "\\")))

        # clean up
        del cursor
コード例 #5
0
    def execute(self, parameters, messages):
        """generates the site map pdf and csv files"""

        # set up local vars for easy access
        layer = parameters[p_layer].valueAsText
        export_location = parameters[p_export_location].valueAsText
        buffer_dist = parameters[p_buffer_dist].valueAsText
        title_field = parameters[p_title_field].valueAsText
        individual = parameters[p_individual].valueAsText
        document_title = parameters[p_title].valueAsText
        current_document = arcpy.mapping.MapDocument("CURRENT")
        data_frame = arcpy.mapping.ListDataFrames(current_document)[0]

        arcpy.AddMessage("""layer={}; export_location={}; buffer_dist={};
                title_field={}; individual={}; document_title={};""".format(
            layer, export_location, buffer_dist, title_field, individual,
            document_title))

        # generate the output workspace
        if document_title and document_title != '':
            directory = document_title
            file_name = get_safe_string(document_title)
        else:
            directory = time.strftime('%m-%d-%y-(%H.%M)')
            file_name = time.strftime('%m-%d-%y-(%H.%M)')

        export_location = os.path.join(export_location, directory)
        verify_path_exists(export_location)
        arcpy.AddMessage('Creating temp workspace: {}/{}_data.gdb'.format(
            export_location, file_name))
        arcpy.CreateFileGDB_management(export_location,
                                       '{}_data.gdb'.format(file_name))
        file_gdb = '{}/{}_data.gdb'.format(export_location, file_name)

        # activate export view
        current_document.activeView = 'PAGE_LAYOUT'

        # export the selected features
        arcpy.AddMessage('Exporting: layer={}, {}/selected'.format(
            layer, file_gdb))
        arcpy.FeatureClassToFeatureClass_conversion(layer, file_gdb,
                                                    'selected')

        # perform buffer if necessary
        if buffer_dist:
            # buffer and select features
            arcpy.AddMessage(
                'Buffering and Selecting: layer={}, {}/buffer'.format(
                    layer, file_gdb))
            arcpy.Buffer_analysis(layer, '{}/buffer'.format(file_gdb),
                                  buffer_dist, 'FULL', 'ROUND', 'ALL')
            arcpy.SelectLayerByLocation_management(
                layer, 'INTERSECT', '{}/buffer'.format(file_gdb), 0,
                'NEW_SELECTION')
            buffer = MapDocument.add_map_layer('{}/buffer'.format(file_gdb),
                                               symbols['orange'],
                                               '{} Buffer'.format(buffer_dist))

        # export the selected features
        arcpy.AddMessage('Exporting: layer={}, {}/buffer_selected'.format(
            layer, file_gdb))
        arcpy.FeatureClassToFeatureClass_conversion(layer, file_gdb,
                                                    'buffer_selected')
        buffer_selected = MapDocument.add_map_layer(
            '{}/buffer_selected'.format(file_gdb), symbols['gray'],
            'Buffered Features')

        # add original selection
        selected = MapDocument.add_map_layer('{}/selected'.format(file_gdb),
                                             symbols['red'],
                                             'Selected Features')

        # prep output pdf
        final_pdf = arcpy.mapping.PDFDocumentCreate(
            os.path.join(export_location, '{}_Final.pdf'.format(file_name)))
        arcpy.AddMessage('exporting pdf file {}_Final.pdf to {}'.format(
            file_name, export_location))

        # activate export view
        current_document.activeView = 'PAGE_LAYOUT'

        #zoom to the extent of the buffer
        data_frame.extent = Extent.expand(buffer_selected.getExtent(), 10)

        #set the title
        current_document.title = document_title

        # clear selection in layers with selected rows
        for l in arcpy.mapping.ListLayers(current_document):
            try:
                if arcpy.Describe(l).fidSet != '':
                    # throws errors on mosaic layers
                    arcpy.SelectLayerByAttribute_management(
                        l, "CLEAR_SELECTION")
            except:
                pass

        # export
        MapDocument.export_and_append(export_location, final_pdf)

        rows = []
        cursor = arcpy.da.SearchCursor(
            '{}/buffer_selected'.format(file_gdb, file_name), ['SHAPE@', '*'])
        for row in cursor:
            rows.append(row)
            if individual == 'false':
                continue
            # generate the pdf
            if title_field in cursor.fields:
                current_document.title = row[cursor.fields.index(title_field)]
            data_frame.extent = Extent.expand(row[0].extent, 10)
            MapDocument.export_and_append(export_location, final_pdf)

        # write out csv rows
        arcpy.AddMessage('Exporting csv: {}_output.csv to {}'.format(
            file_name, export_location))
        # open csv file as binary so it avoids windows empty lines
        csv_output = open(
            os.path.join(export_location, '{}_output.csv'.format(file_name)),
            'wb')
        csv_writer = csv.writer(csv_output,
                                delimiter=',',
                                quoting=csv.QUOTE_ALL,
                                dialect='excel')
        csv_writer.writerow(cursor.fields)
        csv_writer.writerows(rows)

        # save the outputs
        csv_output.close()
        final_pdf.saveAndClose()

        # open explorer
        Popen('explorer "{}"'.format(export_location.replace('/', '\\')))

        # clean up
        del cursor