0

我有两个 shapefile:湖泊和城市。我需要找到离每个湖最近的城市,并将城市名称添加到湖 shapefile 中。我有:

for lake in lake_cursor:
    lake_geom = lake.Shape
    city_dist_list = [] #create a city dis list = a list of dist from one lake to each city
    for cityID in range(0, city_length-1):
        #obtaining x and y for both cities and lakes
        cityX = citylist_X_Coor[cityID]
        cityY = citylist_Y_Coor[cityID]
        lakeX = lake_geom.centroid.X
        lakeY = lake_geom.centroid.Y
        #calculate distance
        dist = math.sqrt((cityX-lakeX)**2 + (cityY-lakeY)**2)
        #add the dist to the city dist list
        city_dist_list.append(dist)
    closest = min(city_dist_list)
    closestID = city_dist_list.index(closest)

    lake.City_Name = citylist_City_Name[closestID]
    lake.X_Coor = citylist_X_Coor[closestID]
    lake.Y_Coor = citylist_Y_Coor[closestID]
    print closest

但我不断收到从 开始的错误消息lake.City_Name。python shell没有告诉我出了什么问题-有什么想法吗?以及如何解决它?谢谢!

回溯显示:

Traceback (most recent call last):
  File "C:\Users\xxx\xxx\xxx.py", line 71, in <module>
    lake.City_Name = citylist_City_Name[closestID]
  File "C:\Program Files\ArcGIS\Desktop10.1\arcpy\arcpy\arcobjects\_base.py", line 35, in __setattr__
    return setattr(self._arc_object, attr, ao)
RuntimeError: ERROR 999999: Error executing function.
4

1 回答 1

1

如果没有看到你的代码的其余部分,很难确定,但从追溯来看,它确实看起来像你正在尝试在 SearchCursor 中进行更新。SearchCursor 的行没有设置器。确保您使用的是 UpdateCursor,并且不要忘记为lake_cursor.updateRow(lake)您更新的每个湖执行一次。下面是一个如何使用 UpdateCursor 的简单示例。

import arcpy
fc = 'c:/temp/temp.shp'
rows = arcpy.UpdateCursor(fc)
for row in rows:
    print row.Mapname
    row.Mapname = 'Some Value'
    rows.updateRow(row)

del row, rows    

此示例使用常规arcpy.UpdateCursor. 如果您有 ArcGIS 10.1,那么您可以使用arcpy.da.UpdateCursor,它会运行得更快。在此处此处阅读有关这些 UpdateCursors的信息。

于 2013-05-06T01:09:55.687 回答