博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反编译示例:mxd检查
阅读量:6261 次
发布时间:2019-06-22

本文共 3404 字,大约阅读时间需要 11 分钟。

gisoralce在博客园发布了一个,主要功能是将arcgis的mxd数据源有效性(含矢量和影像)检查、检查是否为相对路径,自动保存为相对路径。

这是一个未加壳的.NET程序,正好拿来练习,但无意侵犯gisoralce,望见谅!

首先使用dotPeek直接打开Mxdcheck.exe

右键导出为VS项目文件:

由于VS版本的问题(测试使用VS2010),需要进行自动转换

问题一:警告:设计器无法处理AutoScaleMode.Font

打开主界面,出现警告"设计器无法处理第 248 行的代码:this.AutoScaleMode = AutoScaleMode.Font;方法"InitializeComponent"内的代码由设计器生成,不应手动修改。请移除任何更改,然后尝试重新打开设计器。

处理方法是,在前面添加完整引用,必须只能这样,不知道为什么。

问题二:变量"groupBox1"未声明或从未赋值

再打开界面,又警告:变量"groupBox1"未声明或从未赋值。

而转到定义发现定义过,不知道为什么!没办法报着尝试心理,我把groupBox1全部替换成groupBox3(因为已存在groupBox2),居然还可以了,没有任何警告了!

终于可以看到界面了……

问题三:ArcGIS product not specified

调用运行,出现了老问题,未进行Runtime绑定

在代码主函数中加一句:

ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);

问题四:80040154

这是因为测试电脑是64位系统,需要将项目属性中,目标平台改为x86

问题五:所有都找不到数据源

终于可以正常运行和检查了。这个界面还是有点不美观,我自己写了一个界面,但运行检查所有的图层都找不到数据源!!明明是一样的代码,真是比较诡异!

原来是忘记了最重要的一步,没有进行权限许可:

IAoInitialize m_AoInitialize = new AoInitializeClass();

esriLicenseStatus licenseStatus = esriLicenseStatus.esriLicenseUnavailable;

licenseStatus = m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeAdvanced);

终于搞定了。

核心函数:

private void Checkonemxd(string mxdFile)        {            //1.打开文档            IMapDocument document = new MapDocumentClass();            document.Open(mxdFile, "");                        //2.检查路径            if (this.ckbSave.Checked && !document.UsesRelativePaths)            {                this.rtbLog.Text = this.rtbLog.Text + "相对路径:" + mxdFile + "\n";                document.Save(true, true);            }            //3.检查数据源            int num = document.MapCount;            for (int i = 0; i < num; i++)            {                IEnumLayer layers = document.get_Map(i).get_Layers(null, true);                layers.Reset();                ILayer layer;                while ((layer = layers.Next()) != null)                {                    //string text;                    if (layer is IFeatureLayer)                    {                        IFeatureLayer pFeatureLayer = layer as IFeatureLayer;                        if (pFeatureLayer.FeatureClass == null)                        {                            RichTextBoxEx expr_C8 = this.rtbLog;                            string text = expr_C8.Text;                            expr_C8.Text = string.Concat(new string[]                            {                                text,"文件:",mxdFile,"的图层:", layer.Name,",找不到矢量数据源\n"                            });                        }                    }                    else if (layer is IRasterLayer)                    {                        IRasterLayer pFeatureLayer2 = layer as IRasterLayer;                        if (pFeatureLayer2.Raster == null)                        {                            RichTextBoxEx expr_154 = this.rtbLog;                            string text = expr_154.Text;                            expr_154.Text = string.Concat(new string[]                            {                                text,"文件:",mxdFile,"的图层:",layer.Name,",找不到影像数据源\n"                            });                            text = this.rtbLog.Text;                            this.rtbLog.Text = text + "文件:" + mxdFile + "的图层:" + layer.Name + ",找不到影像数据源\n";                        }                    }                }            }            //4.关闭文档            document.Close();            document = null;        }

  

转载于:https://www.cnblogs.com/liweis/p/4485384.html

你可能感兴趣的文章
如何有效使用Project(2)——进度计划的执行与监控
查看>>
iOS 工作遇到问题记录
查看>>
Android 中屏幕点击事件的实现
查看>>
做为一个前端工程师,是往node方面转,还是往HTML5方面转
查看>>
spark 安装配置
查看>>
图片裁剪和异步上传插件--一步到位(记录)
查看>>
在Vs2012 中使用SQL Server 2012 Express LocalDB打开Sqlserver2012数据库
查看>>
【分享】博客美化(7)推荐几个优秀的自定义博客
查看>>
人工智能和机器学习领域的一些有趣的开源项目
查看>>
python sorted排序
查看>>
python中xrange和range的异同
查看>>
PHP根据ASCII码返回具体的字符
查看>>
atitit.系统架构图 的设计 与工具 attilax总结
查看>>
URAL 1774 A - Barber of the Army of Mages 最大流
查看>>
处理器(CPU)调度问题
查看>>
leetcode - 位运算题目汇总(下)
查看>>
多少个矩形被覆盖
查看>>
22、ASP.NET MVC入门到精通——搭建项目框架
查看>>
3-7 类的友元函数的应用
查看>>
IntelliJ IDEA安装 一些配置
查看>>