проблема с CalculateField

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
elshurito
Новоприбывший
Сообщения: 1
Зарегистрирован: 21 апр 2014, 10:17
Репутация: 0

проблема с CalculateField

Сообщение elshurito » 21 апр 2014, 10:25

я пишу скрипт для ArcGis 10.2. Скрипт должен создать столбец в таблице атрибутов и занести туда данные, столбец создается, а вот данные не хотят заносится. Код:

Код: Выделить всё

#import system modules
import arcpy
import math
from arcpy import env

#Set environment options
env.workspace="C:/Users/el/ac/script1"

# Set local variables
inFeatures = "line2.shp"
fieldName = "angle1"
expression = "GetAzimuthPolyline(!Shape!)"
codeblock = """import math
def GetAzimuthPolyline(shape):
    radian = math.atan((shape.lastpoint.x - shape.firstpoint.x)/(shape.lastpoint.y - shape.firstpoint.y))
    degrees = radian * 180 / math.pi
    return degrees"""


# Execute AddField
arcpy.AddField_management(inFeatures, fieldName, "SHORT")
#print "Field has been added."

# Execute CalculateField
arcpy.CalculateField_management(inFeatures, fieldName, "GetAzimuthPolyline(!Shape!)", "PYTHON", codeblock)

Самое интересное, что если вызвать вручную калькулятор поля и ввести туда codeblock задача будет выполнена, то есть наверняка ошибка в синтаксисе CalculateField_managment, однако я в упор не вижу ее третий день, если не сложно ткните носом в ошибку.
Спойлер
Traceback (most recent call last):
File "C:\Users\el\ac\script1\scr1.py", line 35, in <module>
arcpy.CalculateField_management(inFeatures, fieldName, "GetAzimuthPolyline(!Shape!)", "PYTHON", codeblock)
File "c:\program files (x86)\arcgis\desktop10.2\arcpy\arcpy\management.py", line 3354, in CalculateField
raise e
ExecuteError: ERROR 000539: Error running expression: GetAzimuthPolyline(GPVARIANTOBJECT0)
Traceback (most recent call last):
File "<expression>", line 1, in <module>
File "<string>", line 3, in GetAzimuthPolyline
AttributeError: 'str' object has no attribute 'x'

doujin
Активный участник
Сообщения: 163
Зарегистрирован: 28 июн 2012, 01:02
Репутация: 84
Откуда: Vladivostok

Re: проблема с CalculateField

Сообщение doujin » 21 апр 2014, 12:17

Четвертый параметр у CalculateField_management должет быть:

Код: Выделить всё

"PYTHON_9.3"

Ivanych999
Участник
Сообщения: 95
Зарегистрирован: 25 ноя 2013, 16:28
Репутация: 22

Re: проблема с CalculateField

Сообщение Ivanych999 » 21 апр 2014, 13:38

Помимо параметра "PYTHON_9.3", я бы еще переписал бы выражение

Код: Выделить всё

degrees = radian * 180 / math.pi

на

Код: Выделить всё

degrees = int(radian * 180 / math.pi)
, раз уж вы пытаетесь float запихнуть в short

Ответить

Вернуться в «ArcGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 15 гостей