网易首页 > 网易号 > 正文 申请入驻

ArcGIS Python批量裁剪、批量合并,MXD转图片PDF等源码

0
分享至


10.4.3ArcGIS Python其他例子 10.4.3.1 计算面层的面积 首先写好脚本如下:

import arcpyfrom arcpy import envimport os

import sys

fc= arcpy.GetParameterAsText(0)fieldname= arcpy.GetParameterAsText(1)shapeName = arcpy.Describe(fc).shapeFieldName

rows = arcpy.UpdateCursor(fc)

i=1;for row in rows:#记录循环feat = row.getValue(shapeName)row.setValue(fieldname,feat.area)arcpy.AddMessage("No:"+str(i)+":"+str(feat.area))rows.updateRow(row)

i=i+1;

保存成py文件,新建一个工具箱,工具箱右键添加->脚本,找到对应py,设置 参数,如下:

面积字段获取自面图层,面积字段是双精度,过滤器是

如果不导入脚本,必须将对应py文件到拷贝到对应位置。否则不能使用。 工具在:chp10\python\其他.tbx\UpdateCursor(计算面积), 可以直接运行,右键编辑查看代码。
10.4.3.2 更新字段值为顺序号

在:chp10\python\其他.tbx\更新字段为值顺序号,可以直接运行,右键编辑查看代码

代码如下:


import arcpyfrom arcpy import envimport os

import sys

fc= arcpy.GetParameterAsText(0)fieldname= arcpy.GetParameterAsText(1)k= arcpy.GetParameter(2) ##开始值

rows = arcpy.UpdateCursor(fc)

i=kfor row in rows:row.setValue(fieldname,i)arcpy.AddMessage("No:"+str(i))rows.updateRow(row)i=i+1;如果需要进度条代码如下:

import arcpyfrom arcpy import envimport os

import sysdefaultencoding = 'utf-8'if sys.getdefaultencoding() != defaultencoding:reload(sys)sys.setdefaultencoding(defaultencoding)

fc= arcpy.GetParameterAsText(0)fieldname= arcpy.GetParameterAsText(1)k= arcpy.GetParameter(2)num=arcpy.GetCount_management(fc)n=int(str(num))arcpy.SetProgressor("step", "更新:"+fc+",Field="+fieldname,0,n,1)rows = arcpy.UpdateCursor(fc)

i=k

for row in rows:arcpy.SetProgressorLabel("正在等待....")row.setValue(fieldname,i)arcpy.AddMessage("当前:"+str(i))rows.updateRow(row)arcpy.SetProgressorPosition()i=i+1arcpy.ResetProgressor()del row

作用:更新一个表(含要素)一个字段值为顺序号

参数如下,字段参数获取自图层

运行界面

10.4.3.3 矢量批量裁剪的代码

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

代码如下:



# 1.py
# Created on: 星期日 一月 10 2018 11:02:13 上午
# (generated by ArcGIS/ModelBuilder)
# Usage: 矢量图批量切割, by 闫磊 4个参数
# 原始数据 是图层,可以多选
# 切割工具是是接幅表 或者行政
# 字段是输出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))

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)

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

图10-53 批量裁剪参数设置界面

界面如下:

图10-54 批量裁剪运行界面

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

10.4.3.4 矢量批量合并

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

代码如下:


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())

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

图10-55 批量合并参数设置界面

运行界面如下:

图10-56 批量合并运行界面

10.4.3.5 影像批量裁剪

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

源代码如下:


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)

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

参数:

图10-57 影像批量裁剪参数设置界面

运行界面如下:

图10-58 影像批量裁剪运行界面

10.4.3.6 批量压缩数据库

在chp10\python\压缩数据.tbx\批量压缩数据库,可以直接运行,右键编辑可以查看程序源代码

源代码如下:


import arcpy
import sys
import os
from os.path import join, getsize
reload(sys)
sys.setdefaultencoding('utf8')
inpath = arcpy.GetParameterAsText(0)
for root, dirs, files in os.walk(inpath):
arcpy.env.workspace = root
workspaces = arcpy.ListWorkspaces("*", "Access")
for workspace in workspaces:
try:
arcpy.AddMessage("正在压缩mdb: " + str(workspace))
arcpy.Compact_management(workspace)
except Exception, ErrorDesc:
arcpy.AddError(str(ErrorDesc))
workspaces = arcpy.ListWorkspaces("*", "FileGDB")
for workspace in workspaces:
try:
arcpy.AddMessage("正在压缩gdb: " + str(workspace))
arcpy.Compact_management(workspace)
except Exception, ErrorDesc:
arcpy.AddError(str(ErrorDesc))

