Processing math: 100%

5 votos

Obtener un sistema de coordenadas de un archivo raster

Estoy escribiendo un código para recorrer todos los archivos de una carpeta y reproyectarlos, utilizando un raster como referencia espacial. Tengo la sospecha de que hay una manera diferente de obtener el sistema de coordenadas de un raster. Este es mi código hasta ahora:

#Import system modules
import arcpy
import os

#Set environment
arcpy.env.workspace = "D:/Project/Joined"
arcpy.env.overwriteOutput = True

#Get list of files in Joined folder
fileList = arcpy.ListFeatureClasses()
print fileList

#Set raster as basis for coordinate system
base = "D:/Project/Data/Development.tif"
base2 = arcpy.Describe(base)
out_coor_system = arcpy.SpatialReference(base2)

#Loop through shapefiles in fileList and reproject 
for fc in fileList:
    outName = fc + '_rprj.shp'
    new = arcpy.Project_management(fc, outName, out_coor_system)

Este es el error que recibo:

File "D:/Project/Data/Reproject.py", line 16, in <module>
    out_coor_system = arcpy.SpatialReference(base2)
  File "C:\Program Files (x86)\ArcGIS\Desktop10.3\ArcPy\arcpy\arcobjects\mixins.py", line 949, in __init__
    self._arc_object.createFromFile(item)
RuntimeError: ERROR 999999: Error executing function.

Por lo que he leído, este es un error bastante genérico que lanza Python IDLE.

He hecho imprimir el código out_coor_system y estoy recibiendo: <geoprocessing spatial reference object object at 0x0D2CE830> impreso para mí. ¿Podría ser este el problema?

También quería añadir que la proyección que estoy intentando utilizar es una personalizada que utiliza mi organización. No sé si eso es relevante (parece que no debería serlo) pero quería añadirlo.

4voto

Tedy Puntos 46

Los códigos no son del todo correctos. Estás tratando de crear un spatial reference de un objeto describe objeto. Aquí hay una solución:

#Set raster as basis for coordinate system
base = "D:/Project/Data/Development.tif"
out_coor_system = arcpy.Describe (base).spatialReference

#Loop through shapefiles in fileList and reproject 
for fc in fileList:
    outName = fc + '_rprj.shp'
    new = arcpy.Project_management (fc, outName, out_coor_system)

3voto

Eelco Hoogendoorn Puntos 111

Esto me ha funcionado:

out_coor_system = arcpy.Describe(base).spatialReference

2voto

ASHUTOSH Puntos 108

si el out_coor_system te da un objeto, ¿no tendrías que especificar algo como out_coor_system.name ? porque las proyecciones se especifican dando el nombre de la proyección en el arc.Project_management args.No creo que la función sea capaz de evaluar el objeto tal y como está ahora.

2voto

Kerlix Puntos 61

Gracias a todos los que me ayudaron con esto. Acabé creando un objeto de referencia espacial a partir del raster. Lo que finalmente funcionó fue esto:

#Set raster as basis for coordinate system
base = "D:/Project/Data/Development.tif"
sr = arcpy.CreateSpatialReference_management("", base)   

#Loop through shapefiles in fileList and reproject 
for fc in fileList:
    outName = fc[:-4] + '_rprj.shp'
    new = arcpy.Project_management(fc, outName, sr)

Para ser honesto, no estoy seguro de por qué esto funcionó. Si alguien tiene alguna idea que ofrecer, sería genial.

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