掌握林业信息技术 共创中国蓝 加入收藏  设为首页 
您现在的位置: 主页 > 技术园地 > 林业勘测 >
分类归档
林业技术新闻
林业基础知识
植物价值
技术园地
行业标准
政策法律法规
林业软件
林业勘测内容

基于ARCGIS与PYTHON批量生成ArcMap文档和图件方法的


发布日期:2016-07-09 01:00      阅读次数:       文章摘自:未知

在林业调查规划设计中,经常需要批量生成基本图、林班图以及林区公路图等,ArcMap自带的数据驱动页已经基本能实现这些功能,然而在实际生产需要中,其未能很灵活的满足需要,比如当需要同时批量生成ArcMap文档时、需要批量导出图件为JPG、BMP等格式时、单独批量导出某个乡镇的图件时,ArcMap自带的数据驱动页未能很好的实现这些功能,而通过本程序,则能实现林业调查规划设计中更灵活的批量成图需要。
  1. 首先我们需要制作好一个在数据驱动页下设置好索引图层、字段以及比例的ArcMap文档。
  2. 借助ArcMap工具的ArcToolBox工具箱,新建一个工具箱
  3. 在新建工具箱中,添加一个脚本,之后再脚本属性中,按下图设置好参数:
得到下图的运行效果:
  1. 在脚本的属性中“验证”栏下def updateParameters(self):函数中,编写遍历ArcMap文档工作空间的核心代码:
      #以下代码是遍历“qspmxd”文档中的图层列表
      qsplyrs = arcpy.mapping.ListLayers(qspmxd)//列出“qspmxd”文档的LYR图层
      qsplayerList = []
      for qsplyr in qsplyrs://执行循环
        qsplayerList.append(qsplyr.name) //列出图层名
      uniqueLayerList = list(set(qsplayerList)) //将列出的图层名显示在下拉菜单中
      uniqueLayerList.sort()
5、依次编写获取索引图层以及索引字段
  #以下代码是依次遍历获取索引图层以及索引字段
qspseleLayer = self.params[1].value
qsplayerRef = arcpy.mapping.ListLayers(qspmxd, qspseleLayer)[0]//列出图层
qspfields = arcpy.ListFields(qsplayerRef.dataSource)
qspfieldList = []
for qspfield in qspfields: //执行循环
          qspfieldList.append(qspfield.name) //列出字段名
        uniqueFieldList = list(set(qspfieldList)) //将列出的图层名显示在下拉菜单中
        uniqueFieldList.sort()
 
  1. 获取所以字段后,将索引字段列表于“选择所以字段内容”中
qsprows = arcpy.SearchCursor(qsplayerRef.dataSource)//搜索图层的数据源
        qsprow = qsprows.next()//游标移动到下一条记录
        qsppageNameList = []//驱动页名称列表
        while qsprow://执行循环选择字段列表的记录
          if qsprow.getValue(qspfieldName) not in qsppageNameList:
            qsppageNameList.append(qsprow.getValue(qspfieldName))
          qsprow = qsprows.next()
        qsppageNameList.sort()
        
  1. 依次设置后余下的“选择成果文件夹”、“设置照片像素”等参数的内容。
  2. 进入核心代码批量导出ArcMap文档
for eachPage in pageList://执行循环导出MXD文档
    arcpy.AddMessage(str(eachPage)+".mxd")
    pageID = ddp.getPageIDFromName(str(eachPage.strip("'")))//逐页名称赋值给pageID
    ddp.currentPageID = pageID//设置pageID为当前ArcMap文档
    if tpgs == 'pdfzh':
      ddp.printPages(printerzh, "CURRENT")
      qspmxd.saveACopy(printer+str(eachPage )+".mxd")
    elif not(tpgs == 'pdfzh'):
      qspmxd.saveACopy(printer+str(eachPage )+".mxd")//另存一个ArcMap文档
  1. 批量将“选择成果文件夹”下的ArcMap文档导出为JPG或PDF图件
for qspf in os.listdir(path)://遍历文件夹下的ArcMap文档
  if qspf[-3:].lower() == 'mxd':
       if tpgs == 'jpg'://当参数选择为JPG时
       arcpy.AddMessage(str(qspf)+".jpge")
       qspmxd = arcpy.mapping.MapDocument(os.path.join(path,afile))
       arcpy.mapping.ExportToJPEG(qspmxd, os.path.join(path,afile[:-3] + 'jpg'), resolution = qspres)//导出JPG格式图件
    if tpgs == 'pdf'://当参数选择为PDF时
       arcpy.AddMessage(str(qspf)+".pdf")
       qspmxd = arcpy.mapping.MapDocument(os.path.join(path,qspf))
       arcpy.mapping.ExportToPDF(qspmxd, os.path.join(path,qspf[:-3] + 'pdf'), resolution = qspres)//导出PDF格式图件
流程步骤:在ArcMap布局视图下设置到索引图层和索引字段的数据驱动页设置—--保存MXD文档—--使用本程序打开MXD文档—--选择索引图层—--选择索引字段-----在字段内容列表中选择批量成图的记录数-----设置成果文件放置路径—--设置导出图件分辨率—--执行程序

尚未注册畅言帐号,请到后台注册