我正在尝试将任何未知的投影形状文件更改为 “NAD 1983 Alaska Albers”投影。
# import arcypy and from arcpy, import os to change directory
import arcpy
from arcpy import os
# set working directory to workspace
os.chdir('C://Users/Elvis/Desktop/Spring/Geog376/Lab03/erase')
# Copy all dataset in working directory ###Need to change this back into my s drive
arcpy.CopyFeatures_management('C://Users/Elvis/Desktop/Spring/Geog376/Lab03/lab03_data/2004 _af.shp','C://Users/Elvis/Desktop/Spring/Geog376/Lab03/erase/2004_af.shp')
arcpy.CopyFeatures_management('C://Users/Elvis/Desktop/Spring/Geog376/Lab03/lab03_data/2004perimeters.shp','C://Users/Elvis/Desktop/Spring/Geog376/Lab03/erase/2004perimeters.shp')
arcpy.CopyFeatures_management('C://Users/Elvis/Desktop/Spring/Geog376/Lab03/lab03_data/AK_tundra.shp','C://Users/Elvis/Desktop/Spring/Geog376/Lab03/erase/AK_tundra.shp')
arcpy.CopyFeatures_management('C://Users/Elvis/Desktop/Spring/Geog376/Lab03/lab03_data/AK_taiga.shp','C://Users/Elvis/Desktop/Spring/Geog376/Lab03/erase/AK_taiga.shp')
# find what projection 2004_af.shp, 2004perimets.shp, AK_tundra, and AK_taiga.shp
# change the projections to the correct one (2004_af.shp)
# 2004_af.shp
desc_af = arcpy.Describe('C://Users/Elvis/Desktop/Spring/Geog376/Lab03/erase/2004_af.shp')
sr_af = desc_af.spatialReference
print "projection name: "+sr_af.PCSname
# 2004perimeters.shp
desc_perimeters = arcpy.Describe('C://Users/Elvis/Desktop/Spring/Geog376/Lab03/erase/2004perimeters.shp')
sr_perimeters = desc_perimeters.spatialReference
print "projection name: "+sr_perimeters.PCSname
# AK_tundra.shp
desc_tundra = arcpy.Describe('C://Users/Elvis/Desktop/Spring/Geog376/Lab03/erase/AK_tundra.shp')
sr_tundra = desc_tundra.spatialReference
print "projection name: "+sr_tundra.PCSname
# AK_taiga.shp
desc_taiga = arcpy.Describe('C://Users/Elvis/Desktop/Spring/Geog376/Lab03/erase/AK_taiga.shp')
sr_taiga = desc_taiga.spatialReference
print "projection name: "+sr_taiga.PCSname
# Here is where I got an error: arcpy.ListFeatureClasses
for infc in arcpy.ListFeatureClasses('2004perimeters', 'AK_tundra', 'AK_taiga'):
desc = arcpy.Describe(infc)
if desc.spatialReference.PCSname == "Unknown":
outfc = os.path.join('C://Users/Elvis/Desktop/Spring/Geog376/Lab03/erase', infc)
# Set output coordinate system
outcs = arcpy.SpatialReference('NAD 1983 Alaska Albers')
# run project tool
arcpy.Project_management(arcpy.ListFeatureClasses(infc, outfc, outcs))
# check messages
print arcpy.GetMessages()
答案 0 :(得分:0)
函数arcpy.ListFeatureClasses()
提供当前工作空间中所有要素类的列表(可以使用arcpy.env.workspace获取或设置)。除非您要使用通配符,要素类型或特定地理数据库要素数据集过滤结果,否则它不需要任何参数。如果您引用help,您会看到传递给ListFeatureClasses
的参数与其参数不一致。这就是为什么它会返回None
,而您的for
语句无法迭代None
。如果您不需要进行任何过滤,则可以使用:
arcpy.env.workspace = 'C:/Users/Elvis/Desktop/Spring/Geog376/Lab03/erase'
for infc in arcpy.ListFeatureClasses():
如果您只想迭代三个特定数据集,那么只需显式设置它们(您仍然可以使用工作空间环境来保存自己不输入完整路径名称):
arcpy.env.workspace = 'C:/Users/Elvis/Desktop/Spring/Geog376/Lab03/erase'
for infc in ['2004perimeters', 'AK_tundra', 'AK_taiga']:
ListFeatureClasses函数也不属于对Project的调用。此外,似乎项目工具无论如何都不是您需要的。 Project工具将数据从一个坐标系统投影到另一个坐标系。相反,请查看Define Projection工具。