ArcObject SDK 015 出图
1、核心出图代码
出图主要是靠IExport接口,继承该接口的类如下图所示。

出不同格式的图,实例化不同的类即可。例如导出jpg格式的图片的代码如下。
private void Export(string pMxdFilePath, string pResultFolderPath)
{
//获取参数
string myFileNameWithoutEx = System.IO.Path.GetFileNameWithoutExtension(pMxdFilePath);
string myImageFilePath = pResultFolderPath + "\\" + myFileNameWithoutEx + ".jpg";
//打开地图
var myMapDocument = new MapDocumentClass();
myMapDocument.Open(pMxdFilePath);
IPage myPage = myMapDocument.PageLayout.Page;
myPage.Border = null;
var myActiveView = myMapDocument.PageLayout as IActiveView;
//得到使用屏幕分辨率的合适尺寸
var mytagRECT2 = new tagRECT
{
left = 0,
top = 0
};
double myRatio = this._Export.Resolution / 96;
mytagRECT2.right = Convert.ToInt32(myActiveView.ExportFrame.right * myRatio);
mytagRECT2.bottom = Convert.ToInt32(myActiveView.ExportFrame.bottom * myRatio);
//设置输出范围
var myEnvelope = new EnvelopeClass();
myEnvelope.PutCoords(mytagRECT2.left, mytagRECT2.top, mytagRECT2.right, mytagRECT2.bottom);
this._Export.PixelBounds = myEnvelope;
this._Export.ExportFileName = myImageFilePath;
//输出
int myHDC = this._Export.StartExporting();
myActiveView.Output(myHDC, Convert.ToInt32(this._Export.Resolution), ref mytagRECT2, null, null);
this._Export.FinishExporting();
this._Export.Cleanup();
//清空资源
myMapDocument.Close();
}
2、复杂的批量出图
如何进行复杂批量出图呢?例如我们有以下需求,我们按天处理了一年的地质灾害风险数据,需要把他们按照指定的格式做成专题图并导出成图片。
我们分析这个需求。
1、数据是有底图的,底图可能包含行政区边界、地名、水系、主要道路等。
2、专题图的格式都是一样的,只是需要天当日的实际数据以及日期。
我们的解决方案如下。
1、根据要求创建一个Mxd文件,把底图数据添加到地图中,并设置好渲染样式等;
2、添加一个实际的业务数据,并设置好图层名称、渲染方式等;
3、添加辅助元素,例如标题、日期以及图例等,并且给需要在代码中修改的Element元素命名。
4、获取一年的实际业务数据列表,开始循环处理,循环处理的流程如下。
(1)拷贝模板Mxd文件,并重新命名;
(2)打开拷贝后的mxd文件,找到第一个图层,把数据源替换成目标数据源;
(3)循环所有Element,找到指定名称的Element,把其内容修改成正确日期;
(4)调用导出函数,把当前布局导出成图片;
(5)按照相对路径,保存mxd文件。
ArcObject SDK 015 出图的更多相关文章
- ArcObjects SDK开发 017 在ArcObject SDK 中使用Toolbox
1.Geoprocessor和IGPProcess Geoprocessor是ArcObjects SDK中定义Tool执行器.IGPProcess接口是ArcObjects SDK中定义的ArcTo ...
- 第三章 用SDK编译出第一个在Linux下的软件界面
第三章 用SDK编译出第一个在Linux下的软件界面 先创建一个工程目录“mkdir project1”,进入目录,创建main.cpp文件,编写代码如下: 代码内容暂时可以先不理解,先让程序跑起来再 ...
- 如何增强ArcGIS插值图出图效果
如何增强ArcGIS插值图出图效果 by 李远祥 在一些科研领域,经常会遇到使用插值的方式进行处理,并生成最终的插值图.插值图在ArcGIS里面非常容易生成,只要具备了采用点数据,通过ArcToolB ...
- 使用arcpy.mapping模块批量出图
出图是项目里常见的任务,有的项目甚至会要上百张图片,所以批量出土工具很有必要.arcpy.mapping就是ArcGIS里的出图模块,能快速完成一个出图工具. arcpy.mapping模块里常用 ...
- android 屏幕适配,hdpi,xhdpi,xxhdpi理解,常见出图
屏幕适配 首先理解下各个尺寸单位代表的意思 尺寸含义 px: 像素 dip: Density-independent pixel 独立像素密度 dpi: dot per inch 分辨率 ppi: p ...
- 阿里AI设计师一秒出图,小撒连连惊呼,真相是...
近期,央视<机智过人>的舞台上来了位“三超设计师”——设计能力超强:出图能力超快:抗压能力超强,成功迷惑嘉宾和现场观众,更让撒贝宁出错三连. 节目一开场,这位“设计师”就为现场嘉宾:主持人 ...
- SuperMap iClient for JavaScript image出图
SuperMap iClient for JavaScript 客户端基于openlayers 开发. 目前最高版本为811,9D产品后推荐客户使用leaflet.openlayers客户端开发. 问 ...
- ArcGIS出图调整
上周为了出一张高分辨率的结合表,大致学了一下出图的过程. (1)打开基础数据的图层属性栏,将某一项属性值显示出来,如下图设置: 注意,字体尽量设置得小一点,否则出图的时候,字太大,会很乱. (2)打开 ...
- GIS案例学习笔记-ArcGIS整图大图出图实例教程
GIS案例学习笔记-ArcGIS整图大图出图实例教程 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 1. 通过出图比例尺(1:2000),地图范围测算图纸大小. 图 ...
- 提高Mxd地图渲染出图效率的方法
测试 在ArcGIS地图渲染非常耗时,特别是标注较多时,下面是做的一些性能测试 小结 1.地图渲染的数据量是显示出图速度的关键.主要注意: (1)与数据库存储的数据量关系不大.例如数据库有1万条数 ...
随机推荐
- 查看当前linux占用的端口号
Linux 查看端口占用情况可以使用 lsof 和 netstat 命令. centos 下无法使用lsof命令:"-bash: lsof: command not found"1 ...
- for循环的注意事项
1.注意事项! 实操 可以看见上图,当{}里的循环走完后,i还存在,但是a消失了,因此{}里的变量会在每一次循环结束后释放 . 这也是为什么之前我们打印a会出错的原因:a早就已经从内存中释放了,还怎么 ...
- Git Bash 无法输入中文
场景重现 有个小伙伴的电脑上 Git Bash 里死活无法输入中文, 导致 git 提交信息没法用中文写... git commit -m "无法输入中文" 解决办法 在 Git ...
- 无耳 Solon Ai MCP,发布工具服务,使用工具服务。效果预览!
solon-ai-mcp 是 solon-ai 的扩展特性.提供 mcp 协议的支持.通过它,可以方便的发布 Tool Service,方便的使用 Tool Service. 引入依赖包 <de ...
- 🎀avif转png在线工具推荐
简介 本文为avif格式图片转png图片在线工具推荐 工具 https://convertio.co/zh/avif-png/ 使用 上传avif图片 选择转换的格式 点击转换 下载 结束
- 20241107,LeetCode 每日一题,使用 Go 计算两数相加
思路 模拟加法:链表存储的是逆序数位,因此从头节点开始,逐位相加可以模拟正常的加法.每两个节点的值相加,并记录进位. 逐节点相加: 创建一个新的链表,用于存储结果,每次将两个链表对应节点的值加上进位值 ...
- 聊聊@Autowired与@Resource的区别
1. 前言 从事过很多家公司,见过很多项目,发现@Autowired和@Resource的使用都是一样的乱, 一个项目中有使用@Autowired的,有使用@Resource的, 甚至有的类中一会儿使 ...
- 通过IP计算分析归属地
在产品中可能存在不同客户端,请求同一个服务端接口的场景. 例如小程序和App或者浏览器中,如果需要对请求的归属地进行分析,前提是需要先获取请求所在的国家或城市,这种定位通常需要主动授权,而用户一般是不 ...
- mousedown mouseenter mouseup firefox,还是通一用webkit吧,细节的坑刚刚填,毕竟现在是webkit一家大拿!
mouse,mouseup,mouseenter,mouseover,click坑呀,浏览器表现居然不一致: firefox呀 直接上代码吧,自定义个el-table的select,chrome表现正 ...
- SpringBoot——使用http2
使用http2 许多浏览器,包括Edge,仅在TLS(即HTTPS)情况下支持HTTP/2.即使服务器端配置为无TLS支持的HTTP/2,浏览器可能仍将回退到HTTP/1.1.所以我们需要有一个证书来 ...