Скрипт на питоне запуск в ArcGis

Не знаете, где задать вопрос? Задавайте здесь.
Ответить
Kat
Интересующийся
Сообщения: 40
Зарегистрирован: 08 май 2013, 11:26
Репутация: 1
Откуда: Москва

Скрипт на питоне запуск в ArcGis

Сообщение Kat » 15 апр 2014, 13:18

Здравствуйте, пишу скрипт на Python. Надо, чтобы в атрибутивную таблицу в ArcGis,записывались значения, рассчитанные по формулам в питоне.Скрипт написала,но при запуске в ArcGis-выдает ошибку:
ERROR 000714: Ошибка в скрипте Скрипт.
Error in executing: cmd.exe /C D:\GIS\Norilsk\primer2.py "D:\GIS\Norilsk\Norilsk.gdb\РассчетPython" "1" "1" "1" "1" "1" "1" "1" "11" "1" "1" "#" "#" "#" "1" "1" "1" "1" "#" "D:\GIS\Norilsk\Norilsk.gdb\РассчетPython1"
Не удалось выполнить (Скрипт).

Помогите разобраться,что сделано не так?

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

import arcpy
import math
import sys, string, os, win32com.client
gp=win32com.client.Dispatch("esriGeoprocessing.GpDispatch.1")
import sys, string, os, arcgisscripting
input_table=sys.argv[1]
A=float(sys.argv[2])
M1=float(sys.argv[3])
M2=float(sys.argv[4])
M3=float(sys.argv[5])
F=float(sys.argv[6])
H=float(sys.argv[7])
p=float(sys.argv[8])
T=float(sys.argv[9])
D=float(sys.argv[10])
Pi=3.14
w=float(sys.argv[11])
x=3
X=float(sys.argv[12])
y=float(sys.argv[13])
z=float(sys.argv[14])
l1=float(sys.argv[15])
PDK1=float(sys.argv[16])
PDK2=float(sys.argv[17])
PDK3=float(sys.argv[18])
U=float(sys.argv[19])
output_file=sys.argv[20]
curs=gp.Updatecursor(output_file)
row=curs.next()
print
row.Concent=C
curs.updaterow(row)
row=curs.next()
print
row.Rasstx=Xm
curs.updaterow(row)
row=curs.next()
print
row.Rassty=y
curs.updaterow(row)
row=curs.next()
print
row.Rasstz=z
curs.updaterow(row)
row=curs.next()
V1=(Pi*(D**2)/4)*w
f=1000*(((w**2)*D)/((H**2)*T))
if f<100: m=1/(0.67+(0.1* math.sqrt(f))+(0.34* (math.pow(f, 1./x))))
else: m=1.47/(math.pow(f, 1./x))
vm=0.65*(((V1*T)/H)**0.333)
vml=1.3*(((w**2)*D)/H)
fv=800*(vml**3)
if vm>=2: n=1
if vm<0.5: n=4.4
else: n=(0.532*(vm**2))-(2.13*(vm))+3.13
C1=(A*M1*F*m*n*p)/((H**2)*(V1*T)**0.333)
C2=(A*M2*F*m*n*p)/((H**2)*(V1*T)**0.333)
C3=(A*M3*F*m*n*p)/((H**2)*(V1*T)**0.333)
C=C1+(C2*(PDK1/PDK2))+(C3*(PDK1/PDK3))
print "C1=", C1
print "C2=", C2
print "C3=", C3
print "C=", C
if vm<=0.5: d=2.48*(1+0.28*(math.pow(fv, 1./x)))
if vm>2: d=7*math.sqrt(vm)*(1+0.28*(math.pow(f, 1./x)))
else: d=(4.95*vm)*(1+0.28*(math.pow(f, 1./x)))
Xm=((5-F)/4)*d*H
print "Xm=", Xm
if vm<=0.5: um=0.5
if vm>2: um=vm*(1+(0.12*(math.pow(f, 1./x))))
else: um=vm
if (U/um)<=1: r=(0.67*(U/um))+(1.67*((U/um)**2))-(1.34*((U/um)**3))
else: r=(3*(U/um))/((2*((U/um)**2))-(U/um)+2)
Cmi=r*C
if (U/um)<=0.25: p=3
if (U/um)>1: p=0.32*(U/um)
else: p=8.43*(1-((U/um)**3))+1
Xmi=p*Xm
if 1<(X/Xm)<=8: S1=1.13/((0.13*((X/Xm)**2))+1)
if (X/Xm)<=1: S1=(3*((X/Xm)**4))-(8*((X/Xm)**3))+(6*((X/Xm)**2))
else: S1=(X/Xm)/((3.58*((X/Xm)**2))+(35.2*(X/Xm))+120)
print "S1=", S1
c=S1*C
print "c=", c
if U<=5: ty=(U*(float(y)**2))/(float(X)**2)
else: ty=(5*(float(y)**2))/(float(X)**2)
print "ty=", ty
S2=1/((1+(5*ty)+(12.8*(ty**2))+(17*(ty**3))+(45.1*(ty**4)))**2)
print "S2=", S2
cv=S2*c
print "cv=", cv
if 1<(X/Xm)<=8: S11=1.1/((0.1*((X/Xm)**2))+1)
if (X/Xm)>80: S11=(X/Xm)/((3.58*((X/Xm)**2))-(35.2*(X/Xm))+120)
if (X/Xm)<=1: S11=(3*(X/Xm)**4)-(8*(X/Xm)**3)+(6*(X/Xm)**2)
else: S11=2.55/((0.13*((X/Xm)**2))+1)
cmx=S11*C
print "S11=", S11
print "cmx=", cmx
if (X/Xm)<=1: f1=1
if (X/Xm)>=80: f1=1
if 8<(X/Xm)<80: f1=0.25
else: f1=(0.75+(0.25*(X/Xm)))/(1+((X/(9*Xm))**3))
Umx=f1*um
if f>=100: d1=(0.28*(vml/U))+(0.034*((vml/U)**3))
if f<100: d2=(0.06*(vm)*(math.pow(f/U, 1./x)))*(0.0034*((vm/U)**3))
print "d2=", d2
b1=X/Xmi
b2=z/(1+(5*d2)*H)
if b1>1: Sz=S1*b1
else: Sz=(S1*b1)*(((1+(0.1*((b2-1)**2)))/((b1**3)+(0.1*((b2-1)**2))))*(1+(((b2+0.2)*((b1**3)-1))/(b2+((b2+0.2)*(1+0.1*((b2-1)**2)))))))
print "Sz=", Sz
cz=r*C*Sz*S2
print "cz=", cz
Umz=l1*um
print "Umz=", Umz

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

