- 任务需求
- 环境与数据准备
- 代码实现
- 运行结果
实际作业中,往往需要导出一些经典的案例图斑用作参考。而能称之为经典的图斑大部分都会来源于多个不同的数据源中。接下来就实现跨数据源根据指定BSM导出指定图斑图片:
环境与数据准备1、arcgis10.2.2
2、准备一份数据源,此处使用GDB作为数据源。
3、准备提供地图要素参考信息的地图文档.mxd文件,可以在里面设置图斑信息。
# encoding:utf-8
import os.path
import arcpy
import sys
import time
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
def u(s):
if isinstance(s, unicode):
return s
elif isinstance(s, str):
try:
return s.decode('utf-8')
except Exception as e:
pass
try:
return s.decode('cp936')
except Exception:
print 'Unknow coding of {0}'.format(s)
else:
return u(str(s))
if __name__ == '__main__':
try:
output_path = r'D:\批量照片导出测试'
source_path = r'D:\批量照片导出测试\数据源.gdb'
mxd_file = u(r'D:\批量照片导出测试\模板.mxd')
tbbsms = ['A1', 'A2', 'B1', 'B2'] #
arcpy.env.overwriteOutput = True
start_time = time.time()
my_mxd = arcpy.mapping.MapDocument(mxd_file)
data_frame = arcpy.mapping.ListDataFrames(my_mxd)[0]
tar_lyr = None
for lyr in arcpy.mapping.ListLayers(my_mxd, "", data_frame):
print lyr.name
if lyr.name == 'DL':
tar_lyr = lyr
last_dataSource = tar_lyr.dataSource
for bsm in tbbsms:
tar_ly = bsm[0:1]
next_dataSource = tar_ly
if next_dataSource != last_dataSource:
tar_lyr.replaceDataSource(source_path, 'FILEGDB_WORKSPACE', next_dataSource)
last_dataSource = next_dataSource
# 按属性选择
arcpy.SelectLayerByAttribute_management(tar_lyr, "NEW_SELECTION", "BSM='{0}'".format(bsm))
# tar_lyr.definitionQuery = 'BSM =' + "'" + bsm + "'"
data_frame.zoomToSelectedFeatures() # 缩放至选中要素
arcpy.RefreshActiveView() # 刷新活动视角
# Export to picture format
png_file = os.path.join(output_path, '{0}.png'.format(bsm))
arcpy.mapping.ExportToPNG(my_mxd, png_file, data_frame, df_export_width=500, df_export_height=300,
resolution=96)
arcpy.AddMessage("{0} has been saved,Time {1}s".format("{0}.png".format(bsm), time.time() - start_time))
del my_mxd
except arcpy.ExecuteError:
print arcpy.GetMessages()
except Exception as e:
print e.message
其中方法解释:
replaceDataSource
:方法用于更改图层的工作空间或源数据集。
ExportToPNG
:以PNG形式要导出数据框。
执行上述代码后,在指定输出位置生成图片:
其中思路有来自于参考文档:
1、Python中ArcPy实现ArcGIS自动批量制图与地图要素批量设置
2、ArcGIS批量导出图片
3、Arcpy *** 作
沾衣欲湿杏花雨,吹面不寒杨柳风。 --释志南《绝句》
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)