作用;批量压缩一个文件夹(含子文件夹)下所有的mdb和gdb

参数:

图10-59 批量压缩数据库参数设置界面

运行界面:

图10-60 批量压缩数据库运行界面

10.4.3.7 mxd文档批量导出图片

在:chp10\python\批量mxd转图片.tbx\mxd转图片,可直接运行,右键编辑可以查看程序源代码

源代码如下:



import arcpy
import os
import sys


indata = arcpy.GetParameterAsText(0)
outdata = arcpy.GetParameterAsText(1)
EXT = arcpy.GetParameterAsText(2)
dpi = arcpy.GetParameter(3)
EXT=EXT.upper()
for root, dirs, files in os.walk(indata): #会遍历所有文件包括子文件里的数据
arcpy.AddMessage(u"目录:" + root)
rootList=root.split('.')
n=len(rootList)
if (n<2): #不考虑进入 gdb 目录下循环
for name in files:
#arcpy.AddMessage(u"name:" + name)
mystr=name.upper()
if (mystr.endswith('.MXD')): #找到扩展名.mxd 的数据
try:
fs = os.path.join(root,name)
mxd = arcpy.mapping.MapDocument(fs)
arcpy.AddMessage(u" 保 存 了 :" + outdata+"/" +
name.split('.')[0]+"."+EXT)

if EXT=="JPG":
arcpy.mapping.ExportToJPEG(mxd,outdata +"/"+name.split('.')[0],resolution=dpi)
elif EXT=="TIF":
arcpy.mapping.ExportToTIFF(mxd,outdata +"/"+name.split('.')[0],resolution=dpi)
elif EXT=="PDF":
arcpy.mapping.ExportToPDF(mxd,outdata +"/"+name.split('.')[0],resolution=dpi)
elif EXT=="PNG":
arcpy.mapping.ExportToPNG(mxd,outdata +"/"+name.split('.')[0],resolution=dpi)
elif EXT=="EPS":
arcpy.mapping.ExportToEPS(mxd,outdata +"/"+name.split('.')[0],resolution=dpi)
elif EXT=="EMF":
arcpy.mapping.ExportToEMF(mxd,outdata +"/"+name.split('.')[0],resolution=dpi)
del mxd
except Exception, ErrorDesc:
arcpy.AddError(str(ErrorDesc))

作用;批量一个文件夹下所有的mxd导出图片,可以是PDF,JPG,PNG,TIF,EPS,EMF

参数:

图10-61 mxd转图片参数设置

扩展名是值列表

图10-62 值列表输入界面

运行界面如下:

图10-63 mxd转图片运行界面

文章来源:GISAI

如有侵权请联系删除 cehui8@qq.com

行业精选

网课 测绘师 飞手证 cors账号

网 课

测绘师

飞手证

航 测

硬 件

技 师

实战班

其 他

自助查询

页面底部→关注中测网

对话框发送【关键词】获取精选内容

矢量地图】 各省 /市 /县 shp矢量数据

ZBBZ】 CAD /CASS坐标、 标注插件

规范】 测量规范、常用Excel表格

CASS】 快捷键、高手技巧、操作视频

RTK】 南方/华测 各类RTK操作视频

GIS】 ArcGIS /MapGIS技巧、快捷键

航测】 无人机作业流程、规范、案例

资质】测绘资质查询 /申办、甲级名单

定额】 测绘生产成本定额、勘察收费

招标】 测绘地信招标信息 /公告

地图】 奥维地图、谷歌地图 下载/安装

图片】 逆天测绘图片、测绘日常实拍图

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
以军称已打击伊朗超3000目标

以军称已打击伊朗超3000目标

财联社
2026-03-25 10:46:14
美方向伊朗提出含“15项条件”的和谈方案

美方向伊朗提出含“15项条件”的和谈方案

每日经济新闻
2026-03-25 06:46:31
网传互联网疯狂裁员,计算机死了…

网传互联网疯狂裁员,计算机死了…

慧翔百科
2026-03-24 12:18:17
广东男篮最新动态!新星遭受杜峰雪藏,杜峰新职位安排出炉,徐杰强势回应客场球迷

广东男篮最新动态!新星遭受杜峰雪藏,杜峰新职位安排出炉,徐杰强势回应客场球迷

凯丰侃球
2026-03-25 10:49:20
某浓眉大眼央企,爆大丑闻!

某浓眉大眼央企,爆大丑闻!

地产八卦
2026-03-25 07:36:41
3.7万到12万+!高校思政课教师规模大增长

