服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

ArcGIS Python | 矢量影像批量裁剪、合并

日期: 来源:GIS前沿收集编辑:闫磊ArcGIS



  • 矢量批量裁剪的代码

在:chp10\python\矢量批量裁剪.tbx\矢量批量裁剪,可以直接运行,右键编辑查看代码

代码如下:

# ---------------------------------------------------------------------------# 1.py# Created on: 星期日 一月 10 2018 11:02:13 上午#   (generated by ArcGIS/ModelBuilder)# Usage: 矢量图批量切割, by 闫磊 4个参数# 原始数据 是图层,可以多选# 切割工具是是接幅表 或者行政# 字段是输出mdb名称# 输出路径# ---------------------------------------------------------------------------# Create Geoprocessing Objectimport  sys, os, stringimport arcpyfrom arcpy import envdefaultencoding = '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.CatalogPathp=filepath.find(".mdb")
ftype="String"for field in desc.fields: if field.Name ==fieldname: ftype=field.Type breakarcpy.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))
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)


作用:使用一个矢量图层批量裁剪多个矢量数据,字段值是裁剪后数据库名称

批量裁剪参数设置界面


界面如下:

批量裁剪运行界面


是否mdb,勾上是mdb,不勾是gdb

  • 矢量批量合并

在:chp10\python\批量合并.tbx\数据批量合并下,可以直接运行,右键编辑可以查看代码

代码如下:

import sys##############################################import arcpyimport 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())

参数如下,工作空间可以是地理数据库(文件地理数据或者个人地理数据),也是可以一个文件夹,这里建议是数据库

批量合并参数设置界面

运行界面如下:

批量合并运行界面

  • 影像批量裁剪

在:chp10\python\影像切割.tbx\影像切割,可以直接运行,右键编辑可以查看程序源代码

源代码如下:

import sys, os, string,typesimport arcpyfrom 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)

作用:使用一个矢量数据,批量裁剪一个影像,矢量字段值是裁剪后影像的数据名,格式为tif

参数:

影像批量裁剪参数设置界面

运行界面如下:

影像批量裁剪运行界面

文章授权转载:GISAI

- END -

ArcGIS空间统计——Moran's莫兰指数
ArcGIS Pro 制图技巧
Python | ArcPy批量更新图形面积
ArcGIS 基准面介绍和坐标系分类
万物分割!Meta AI模型Segment Anything分割遥感影像,提取水系、道路、建筑...

相关阅读

  • 小米13 Ultra,终于来了

  • 「徕了徕了」。在 vivo、OPPO、华为,都已经相继发布了今年的超旗舰后。上半年的最后一款影像旗舰——小米 13 Ultra,终于,要来了。虽然此前先行发布的小米 13 和小米 13 Pro,整
  • 消灭主摄,重构光影!影像之王的决胜利器

  • 不久前,国际数据公司 IDC 曾发表对 2023 年智能手机发展状况的预测,他们表示,影像仍然会是 2023 年旗舰手机的主要竞争赛道。刚好,最近出圈的 OPPO 新一代影像旗舰 FindX6 系列
  • OPPO 终于把「影像审美」落实了

  • 在刘作虎回归 OPPO 后的「第三个作品」上,我已经看到了「科技+美学」的合力,正在重新定义 OPPO 这个品牌。文 | 张鹏国产厂商做旗舰机的方式,正在变。以前,大部分厂商都会给创新
  • 智能手机如何驯服夜晚?

  • 三星Galaxy S23系列手机,专业级的夜拍影像系统,让夜色更出色。夜晚,是生活的另一面。布拉塞在1932年出版的摄影集《夜巴黎》,一度被视为夜间摄影的鼻祖。他镜头中的巴黎独一无二

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • ArcGIS Python | 矢量影像批量裁剪、合并

  • 矢量批量裁剪的代码在:chp10\python\矢量批量裁剪.tbx\矢量批量裁剪,可以直接运行,右键编辑查看代码代码如下:# ------------------------------------------------------------
  • 隔江相望的之江与浦沿,谁更有潜力?

  • 之江和浦沿,地缘上都处在杭州的西南侧,一条钱塘江把它们分隔成两个板块,隔江相望。多年前,之江和浦沿都不是他们各自所在行政区的主角,甚至有些落寞,而近年来,随着拥江发展成为城市