帮我翻译以下代码:# -- coding utf-8 -- import arcpy from arcpy import env iWorkspace=arcpyGetParameterAsText0 oriShp=arcpyGetParameterAsText1 newShp=arcpyGetParameterAsText2 dist=arcpyGetParameterAsText3
-- coding: utf-8 --
import arcpy from arcpy import env
获取用户输入的参数
iWorkspace=arcpy.GetParameterAsText(0) oriShp=arcpy.GetParameterAsText(1) newShp=arcpy.GetParameterAsText(2) dist=arcpy.GetParameterAsText(3)
定义计算LEI指数的函数
def LEIFast(iWorkspace, oriShp, newShp, dist): try: arcpy.AddMessage('Step 1/2. 打开数据') print('Step 1/2. 打开数据')
# 将输入的距离参数转换为浮点数
dist=float(dist)
# 设置工作空间
env.workspace=iWorkspace
# 创建新图层,检查是否存在名为"LEI"的字段,若不存在则创建
newLayer="new_layer"
arcpy.MakeFeatureLayer_management(newShp, newLayer)
desc=arcpy.Describe(newLayer)
ifieldInfo=desc.fieldInfo
index=ifieldInfo.findfieldbyname("LEI")
if index==-1:
arcpy.AddField_management(newLayer,"LEI","DOUBLE")
# 创建原始图层,检查是否存在名为"MLEI"的字段,若不存在则创建,且默认值为100
oriLayer="oriLayer"
arcpy.MakeFeatureLayer_management(oriShp, oriLayer)
descOri=arcpy.Describe(oriLayer)
arcpy.AddMessage('Step 2/2. 计算LEI指数')
print('Step 2/2. 计算LEI指数')
# 计算LEI指数
GeometryRows=arcpy.UpdateCursor(newLayer)
for newFeature in GeometryRows:
iFDifference=newFeature.shape.buffer(dist).difference(newFeature.shape)
arcpy.SelectLayerByLocation_management(oriLayer,"INTERSECT",iFDifference)
GeometryRows2=arcpy.SearchCursor(oriLayer)
inAreaLEI=0
inAreaMLEI=0
error = 0
for oldFeature in GeometryRows2:
try:
insideArea=iFDifference.intersect(oldFeature.shape,4)
inAreaLEI+=insideArea.area
except:
error = 1
break
if error == 0:
newFeature.LEI = inAreaLEI/iFDifference.area*100
else:
newFeature.LEI = 999
GeometryRows.updateRow(newFeature)
del GeometryRows2
del GeometryRows
arcpy.AddMessage('完成!')
print('完成!')
except Exception as e:
arcpy.AddMessage("错误: " + str(e.message))
判断是否为主程序入口
if name=="main": # 测试用例 """ iWorkspace="F:\Projects\Liu\LEI\GuangZhou" oriShp="gz2005.shp" newShp="gz2010.shp" dist=200 """ # 调用LEIFast函数 LEIFast(iWorkspace, oriShp, newShp, dist)
原文地址: http://www.cveoy.top/t/topic/bspt 著作权归作者所有。请勿转载和采集!