使用Python For ArcGIS的For循环使用Add Field和Field calcul

2024-10-03 15:24:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我将在这里简要介绍一下背景。我最近收到了大量的数据,这些数据都是从纸质地图上数字化的。每个地图都保存为一个单独的文件,其中包含许多记录(主要是多边形)。我的目标是将所有这些文件合并到一个shapefile或geodatabase中,这是一个非常简单的任务。但是,除了空间信息,文件中的记录没有任何区别信息,所以我想添加一个字段并用原始文件名填充它,以跟踪其出处。例如,在文件“505_dmg.shp公司“我希望每个记录在属性表中标记为“map_name”的列中有一个“505_dmg”id。我正在尝试使用Python实现这一点的自动化,感觉自己很接近了。下面是我使用的代码:

# Import system module
import arcpy
from arcpy import env
from arcpy.sa import *

# Set overwrite on/off
arcpy.env.overwriteOutput = "TRUE"

# Define workspace
mywspace = "K:/Research/DATA/ADS_data/Historic/R2_ADS_Historical_Maps/Digitized Data/Arapahoe/test"
print mywspace

# Set the workspace for the ListFeatureClass function
arcpy.env.workspace = mywspace

try:
    for shp in arcpy.ListFeatureClasses("","POLYGON",""):
        print shp
        map_name = shp[0:-4]
        print map_name
        arcpy.AddField_management(shp, "map_name", "TEXT","","","20")
        arcpy.CalculateField_management(shp, "map_name","map_name", "PYTHON")
except:
     print "Fubar, It's not working"
     print arcpy.GetMessages()
else:
     print "You're a genius Aaron"

运行此脚本时收到的输出:

^{pr2}$

看起来很成功,对吧?嗯,它已经…差不多了:为两个文件添加并填充了一个字段,它非常适合505_dmg.shp公司文件。问题是,506_dmg.shp公司在“地图名称”一栏中也被标记为“505_dmg”。虽然循环似乎部分工作,但map_name变量似乎没有更新。非常感谢您的任何想法或建议。在

谢谢

亚伦


Tags: 文件数据nameimportenvmap记录地图
1条回答
网友
1楼 · 发布于 2024-10-03 15:24:56

我收到了来自ESRI讨论板的解决方案: https://geonet.esri.com/thread/114520

基本上,在Calculate field函数中进行一个小的编辑就可以做到了。以下是有效的新代码:

arcpy.CalculateField_management(shp, "map_name","\"" + map_name + "\"", "PYTHON")  

相关问题 更多 >