Re: Скрипт на питоне запуск в ArcGis

Сообщение doujin » 16 апр 2014, 01:04

Честно говоря, в вашем скрипте невероятно сложно разобраться. И я почти уверен, что он не делает то, что вы от него хотите. В одних только импортах у вас каша.
Этот свидетельствует о том, что вы пользуетесь ArcGIS 10 или новее:

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

import arcpy
Но следом вы используете конструкцию для создания объекта геопроцессинга, которая использовалась, если мне не изменяет память, в ArcGIS 8 или 9:

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

import sys, string, os, win32com.client
gp=win32com.client.Dispatch("esriGeoprocessing.GpDispatch.1")
Зачем? Но в следующей же строке вы еще и геопроцессинг как для ArcGIS 9.3 импортируете:

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

import sys, string, os, arcgisscripting
И дальше попытка писать какие-то значения в таблицу не верна полностью.
Я бы порекомендовал начать с прочтения и понимания PEP8. Это о том как правильно писать код на python. Отступы и читаемость кода его основная фишка, а вы плюете на нее с высоченной колокольни.
Потом какой-нибудь хороший учебник по python. Многие имеют перевод на русский язык и их можно найти в интернете.
И только потом идти в справку ArcGIS, где сказано как пользоваться курсорами для записи в таблицу.

А теперь после такого лирического отступления я задам вопрос, который и хотел: что вы подразумеваете под "запуск скрипта в ArcGIS"? Сейчас ваш скрипт рассчитан на работу из командной строки и запуск его с параметрами. Запускать его в таком виде в ArcGIS не получится. Дальше у вас два пути, либо обернуть все в функцию и работать с ней через консоль python, либо добавить скрипт в toolbox и задавать параметры там, обращаясь к ним через arcpy.GetParameter()

Ответить

Вернуться в «Я новичок!»

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

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