在上篇博客——利用Python制作Arcgis脚本工具(上)中,记录自己制作Arcgis脚本工具,并在本机成功运行的经历。制作工具的目的之一是共享,但不幸的是,在移植工具到其他电脑上时,出现了以下错误:

利用Python制作Arcgis脚本工具(下)

 

1、已在作者本机成功运行,BUT移植报错的脚本

#coding=utf-8
import arcpy
import os
import os.path
inWorkspace = arcpy.GetParameterAsText(0)  #输入英文城市名文件所在路径,下含已转好的DAE_SHP文件夹
#inWorkspace = "D:/PythonCode_inWork/09DAE_SHP_Check/PROCESS/DATA/YANGZHOU"

#城市名自动获取
city = os.path.split(inWorkspace)[-1]

#_H合并Tile
shps_dir = inWorkspace + "/DAE_SHP"
shps = os.listdir(shps_dir)
shps_H = []
for i in shps:
    if '_H_poly.shp'  in i:
        shps_H.append(shps_dir+"/"+i)
arcpy.AddMessage('Start merging...')
#merge_name = city + "_MERGE.shp"
#merge_result = os.path.join(inWorkspace,merge_name)
merge_result = inWorkspace + "/"+ city + "_MERGE.shp"
#print merge_result
arcpy.Merge_management(shps_H,merge_result)
arcpy.AddMessage('Merging succeed!')

#按PID融合
arcpy.AddMessage('Start dissolving...')
dissolve_result = inWorkspace + "/"+ city + "_DISSOLVE.shp"
arcpy.Dissolve_management(merge_result, dissolve_result,["PID","FTYPE"])
arcpy.AddMessage('Dissolving succeed!' ) 

#与Tile面交集取反
Outline = ""
arcpy.AddMessage('Start symdiffing...')
for j in os.listdir(inWorkspace):
    if "Submit_Outline_M.shp" in j:
        Outline = j
inFeatures = inWorkspace + "/"+ Outline
updateFeatures = dissolve_result
outFeatureClass = inWorkspace + "/"+ city + "_SymDiff.shp"
arcpy.SymDiff_analysis(inFeatures, updateFeatures, outFeatureClass, "ALL",0.05)
arcpy.AddMessage('Symdiffing succeed!' )

#漏蓝结果排除边界外
blue_union = inWorkspace + "/"+ city + "_BLUE_UNION.shp"
arcpy.Clip_analysis(outFeatureClass, inFeatures, blue_union)

#拆分多部件要素
blue = inWorkspace + "/"+ city + "_BLUE.shp"
arcpy.MultipartToSinglepart_management(blue_union,blue)

#漏蓝检查提示消息
#feature_count = int(arcpy.GetCount_management(blue).getOutput(0))
feature_count = 0
if feature_count == 0:
    arcpy.AddMessage("No Blue!Congratulations!".format(feature_count))
elif feature_count == 1:
    arcpy.AddMessage("There is {0} blue gap to confirm!".format(feature_count))
else:
    arcpy.AddMessage("There are {0} blue gaps to confirm!".format(feature_count))

​

 思索、困惑、抓耳挠腮................................................原来!问题!出在!这里:

注意:

路径里最后一个"/"必须写成“\\”,写成"/"或r“\”都不行,虽然语法上都正确。

做了以上修改后,便可以移植到其他电脑上成功运行了。yes!

终于...............................................................................我又向前迈进的一步,激动、欣慰。

 

2、修改后的脚本

#coding=utf-8
import arcpy
import os
import os.path
inWorkspace = arcpy.GetParameterAsText(0)  #输入英文城市名文件所在路径,下含已转好的DAE_SHP文件夹 D:\
#inWorkspace = "D:\\PythonCode_inWork\\09DAE_SHP_Check\\PROCESS\\DATA\\YANGZHOU"

#城市名自动获取
city = os.path.split(inWorkspace)[-1]

#_H合并Tile
shps_dir = inWorkspace + "\\DAE_SHP"
shps = os.listdir(shps_dir)
shps_H = []
for i in shps:
    if '_H_poly.shp' in i:
        shps_H.append(shps_dir+"\\"+i)
arcpy.AddMessage('Start merging...')
#merge_name = city + "_MERGE.shp"
#merge_result = os.path.join(inWorkspace,merge_name)
merge_result = inWorkspace + "\\" + city + "_MERGE.shp"
#print merge_result
arcpy.Merge_management(shps_H, merge_result)
arcpy.AddMessage('Merging succeed!')

#按PID融合
arcpy.AddMessage('Start dissolving...')
dissolve_result = inWorkspace + "\\" + city + "_DISSOLVE.shp"
arcpy.Dissolve_management(merge_result, dissolve_result, ["PID", "FTYPE"])
arcpy.AddMessage('Dissolving succeed!')

#与Tile面交集取反
Outline = ""
arcpy.AddMessage('Start symdiffing...')
for j in os.listdir(inWorkspace):
    if "Submit_Outline_M.shp" in j:
        Outline = j
inFeatures = inWorkspace + "\\" + Outline
updateFeatures = dissolve_result
outFeatureClass = inWorkspace + "\\" + city + "_SymDiff.shp"
arcpy.SymDiff_analysis(inFeatures, updateFeatures, outFeatureClass, "ALL", 0.05)
arcpy.AddMessage('Symdiffing succeed!')

#拆分多部件要素
blue = inWorkspace + "\\" + city + "_BLUE.shp"
arcpy.MultipartToSinglepart_management(outFeatureClass, blue)

#漏蓝检查提示消息
feature_count = int(arcpy.GetCount_management(blue).getOutput(0))
if feature_count == 0:
    arcpy.AddMessage("No Blue!Congratulations!".format(feature_count))
elif feature_count == 1:
    arcpy.AddMessage("There is {0} blue gap to confirm!".format(feature_count))
else:
    arcpy.AddMessage("There are {0} blue gaps to confirm!".format(feature_count))

 

相关文章: