4 votos

Automáticamente crear nuevas capas a partir de un único conjunto de datos utilizando la definición de la consulta por valores únicos en un campo

Me gustaría mostrar automáticamente una featureclass como diferentes capas basadas en un campo específico. Yo he visto un par de herramientas en línea y en XToolsPro en la categoría de Dividir por Atributos, sino que crear varios archivos de forma o clases de entidad.

Lo que me gustaría es una manera de hacer varias "capas" que muestran diferentes puntos de vista basados en las consultas de definición, pero me gustaría que todas las consultas de definición se crean automáticamente basado en el cambio en un campo específico.

Así, por ejemplo, para un campo "Estado", no serían múltiples copias de la misma capa creada, pero la definición de la consulta en cada capa se dice que el Estado="TX", Estado="AK", etc.

3voto

Brett Allen Puntos 231

Ciertamente he creado algo como esto; es un gran uso para la definición de las consultas. He aquí un copiar/pegar/modificación de una herramienta que yo he escrito. Usted tendrá que buscar cómo crear una herramienta de secuencia de comandos en una caja de herramientas. Cuando se hacen dos parámetros, uno para celebrar la entrada del shapefile/clase de entidad (tipo = Capa o Clase de entidad), y uno para entrar en la "capa" de campo (tipo = Cadena de caracteres). A continuación, utilice este código en el script que está asociada con la herramienta:

import arcpy

## get user input
datasource = arcpy.GetParameterAsText(0)
field = arcpy.GetParameterAsText(1)

## make the mxd and data frame objects
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd)[0]

## make list of unique values in field
unique_values = set([row[0] for row in arcpy.da.SearchCursor(datasource,field)])
unique_values.sort()

## iterate through the values, and make layers for each one
fieldname = arcpy.AddFieldDelimiters(datasource, field)
for value in unique_values:
    query = "{0} = '{1}'".format(fieldname,value)
    layer = arcpy.mapping.Layer(datasource)
    layer.name = value
    layer.definitionQuery = query
    arcpy.mapping.AddLayer(df, layer, "BOTTOM")

Esto es muy escueto, y usted puede añadir un montón de campanas y silbatos. Primero que yo haría es ir en la ToolValidator para la secuencia de comandos de la herramienta en sí y añadir estas líneas a la updateParameters función:

def updateParameters(self):

    if self.params[0].value:
        fieldnames = [f.name for f in arcpy.ListFields(self.params[0].value)]
        self.params[1].filter.list = fieldnames

Ahora tendrás un menú desplegable de la herramienta de diálogo con los nombres de campo, por lo que no tiene que cuidadosamente escriba el nombre del campo (porque el script no funcionará con inadecuada caso!)

Con respecto a los casos de uso: este es el esqueleto de una herramienta que he usado para crear múltiples capas de archivos kml... automatizar la creación de un montón de capas como este, aplicar una simbología estándar para cada capa, y el uso de la herramienta de mapa a KML en el documento de mapa para crear la salida. Maravillosamente útil para el intercambio de datos con los no-usuarios de SIG.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X