ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021-10-11

2021-10-11 16:29:57  阅读:212  来源: 互联网

标签:11 10 教程 表格 视图 官方 2021 图层 页面


【原创】记一次使用数据驱动出图,顺手开发了一个动态表格生成脚本

0、最终效果

先展示一下最终效果,PS图中没有比例尺,后期也可以加上,以是初稿(非正北视图)

image-20210927154446061

image-20210927154525097

image-20210927154538589

正北视图效果,暂时没导入底图,先看大体样式

image-20211009000948283

1、项目需求

  • 指北针
  • 定位指示器(鹰眼图指示器)
  • 当前视图对应的xy数据表格
  • 图例
  • 视图要求每个页面都正北朝上
  • 固定比例为 1:5000

样式参考 (1)

这个样式使用cad地形图做底图

image-20210927153006421

image-20210927153145385

image-20210927153240073

参考样式 (2)

这个使用的是卫星图,

image-20210927154017666

image-20210927154044377

上面两个案例参考可见行内已经有比成熟的格式,部件也是基本相同,开始往下逐一进行实现。

2、需求分析&实现

0 建立数据驱动图层

  • 需求

通过数据驱动的功能,生成数据页面,对整片河流进行固定比例的切分。

  • 实现

​ 官方对数据驱动出图有非常详细的教程,这里引用一下里面图图解,建议做数据驱动前,务必观看一遍官方的教程:官方数据驱动教程

​ 具体步骤是:

​ 1 创建对应的网格索引图层

​ 2 调整网格索引图层到合适

​ 3 根据网格索引图层生成数据驱动视图

​ 4 加入图例,表格,标题等等其他样式

创建对应的网格索引图层

image-20211008220947000

根据需求,我们需要的图都要朝向正北,需要使用格网索引要素的方式,然后手动删除多余的不需要的页面,最后获得如下正北方式的切分:

  • 使用工具创建

    image-20211008224020882

    • 1 可以看到图中选择了3个图层,一个是河流中轴线,两个河流的两岸,其实两个图层也足够。

    • 2 比例固定了 1:5000 ,输入了比例后,行数和列数将会自动计算,此时不要再修改其他数值,点击确认

    以下是生成的效果,可见大体的区域已经完成,一些视图的视区比较不合理,接下来手动调整优化

    image-20211008224315156

    手动优化,删除多余视区,居中一些视区等

    GIF 2021-10-08 22-48-25

    如果删除了视区,此时图层的字段 PageNumber 的顺序会变得缺失,记得重新修复一下,后面要用到该字段生成数据驱动的页面

    image-20211008225616647

    用vb或者py重新算一下

    image-20211011103402530

创建数据驱动视图

此处跟官方教程一样,创建一个数据视图,至此准备工作已经完成。接下来逐一实现其他需求

2.1 动态的标题

需求

标题是固定的一行文字+动态的页面展示,可以实时知道当前在第几个页面,

image-20210927163942641

实现

实现这个效果非常简单,ArcMap的数据驱动自带插入动态文本功能。

创建标题

2.2 动态的定位器图例

需求

每个页面带一个小图导航,能实时展示当前页面在全局的具体位置,相当于图集的页面和目录,只是以图片形式展示。

实现

image-20211008231629592

官方教程非常详细,这里只贴一下我的最终样式

image-20211008231523862

2.3 动态的xy坐标表格(难点)

需求

  • 获取每个页面

河道两边有多个控制点,而且没有绝对的规律,控制点的坐标最终需要生成表格显示出来,

image-20211008154346922

方案

  • 方案1 脚本实现:

    首先在每个点上面记录一个字段,这个字段保存当前点存在与哪个视图,然后通过脚本根据视图动态的生成表格,然后放到图上。表格可以通过py的图库生成,但是插入表格的位置每个视图都是不同的,而且每个表格的大小都是不同的,甚至有的视图位置实在太小页面表格需要分部分生成,怎么去获取这个插入表格的位置,怎么确定需要分多少份插入。

  • 方案2:纯手动粘贴复制

    每个页面都手动插入,位置当然也是手动了,优点就是每个视图的表格都能很好控制,位置可以处理的非常舒适,效果很好。缺点,页面当前项目是83个,每一页都要手动提取数据,然后复制表格,然后导出,工作量非常大,是没有办法中的办法。

实现

  • 方案1 脚本实现

    通过面向百度编程,很幸运,已有类似需求的案例被实现,后续发现该教程采用的方法其实官方文档也有提供,果然官方文档YYDS

    1 网上教程

    2 官方教程

    3 知乎上一个目的相似的收费教程:ArcGIS批量出图增强版(带统计表)

    无论是官方教程还是网上的教程,需要预先建立一些辅助元素,(垂直线、水平线、文字、方框)等,都无法直接通过arcpy独立完成,本人暂时也没找到可以直接新建元素的api,所以编写的脚本也需要先定义一个方框元素和文字元素。

3 使用自制脚本生成数据表格

脚本的教程还没写完,后面再记录

根据目前的需求,官方代码示例中的方法并不能很好的实现,所以最后还是自动动手做了一下轮子。但最终效果有一点出入,表格的位置没有生成在视图内部,因为暂时没找到相关api能实现。

  • 1 创建一个方框元素,并修改期元素名称,建议跟数据图层一样。

    生成的表格会继承方框元素的样色长宽,还有位置,所以你想表格在哪里生成,就将方框放到哪里

    你想表格什么样色,边框什么样式,相对的就调整方框

    01创建表格元素

  • 2 创建表格的文本元素,留意元素名称也需要指定,这里设置跟数据图层一样。

    最终我们新建了两个元素,其元素名称都是跟数据图层一样。

02创建表格内容元素

  • 3 使用原创插件可以生成当前页的数据表格,也可以批量导出,下图演示使用。

    03 在当前页面生成数据表格2

  • 4 批量导出每个视图为独立的mxd或者pdf.

    image-20211008234948530

​ 插件支持多种格式导出

image-20211008235543722

  • 5 最终生成的文件,(支持pdf,png,jpeg,mxd等格式)

    image-20211008235946763

  • 6 实现每个视图的数据表格动态位置

    因为当前插件只实现了固定位置的表格生成(根据方框元素),如果需要实现每个视图表格位置都不一样,嵌入到图片上,只能手动对导出后的mxd逐页修改,然后再批量将mxd转换为pdf输出打印。暂时没想到思路写成脚本。

4 图例和指北针

​ 图例和指北针跟普通制图一样,而且会自动根据视图更新,非常人性化。

5 遇到的坑

  • arcgis10.x 使用的python是2.x版,超多坑

    • 写脚本的时候,如果有中文注释,很容易出现未知错误,而且某些中文提示也没法很好的输出打印,2.x编码坑真的多

    • 获取参数的几个APIGetParameterAsText、GetParameter在赋值给固定变量的时候会获取失败,具体原因不明

标签:11,10,教程,表格,视图,官方,2021,图层,页面
来源: https://blog.csdn.net/mucpsing/article/details/120706124

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有