3.7万到12万+!高校思政课教师规模大增长

麦可思研究
2026-03-24 10:04:37
王励勤终于下狠心!伦敦世乒赛名单已有端倪,陈梦换桌,2人边缘

王励勤终于下狠心!伦敦世乒赛名单已有端倪,陈梦换桌,2人边缘

卷史
2026-03-25 10:15:51
暴瘦30磅险丧命,61岁硅谷极客用AI重读11页病历,揪出罕见血癌

暴瘦30磅险丧命,61岁硅谷极客用AI重读11页病历,揪出罕见血癌

新智元
2026-03-24 10:04:31
营收近九年首降,康师傅丢掉“饮料一哥”宝座,2025年靠涨价多赚了5亿

营收近九年首降,康师傅丢掉“饮料一哥”宝座,2025年靠涨价多赚了5亿

时代周报
2026-03-25 07:33:30
自讨苦吃,巴拿马傻眼了,抢完港口后,却发现全世界没人敢接盘

自讨苦吃,巴拿马傻眼了,抢完港口后,却发现全世界没人敢接盘

兴史兴谈
2026-03-25 09:17:09
终身追捕“台独”赖清德末日将至!美情报界交底:中国将不战而胜

终身追捕“台独”赖清德末日将至!美情报界交底:中国将不战而胜

壹知眠羊
2026-03-25 07:34:23
美以伊战事进入第二十五天,最新动态

美以伊战事进入第二十五天,最新动态

参考消息
2026-03-24 09:53:04
园林养护工夫妇攒42万买贵州茅台,持有14年,狂赚240多万

园林养护工夫妇攒42万买贵州茅台,持有14年,狂赚240多万

真实人物采访
2026-03-25 06:25:03
“全是不想坐B座的聪明人”冲上热搜!网友:可以拒绝吗?官方回应↗

“全是不想坐B座的聪明人”冲上热搜!网友:可以拒绝吗?官方回应↗

申消费
2026-03-24 10:59:18
高市拿到12年稀土大单就飘了,叫嚣反制无效,不料麻烦才开始

高市拿到12年稀土大单就飘了,叫嚣反制无效,不料麻烦才开始

疯狂小菠萝
2026-03-24 15:55:54
立陶宛总理公开认错,承认勾连台当局没有好处,还损害了对华关系

立陶宛总理公开认错,承认勾连台当局没有好处,还损害了对华关系

知法而形
2026-03-25 10:46:05
开拓者134-99胜篮网!杨瀚森100%命中率,4+3,卡马拉35分创新高

开拓者134-99胜篮网!杨瀚森100%命中率,4+3,卡马拉35分创新高

球场没跑道
2026-03-24 12:39:33
《镖人》再破纪录,打败《飞驰人生3》,登顶中国冠军

《镖人》再破纪录,打败《飞驰人生3》,登顶中国冠军

影视高原说
2026-03-24 19:32:39
“你好,由于飞机里没座位了,给你升舱去了驾驶舱”

“你好,由于飞机里没座位了,给你升舱去了驾驶舱”

民航大脑壳
2026-03-25 08:07:17
猛料!曝蒙曼教授直播翻车了,满屏的滚字,网友愤怒原因很简单

猛料!曝蒙曼教授直播翻车了,满屏的滚字,网友愤怒原因很简单

谈史论天地
2026-03-25 07:58:32
2026-03-25 11:20:49
中国测绘网
中国测绘网
中国测绘网 官方网易号
2881文章数 1950关注度
往期回顾 全部

科技要闻

红极一时却草草收场,Sora宣布正式关停

头条要闻

浙江海岛被指打响"取消中考第一枪" 有学生心态松懈

头条要闻

浙江海岛被指打响"取消中考第一枪" 有学生心态松懈

体育要闻

NBA最强左手射手,是个右撇子

娱乐要闻

张雪峰经抢救无效不幸去世 年仅41岁

财经要闻

张雪峰的多面人生:从寒门导师到教育商人

汽车要闻

智己LS8放大招 30万内8系旗舰+全线控底盘秀实力

态度原创

家居
艺术
教育
旅游
本地

家居要闻

轻奢堇天府 小资情调

艺术要闻

《百花谱》,这个春天画花不用愁!

教育要闻

今年考研复试线暴涨,部分专业涨幅超150分,湘雅医学院为何下降

旅游要闻

罗泾千亩花海盛放!以镜头为笔,定格金色春日盛景~

本地新闻

春日吃花第二站——陕西

无障碍浏览 进入关怀版