23 votos

La obtención de la medida de cada polígono en shapefile el uso de ArcPy?

En arcgis 10 y python quiero obtener el grado (xmax, ymax, xmin, ymin) información de cada uno de los polígonos en un archivo de forma.

Puedo obtener la medida de toda forma de archivo de uso

file=r"D:\SCRATCH\ARCGIS\100k_trc_tiles_TVM.shp"
desc=arcpy.Describe(file)
print desc.extent.Xmax

394551.52085039532

Pero me parece que no puede averiguar cómo obtener la misma información para cada fila del conjunto de datos.

rows = arcpy.SearchCursor("100k_trc_tiles_TVM")
for row in rows:
 print row

imprime el 31 de filas en el conjunto de datos, pero

for row in rows:
 desc=arcpy.Describe(row)
 print desc.extent.Xmax

da un error.

Error de tiempo de ejecución : Objeto: Describir entrada el valor no es válido el tipo de

Yo estaba pensando en añadir la medida en que los valores de la tabla usando "calcular la geometría", pero esto sólo le da el centroide. Entonces supongo que podemos usar algo como fila.GetValue("xmax").

Dicho esto yo sé que podemos crear en el X/Y, max/min utilizando la función de http://www.ian-ko.com/free/free_arcgis.htm pero sería mejor si podemos evitar tener que añadir campos, especialmente si arcpy puede obtener estos valores.

Básicamente necesito para obtener las extensiones para alimentar a la herramienta clip a clip de 30 áreas de datos (de acuerdo a la 1:100.000 de la hoja de mapa) para el geoprocesamiento ya que la División de la herramienta de falla debido al gran tamaño del conjunto de datos (ver Problemas con grandes conjuntos de datos). Quiero automatizar esto, ya que se repite en una serie de conjuntos de datos.

=== guión de trabajo ===

# Emulates Arc Info SPLIT tool by using Clip but
# Requires a FC from which each row is used as the input clip feature.
# Each row must be rectangular.
# Used on 12GB FGDB with 100 million records.


#Licence: Creative Commons
#Created by: George Corea; georgec@atgis.com.au, coreagc@gmail.com
import arcpy, string

#inFrame=arcpy.GetParameterAsText(0) # Input dataframe FC
#inFile=arcpy.GetParameterAsText(1) # Input FC for splitting
#outDir=arcpy.GetParameterAsText(2) # Output FGDB

inFrame=r"D:\SCRATCH\ARCGIS\100k_trc_tiles_TVM.shp"
inFile=r"c:\junk\106\data\7_Merge.gdb\FullRez_m2b"
outDir=r"D:\SCRATCH\Projects\206\datasplit\test_slaasp.gdb"
#NameField="Name_1"

#arcpy.env.workspace = r"C:/Workspace"
arcpy.env.overwriteOutput = True

rows = arcpy.SearchCursor(inFrame)
shapeName = arcpy.Describe(inFrame).shapeFieldName
for row in rows:
    feat = row.getValue(shapeName)
    Name = row.Name_1
    print "Executing clip on: "+str(Name)
    extent = feat.extent
    #print extent.XMin,extent.YMin,extent.XMax,extent.YMax
# Create an in_memory polygon
    XMAX = extent.XMax
    XMIN = extent.XMin
    YMAX = extent.YMax
    YMIN = extent.YMin
    pnt1 = arcpy.Point(XMIN, YMIN)
    pnt2 = arcpy.Point(XMIN, YMAX)
    pnt3 = arcpy.Point(XMAX, YMAX)
    pnt4 = arcpy.Point(XMAX, YMIN)
    array = arcpy.Array()
    array.add(pnt1)
    array.add(pnt2)
    array.add(pnt3)
    array.add(pnt4)
    array.add(pnt1)
    polygon = arcpy.Polygon(array)
    ShapeFile = outDir+"\\temp_poly"
    arcpy.CopyFeatures_management(polygon, ShapeFile)

    #print Name
### Set local variables
    in_features = inFile
    clip_features = ShapeFile
    out_feature_class = outDir+"\\"+Name
    xy_tolerance = "0.22"

    # Execute Clip

    try:
        arcpy.Clip_analysis(in_features, clip_features, out_feature_class, xy_tolerance)
        print "Completed: "+str(Name)
    except:
        error = arcpy.GetMessages()
        print "Failed on: "+str(Name)+" due to "+str(error)

29voto

Lucas Puntos 128

Obtener la forma del objeto en el cursor y el acceso de la extensión de la propiedad. Ver ArcGIS Ayudar a Trabajar con la geometría en Python:

shapeName = arcpy.Describe(inFeatures).shapeFieldName
for row in rows:
    feat = row.getValue(shapeName)
    extent = feat.extent
    print extent.XMin,extent.YMin,extent.XMax,extent.YMax

8voto

Jim Puntos 4057

La Delimitación Contenedor de un conjunto de herramientas de hace exactamente lo que usted desea. Debe usted sólo quiere fragmentos de código, se examinan las funciones dentro de los scripts, uno tiene que ver explícitamente con la medida.

EDITAR

Debo añadir que el script agregar valores a la Izquierda, Derecha, Superior e Inferior del campo en el archivo de salida que puede ser utilizado para su posterior procesamiento

2voto

MIHIR Puntos 11

Acabo de probar el Mínimo de Delimitación de la Geometría (Sobre) (Gestión de Datos) en ArcGIS 10 y parece hacer exactamente el mismo para todos los campos.

HTH.

1voto

Intenta capitalizar la "M" en "XMax"? Creo que se supone que debe de ser:

print desc.extent.XMax

en lugar de

print desc.extent.Xmax

de acuerdo a la documentación. Por supuesto que me hace preguntarme cómo su primer fragmento de código trabajado. De cualquier manera, darle un tiro!

0voto

sker Puntos 2670

Como se explica en la Extracción de las coordenadas de la poligonal de vértices en ArcMap? usted puede conseguir los vértices de un polígono y, a continuación, añadir las coordenadas x e y de cada vértice como campos en la tabla de atributos. Esto tiene la limitación de no adjuntar el max/min coordenadas directamente a cada polígono, pero esto puede lograrse de varias maneras.

El método que estoy más familiarizado con es leer los campos x e y en las listas de python utilizando el pyshp módulo, que puede ser ordenada para encontrar los valores máximo y mínimo para cada polígono. Pyshp puede usarse para abrir un escritor de clase para añadir nuevos campos a la original polígonos y escribir estos valores max y min para la correcta polígono.

Creo que esto puede ser hecho usando el arcpy, pero yo tenía un montón de problemas con la escritura a los archivos de forma en 9.3 uso de la geoprocessor, así que prefiero el pyshp método, sin embargo, estoy seguro si el módulo arcpy ha resuelto estos problemas.

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