模型是将一系列地理处理工具串联在一起的工作流,上一个工具的输出作为下一个工具的输入。模型构建器是一个用来创建、编辑和管理模型的应用程序。
黄色圆角矩形表示工具,椭圆表示变量(大部分是数据),连接工具连接数据和工具。
如何将面(线)节点坐标转成Excel
呢?操作流程应该是:
模型的作用便是将工作流的三个步骤合成一个!首先创建一个工具箱,然后创建一个模型。
打开地理处理结果,将三个步骤分别拖进模型里。
根据输入输出用连接
工具将三个工具串联起来。多没被串起来的,多的部分用选择工具选中后删除。
单击视图中的自动布局,让模型变得美观些,然后设置输入输出参数,并为模型修改名字(右键属性更改名称,而不是重命名更改模型的标签)
不想在模型输入时已有值,编辑模型,删去输入值和输出值即可。这时整个模型会变成白色的。
模型表面上是创建好了,但是要发布和共享还要考虑一个问题,那就是中间数据的问题,中间数据如何储存呢,如果在别的机子上找不到你设置的输出路径,那这个模型出bug了。
常见的有两种解决方案。
方案一:托管在默认数据库里,每台机子都会有默认数据库,中间变量创建好再删除,默认数据库只是起到了保管的作用.
方案二:放在内存池里,把中间数据类似于临时变量,放在内存池里会是模型的访问速度更快。
工具箱版本转换
为了获得更多的运算,我们应该经常使用常量而不是变量,所以在模型中我们可以创建一个变量,然后用%…%的格式来引用这个变量,从而获得更多的运算,这就是行内模型变量的用途。
前提条件类似于编程语言中的if
…else
语句,if里面的程序块要想执行,则if括号内的判断条件必须成立,否则程序块不执行。
迭代类似于编程语言里的循环,通常有for循环,while循环等。
表中没有相应字段则添加字段,有则不加
收集值工具专用语收集迭代器的输出值或将一组多值转换为一个输入,手机值得输出可用作合并、追加、镶嵌和像元统计等工具的输入。(类似于将垃圾放在垃圾袋里,等没有垃圾可丢了,就统一丢出去)
解析路径就是解析数据来源并写入某个字段里。
在ArcGIs中使用Python,可以先写好Python代码,使用记事本写,也可以使用Pycharm等其他软件,再建一个工具箱,在工具箱的右键菜单中添加脚本,跟着向导操作就可以。
更新字段值为顺序号
#######################
import arcpy
from arcpy import env
import os
import sys
###############
##################################
fc= arcpy.GetParameterAsText(0)
fieldname= arcpy.GetParameterAsText(1)
k= arcpy.GetParameter(2)
rows = arcpy.UpdateCursor(fc)
i=k
#########################################
##
for row in rows:
row.setValue(fieldname,i)
arcpy.AddMessage("No:"+str(i))
rows.updateRow(row)
i=i+1;
矢量批量剪裁的代码
# ---------------------------------------------------------------------------
# 1.py
# (generated by ArcGIS/ModelBuilder)
# Usage: 矢量图批量切割
# 原始数据 是图层,可以多选
# 切割工具是是接幅表 或则行政
# 字段是输出mdb名称
# 输出路径
# ---------------------------------------------------------------------------
# Create Geoprocessing Object
import sys, os, string
import arcpy
from arcpy import env
defaultencoding = 'utf-8'
if sys.getdefaultencoding() != defaultencoding:
reload(sys)
sys.setdefaultencoding(defaultencoding)
arcpy.env.overwriteOutput = True
inworkspace = arcpy.GetParameterAsText(0)
arcpy.AddMessage("输入数据="+inworkspace)
clipshp = arcpy.GetParameterAsText(1)
arcpy.AddMessage("裁剪=clipshp"+clipshp)
fieldname= arcpy.GetParameterAsText(2)
arcpy.AddMessage("字段=fieldname"+fieldname)
outworkspace = arcpy.GetParameterAsText(3)
arcpy.AddMessage("输出="+outworkspace)
mdbbool = arcpy.GetParameterAsText(4)
arcpy.AddMessage("是否mdb="+mdbbool)
desc = arcpy.Describe(clipshp)
filepath=desc.CatalogPath
p=filepath.find(".mdb")
ftype="String"
for field in desc.fields:
if field.Name ==fieldname:
ftype=field.Type
break
arcpy.AddMessage(u"默认地理数据库:"+arcpy.env.scratchWorkspace)
jfb_Select=arcpy.env.scratchWorkspace+"\yl999"#不能c:\要c:\\或则 c:/
rows = arcpy.SearchCursor(clipshp)
#arcpy.AddMessage(u"5=执行到这里")
row = rows.next()
#arcpy.AddMessage(u"6=执行到这里")
while row:
#arcpy.AddMessage(u"7=执行到这里")
fieldvalue =""+ str(row.getValue(fieldname))
#arcpy.AddMessage(u"值fieldvalue="+fieldvalue)
if p>0: #mdb
Expression="["+fieldname +"]="
else:
Expression="\""+fieldname +"\"="
#arcpy.AddMessage(u"表达式Expression1="+Expression)
if ftype=="String":
Expression=Expression+"'"+fieldvalue+"'"
else:
Expression=Expression+fieldvalue
#arcpy.AddMessage(u"Expression2="+Expression)
arcpy.Select_analysis(clipshp, jfb_Select,Expression)
#arcpy.AddMessage(u"6=clipshp"+clipshp)
out_mdb=""
#arcpy.AddMessage("======================================================out_mdb"+out_mdb)
if mdbbool=="true":
out_mdb=outworkspace + "\\"+fieldvalue+".mdb" #os.path.basename(dataset)
else:
out_mdb=outworkspace + "\\"+fieldvalue+".gdb"
arcpy.AddMessage(u"out_mdb"+out_mdb)
if not arcpy.Exists(out_mdb):
if mdbbool=="true":
arcpy.CreatePersonalGDB_management(os.path.dirname(out_mdb),os.path.basename(out_mdb))
else:
arcpy.CreateFileGDB_management(os.path.dirname(out_mdb),os.path.basename(out_mdb))
#arcpy.AddMessage("88888888888888888888888888888888888888")
mydatasets= string.split(inworkspace,";")
for dataset in mydatasets:
try:
mylayer=os.path.basename(dataset)
arcpy.AddMessage(u"clip:"+dataset+" to "+out_mdb+"\\"+ mylayer)
mylayer=mylayer.replace("(","")
mylayer=mylayer.replace(")","")
arcpy.Clip_analysis(dataset, jfb_Select,out_mdb+"\\"+ mylayer, "")
except Exception, ErrorDesc:
#If an error set output boolean parameter "Error" to True.
arcpy.AddError(str(ErrorDesc))
row = rows.next()
if arcpy.Exists(jfb_Select):
arcpy.Delete_management(jfb_Select)
矢量批量合并
import sys
#############
#################################
import arcpy
import string
try:
workspace =arcpy.GetParameterAsText(0) #'C:\Users\Administrator\Desktop\\cc'
outdb =arcpy.GetParameterAsText(1) #'C:\Users\Administrator\Desktop\\lutian.mdb'
arcpy.env.workspace = workspace
arcpy.AddMessage("outdb:"+outdb)
files = arcpy.ListWorkspaces("","")
for File in files:
arcpy.AddMessage("File:"+File)
arcpy.env.workspace = outdb
fcs = arcpy.ListFeatureClasses()
for fc in fcs:
arcpy.AddMessage("fc:"+fc)
if arcpy.Exists(File + "\\" + fc):
arcpy.Append_management([ File + "\\" + fc], outdb + "\\" + fc,"NO_TEST","","")
else:
arcpy.AddMessage("not exists:"+File + "\\" + fc)
fcs = arcpy.ListTables()
for fc in fcs:
arcpy.AddMessage("fc:"+fc)
if arcpy.Exists(File + "\\" + fc):
arcpy.Append_management([File + "\\" + fc], outdb + "\\" + fc,"NO_TEST","","")
else:
arcpy.AddMessage("not exists:"+File + "\\" + fc)
dss = arcpy.ListDatasets()
for ds in dss:
arcpy.AddMessage("ds:"+ds)
arcpy.env.workspace = outdb+"\\"+ds
fcs1 = arcpy.ListFeatureClasses()
for fc1 in fcs1:
arcpy.AddMessage("fc1:"+fc1)
if arcpy.Exists(File + "\\" + ds + "\\" + fc1):
arcpy.Append_management([File + "\\" + ds + "\\" + fc1], outdb + "\\" + ds + "\\" + fc1,"NO_TEST","","")
else:
arcpy.AddMessage("not exists:"+File + "\\" + ds + "\\" + fc1)
except arcpy.ExecuteError:
arcpy.AddWarning(arcpy.GetMessages())
影像批量剪裁
import sys, os, string,types
import arcpy
from arcpy import env
arcpy.env.overwriteOutput = True
oldraster = arcpy.GetParameterAsText(0)
arcpy.AddMessage("1oldraster="+oldraster)
clipshp = arcpy.GetParameterAsText(1)
arcpy.AddMessage("2clipshp="+clipshp)
fieldname= arcpy.GetParameterAsText(2)
arcpy.AddMessage("3fieldname="+fieldname)
outworkspace= arcpy.GetParameterAsText(3)
arcpy.AddMessage("4="+outworkspace)
arcpy.CheckOutExtension("spatial")
rows = arcpy.SearchCursor(clipshp)
jfb_Select=outworkspace+"/temp.shp" #不能c:\要c:\\或则c:/
for row in rows:
try:
b=1
value=row.getValue(fieldname)
#gp.AddMessage("value="+value)
if (type(value) is types.IntType):
fieldvalue = str(value)
b=2
elif (type(value) is types.StringType): #是否string类型
fieldvalue = value
else:
fieldvalue = str(value)
arcpy.AddMessage("fieldvalue="+fieldvalue)
if b==2:
Expression="\""+fieldname +"\" ="+fieldvalue+""
else:
Expression="\""+fieldname +"\" ='"+fieldvalue+"'"
arcpy.AddMessage("Expression="+Expression+",jfb_Select="+jfb_Select+",clipshp="+clipshp)
arcpy.Select_analysis(clipshp, jfb_Select, Expression)
out_raster =outworkspace+"/"+fieldvalue+".tif"
arcpy.gp.ExtractByMask_sa(oldraster, jfb_Select, out_raster)
except Exception, ErrorDesc:
#If an error set output boolean parameter "Error" to True.
arcpy.AddError(str(ErrorDesc))
if arcpy.Exists(jfb_Select):
arcpy.Delete_management(jfb_Select)