7 votos

Exportar a un Shapefile y mantener los valores de código de dominio

Mantengo un complejo tejido de parcelas que utiliza dominios de valor codificados para unos pocos campos. Estos son campos enteros cortos con valores de 1 a 6. Estos valores representan, por ejemplo, 1:Plan de prospección registrado integrado, 2:Plan de prospección, 3:Fotografía aérea georeferenciada, 4:Proporcionado por el gobierno, 5:Conocimiento experto, 6:Desconocido.

Así que tengo varias solicitudes de datos que deben ser proporcionados en Shapefile's. Cuando exporto mi tejido de parcela los campos obviamente no tienen sentido ya que son valores numéricos que representan códigos de precisión de los dominios.

¿Hay alguna manera de convertir este campo de un campo numérico codificado a su valor de dominio? Sé que puedo hacerlo con algo de programación de pitón, pero me pregunto si ESRI ya tiene una solución para esto.

También estoy manejando la Tela de Paquetes en una Base de Datos de Archivos.

8voto

Jake Stevenson Puntos 1113

No estoy seguro de la versión de ArcGIS con la que estás trabajando, o si te has encontrado con esto desde que lo publicaste, pero en la versión 10.1 hay un configuración del entorno en "Campos" llamado " Descripciones de los campos de transferencia ". Lo he utilizado en ocasiones en la herramienta Feature Class to Feature Class para exportar a shapefile y parece que funciona (si no te importa que tus datos de salida tengan campos adicionales añadidos para las descripciones).

En la versión 10.0 la misma herramienta, Clase de característica a clase de característica , aparentemente lo hizo de forma automática (el último punto en Uso). Sin embargo, no estoy seguro de las versiones anteriores de ArcGIS.

0 votos

Buena solución, pero ten en cuenta que esto sólo funciona cuando la salida es un shapefile (que es la pregunta original, pero a veces queremos hacer lo mismo sin pasar a shape). Si el destino es un gdb no se crean las columnas extra. :-/

0 votos

+1, esto funciona en la v10.2.2 para la salida del archivo de la geodatabase (manteniendo el valor de la descripción en los distintos campos del dominio)

6voto

Mike Roosa Puntos 1877
  1. Cree tablas de búsqueda como las que describe @GeoKelvin. O utilizar la herramienta Dominio a la mesa para crear una tabla de búsqueda.
  2. Unir la tabla de búsqueda a la clase de características
  3. Exportar clase de característica a Shapefile

Esto se puede automatizar con Modellbuilder.

0 votos

Yo usaría la herramienta Domain To Table en el paso 1 y usar ModelBuilder aquí para sutomar los tres pasos también tiene sentido.

0 votos

Esta es la respuesta más versátil hasta ahora, ya que funcionará para una variedad de formatos de salida, no sólo shapefiles. Además, el uso de "Feature Class to Feature Class" en lugar de exportar permitirá incluir/excluir campos específicos.

4voto

Podría crear archivos CSV para sus códigos de dominio que pueden ser distribuidos con los shapefiles. Utilizando sus valores de ejemplo, cree SourceCode.csv para que se vea así:

SourceCode,Source
1,Integrated Registered Survey Plan
2,Survey Plan
3,Geo-Referenced Air Photography
4,Government Provided
5,Expert Knowledge
6,Unknown

Si distribuye los archivos CSV junto con sus shapefiles, el destinatario podrá unir las tablas y obtener el significado. Esto evitará que tenga que mantener una copia separada de sus datos espaciales para su distribución, o que tenga que calcular los valores cada vez que tenga que distribuir los datos (ambos suponiendo que no mantenga el nuevo atributo en los datos de producción).

2voto

Örjan Jämte Puntos 3127

Podrías hacerlo con Python, pero si no estás familiarizado con Arcpy, es un simple cálculo de campo. Añade un nuevo campo de texto y utiliza esto en la calculadora de campo.

BLOQUE DE CÓDIGO:

def domain(field):
 if field == 1: return "Integrated Registered Survey Plan"
 elif field == 2: return "Survey Plan"
 elif field == 3: return "Geo-Referenced Air Photography"
 elif field == 4: return "Government Provided"
 elif field == 5: return "Expert Knowledge"
 else: return "Unknown"

EXPRESIÓN:

domain(<reference to field containing domain values>)

A posteriori, es más fácil utilizar la calculadora de campo que andar con diccionarios y cursores. Si tuvieras que codificar una gran cantidad de valores de dominio, entonces valdría la pena volcar los datos en un archivo .txt y crear tu diccionario a partir de él.

Sólo he probado esto en un shapefile, pero también debería funcionar en un GDB. Este script toma una capa de características, una lista de campos y un archivo de texto como entrada y crea nuevos campos para poblar sus valores de dominio.

import arcpy

shpin = arcpy.GetParameterAsText(0) #Input shapefile.
#String of field(s) to loop over, split into list.
fields = arcpy.GetParameterAsText(1).split(";")
#The text file containing comma separated find/replace values. 
textfile = arcpy.GetParameterAsText(2)    

values = [str(row[i]) for row in arcpy.da.SearchCursor(shpin, fields) 
          for i,field in enumerate(fields)]
repfind = dict([line.rstrip().split(",") for line in open(textfile, "r")])  

replaced = [repfind.get(x,x) for x in values] #Use .get method to mimic find/replace.   
rep_list = zip(*[iter(replaced)]*len(fields)) #Convert to list of lists. 

#Add new fields, with name based on old field name with appended underscore.
[arcpy.AddField_management(shpin, "{0}_".format(field), "Text") for field in fields]
newfields = ["{0}_".format(field) for field in fields]

with arcpy.da.UpdateCursor(shpin, newfields) as rowout: 
    for x, row in enumerate(rowout):
        for y, field in enumerate(fields):                
            row[y] = rep_list[x][y]
        rowout.updateRow(row)

0 votos

Sí, sé que podría hacer esto. Pero tengo unos 4 campos de dominio. Sé que todo esto se podría hacer añadiendo nuevos campos y haciendo algunos cálculos de arcpy. Pero, me preguntaba principalmente si ESRI tenía algún tipo de variable de entorno o herramienta de exportación que lleva los dominios al shapefile.

0 votos

Nunca uso GDB, así que no sabría decirte. Voy a trabajar en la escritura de un script que hace esto como voy a tener un uso para este punto en el camino.

1 votos

Los GDB son bastante importantes para mí porque la topología es absolutamente crucial para mantener un tejido parcelario catastral. Probablemente también elaboraré un script si no hay una respuesta fácil. Ya tengo una pequeña herramienta rápida que recorta todos mis datos dentro de un AOI a un Shapefile. No sería una cantidad masiva de trabajo para incluir su idea dentro de ella. Pero estoy explorando otras opciones antes de hacer todo ese trabajo.

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