我想转移一些几何特征使用ArcPy。但是,每次运行脚本时都会收到以下错误消息。有什么问题吗?
import arcpy
def shift_features (in_features):
... with arcpy.da.UpdateCursor(in_features, ['SHAPE@XY','XShift',YShift']) as cursor:
... for row in cursor:
... cursor.updateRow([[row[0][0] + (row[1] or 0),
... row[0][1] + (row[2] or 0)]])
... return
... 当我说:
shape=r'E:\Yael\All Sorts\Testing\MovingPolygon.shp'
shift_features(shape)(其中形状包含字段名XShift,YShift)
我一直得到:
解析错误SyntaxError:扫描字符串文本时的EOL
发布于 2017-02-06 12:28:59
(我想您的代码是基于这个ArcPy咖啡馆的食谱的。)
当您调用cursor.updateRow时,您需要向它传递一个参数:一个与它将要使用的row列表长度相同的值列表。比如说..。
with arcpy.da.UpdateCursor(feature, ['FIELD', 'FOO', BAR']) as cursor:
for row in cursor:
print row # prints a list of 3 values -- ['a', 'b', 'c']
row[0] = 'd' # changes element 0 of list
print row # ['d', 'b', 'c']
cursor.updateRow(row) # passes ['d', 'b', 'c']我只更改了FIELD的值,但还必须返回FOO和BAR的值。我也可以缩短它:
with arcpy.da.UpdateCursor(feature, ['FIELD', 'FOO', BAR']) as cursor:
for row in cursor:
cursor.updateRow(['d', 'b', 'c']) # will work但是在列表中传递更少的值是行不通的:
with arcpy.da.UpdateCursor(feature, ['FIELD', 'FOO', BAR']) as cursor:
for row in cursor:
cursor.updateRow(['d']) # will fail(如果我传递了太多的值--列表中的元素数需要与UpdateCursor调用的字段数量相匹配,则类似地会中断。)
因此,对于您的特定情况,您需要返回SHAPE@XY、XShift和YShift的值。现在,它只得到SHAPE@XY (这是所有最初的片段食谱)。
尝试:
with arcpy.da.UpdateCursor(in_features, ['SHAPE@XY']) as cursor:
for row in cursor:
cursor.updateRow([[row[0][0] + (row[1] or 0),
row[0][1] + (row[2] or 0)]], row[1], row[2])https://stackoverflow.com/questions/42053595
复制相似问题