¿Convertir geometría a WKT usando ArcPy?

13

Me gustaría poder convertir una sola entidad (o potencialmente muchas entidades) en una capa de ArcGIS en formato de texto bien conocido (WKT) durante una operación de geoprocesamiento utilizando Python y ArcPy (sin módulos que no sean ArcPy). El propósito es pasar el WKT a SQL Server Spatial y realizar un procesamiento adicional fuera del conjunto de herramientas de ArcGIS GP. ¿Existe algún método para convertir las características de geometría de ArcGIS a WKT a través de ArcPy?

Ya he leído lo siguiente, sin encontrar lo que busco:

Aparentemente, solía haber una herramienta llamada " Escribir características en el archivo de texto " (que parece ser un script de Python) que estaba en la caja de herramientas de Muestras, pero esa caja de herramientas quedó obsoleta en la versión 10 y no puedo encontrar una copia de la Caja de herramientas de Muestras ( Tengo v10.0) en mi máquina. Si no hay soluciones actuales, si alguien pudiera señalarme una copia de la muestra, también estaría totalmente de acuerdo con el uso de esa herramienta.

RyanKDalton
fuente

Respuestas:

25

Un da.searchcursor debería funcionar para usted.

for row in arcpy.da.SearchCursor("path2data", ["SHAPE@WKT"]):
  print row[0]

PUNTO Z (-119.53753379999995 49.854383300000052 303.14500000000407)

documento aquí: http://resources.arcgis.com/en/help/main/10.1/index.html#//002z0000001t000000

Nota : los tokens SHAPE @ JSON, SHAPE @ WKB y SHAPE @ WKT se pusieron a disposición en ArcGIS 10.1 Service Pack 1.

O, si busca la caja de herramientas de muestras como mencionó, está allí, simplemente en desuso. Puede llamar con guiones todavía. Si necesita la caja de herramientas real que puede usar, está aquí en la antigua Galería de modelos y scripts

EDITAR (ejemplo extra) ... Porque lo preguntaste muy bien: :)

for row in arcpy.da.SearchCursor("GPX_Layer", ["SHAPE@WKT"],where_clause="TYPE = 'a'"):
    print row[0]

Es lo mismo que un tipo de consulta / expresión "seleccionar por atributos". Tengo un campo llamado "TYPE" y un valor 'a'.

KHibma
fuente
+1 Por incluir el ejemplo --- ¿sería pedir demasiado para un segundo que muestre cómo where_clausese implementaría? :)
elrobis
Aunque desafortunadamente aún no tengo acceso a 10.1, finalmente pude actualizar el script de Python al que se vinculó. ¡Gracias!
RyanKDalton
+1 para "PUNTO Z" parece que el "PUNTO" no admite 3D en arco.
geogeek
5

No estoy equipado para confirmar esto, pero esta página documentando SearchCursor (arcpy.da), discutiendo el field_namesparámetro, observa lo siguiente:

DE ArcGIS Help 10.1 - SearchCursor (arcpy.da)

Se puede acceder a información adicional utilizando tokens (como OID @) en lugar de los nombres de campo:

SHAPE @ WKT : la conocida representación de texto (WKT) para la geometría OGC. Proporciona una representación portátil de un valor de geometría como una cadena de texto.

Nota: los tokens SHAPE @ JSON, SHAPE @ WKB y SHAPE @ WKT se pusieron a disposición en ArcGIS 10.1 Service Pack 1 .

¿Qué piensas?

elrobis
fuente
1
+1 Además, creo que @RyanDalton puede encontrar funciones de escritura en un archivo de texto aquí .
PolyGeo
4

Simplemente agregue esto en caso de que sea útil para alguien ...

# Convert to WKT by field name (Shape)
file_path = 'C:\shapefile.shp'
query= arcpy.SearchCursor(file_path)
for row in query:
  the_geom=row.getValue('Shape') # Get Geometry field
  wkt = the_geom.WKT # Convert to WKT, can also use WKB, JSON etc
Mate
fuente
3

La herramienta Escribir características en archivo de texto se puede encontrar aquí .

Hay una idea de ArcGIS relacionada aquí que ha atraído, en mi opinión, perplejamente pocos votos.

PolyGeo
fuente