一、系统概述

1、系统简介

系统是在VS2008中利用ArcGIS Engine10.1进行的二次开发。系统主要有菜单栏、内容列表、鹰眼视图、操作面板、地图视图、布局视图等六大功能模块区。

2、功能简介

系统主要功能包括:

基础操作:新建文档、打开文档、保存文档、另存为、添加XY数据、影像导入、退出系统;

地图制图输出:添加文字、添加图例、添加数字比例尺、添加文字比例尺、添加指北针、输出JPG、输出BMP、输出PNG、输出PDF;

系统设置:皮肤选择、内容显示;

帮助:帮助文档、关于、在线支持、联系我们;

地图操作:选择、放大、缩小、平移、全幅显示;

布局操作:选择、、放大、缩小、平移、全幅显示、固定比例尺放大、固定比例尺缩小、前一视图、后一视图、1:1显示。

3、系统界面介绍

系统使用DevExpress第三方控件进行系统界面搭建。DevExpress开发的控件有很强的实力,不仅功能丰富,应用简便,而且界面华丽,更可方便定制。对于编程人员来说是个不错的选择。它的菜单栏控件更具代表,完全可以替代开发环境提供的基本控件,而让您编写的程序或软件更显专业化。它还提供完善的帮助系统,资料详尽,可以快速入手。有些高级控件更是零代码的,非常易于使用。

图1:系统主界面

图2:系统皮肤选择

二、系统环境及功能亮点

1、系统环境

开发平台

ArcGIS Engine10.1

开发工具

VS2008、IDL、DevExpress

开发语言

C#、IDL8.0

运行环境

Windows 7

数据库

其他(可扩充)

2、功能亮点

1)、 系统基础功能较为完善。基础文档操作、地图布局设置功能丰富、地图输出格式多样;

2)、 实现图层添加、移除以及属性表查看等功能;

3)、  通过调用GP工具实现“添加XY数据”功能;

4)、 通过调用IDL程序实现遥感影像波段合成功能;

图3:图层属性查看

图4:属性查看代码实现

        //属性查看private void FormAttribute_Load(object sender, EventArgs e){try{//pLayer:存储当前查询图层名称pFeatureLayer = pLayer as IFeatureLayer;pFeatureClass = pFeatureLayer.FeatureClass;pLayerFields = pFeatureLayer as ILayerFields;DataSet ds = new DataSet("dsTest");DataTable dt = new DataTable(pFeatureLayer.Name);DataColumn dc = null;for (int i = 0; i < pLayerFields.FieldCount; i++){dc = new DataColumn(pLayerFields.get_Field(i).Name);dt.Columns.Add(dc);dc = null;}IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, false);IFeature pFeature = pFeatureCursor.NextFeature();while (pFeature != null){DataRow dr = dt.NewRow();for (int j = 0; j < pLayerFields.FieldCount; j++){if (pLayerFields.FindField(pFeatureClass.ShapeFieldName) == j){dr[j] = pFeatureClass.ShapeType.ToString();}else{dr[j] = pFeature.get_Value(j);}}dt.Rows.Add(dr);pFeature = pFeatureCursor.NextFeature();}gridControl1.DataSource = dt;this.Text = pLayer.Name + "属性表";}catch (Exception ex){MessageBox.Show("属性表读取失败:" + ex.Message.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);this.Dispose();//释放资源}}

图5:添加XY数据

图6:代码实现

        //确定,创建点图层private void btOk_Click(object sender, EventArgs e){if (textEditExcel.Text == "" || ComboBoxEditX.Text == "" || ComboBoxEditY.Text == "" || textEditName.Text == "" || txyPath == null){MessageBox.Show("输入有误,请重新填写!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);}else{try{this.progressBar.EditValue = 5;//bgWorker.RunWorkerAsync();Geoprocessor GP = new Geoprocessor();//添加XY事件MakeXYEventLayer MxyLayer = new MakeXYEventLayer();//直接获取Excel表格中第一个表名MxyLayer.table = textEditExcel.Text +"\\"+ ReadExcel.GetExcelFirstTableName(textEditExcel.Text);this.progressBar.EditValue = 15;//获取经度字段MxyLayer.in_x_field = ComboBoxEditX.Text;//获取纬度字段MxyLayer.in_y_field = ComboBoxEditY.Text;this.progressBar.EditValue = 25;MxyLayer.out_layer = "result";GP.Execute(MxyLayer, null);this.progressBar.EditValue = 35;//复制要素ESRI.ArcGIS.DataManagementTools.CopyFeatures cf = new ESRI.ArcGIS.DataManagementTools.CopyFeatures();cf.in_features = "result";this.progressBar.EditValue = 45;cf.out_feature_class = txyPath;GP.Execute(cf, null);this.progressBar.EditValue = 55;//添加要素图层到MapIWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactoryClass();IFeatureWorkspace pws = workspaceFactory.OpenFromFile(gdbPath, 0) as IFeatureWorkspace;this.progressBar.EditValue = 65;IFeatureLayer pFeatureLater = new FeatureLayerClass();pFeatureLater.FeatureClass = pws.OpenFeatureClass("XY点图层_" + textEditName.Text);pFeatureLater.Name = "XY点图层_" + textEditName.Text;this.progressBar.EditValue = 75;axMapControlxy.Map.AddLayer(pFeatureLater as ILayer);axMapControlxy.Extent = axMapControlxy.FullExtent;this.progressBar.EditValue = 85;MessageBox.Show("图层创建成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);this.Dispose();this.Close();}catch(Exception ex){MessageBox.Show("图层创建失败!"+ex.Message.ToString(),"提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);}}}

图7:XY示例数据

图8:点图层创建结果

图9:波段合成

图10:结果显示

//波段合成private void btOk_Click(object sender, EventArgs e){if (lvFiles.Items.Count < 2 || textImageName.Text == "" || ImgsavePath == null){if (lvFiles.Items.Count < 2){MessageBox.Show("波段选择有误,请重新选择!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);lvFiles.Items.Clear();}else{MessageBox.Show("输入有误,请重新填写!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);}}else{try{//调用LayerStacking方法实现波段合成this.LayerStacking(ImgsavePath);//调用RasterToGDB方法将合成影像导入地理数据库中RasterToGDB(ImgsavePath);//调用DeleteFile方法实现删除合成影像DeleteFile("波段合成_" + textImageName.Text.Trim() + ".img");DeleteFile("波段合成_" + textImageName.Text.Trim() + ".hdr");}catch (Exception ex) {MessageBox.Show(ex.Message.ToString());}DialogResult re = MessageBox.Show("操作成功!是否添加显示?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);if (re == DialogResult.OK){//调用添加显示功能AddLayerToMap("波段合成_" + textImageName.Text, gdbPath, axMapControlimg);this.Close();this.Dispose();}else{this.Close();this.Dispose();}}}

注:一下为C#封装的方法,主要实现影栅格数据入库、Temp数据删除、栅格数据添加显示等功能操作!

/// <summary>/// 调用GP工具将栅格数据导入地理数据库中/// </summary>/// <param name="imagepath">生成的栅格数据路径</param>public static void RasterToGDB(string imagepath) {Geoprocessor GP = new Geoprocessor();ESRI.ArcGIS.ConversionTools.RasterToGeodatabase rasterTogeodatabase = new ESRI.ArcGIS.ConversionTools.RasterToGeodatabase();rasterTogeodatabase.Input_Rasters = imagepath;rasterTogeodatabase.Output_Geodatabase = FormMain.GDB;GP.Execute(rasterTogeodatabase, null);}/// <summary>/// 删除文件/// </summary>/// <param name="filename">文件名</param>public static void DeleteFile(string filename) {//判断文件是否存在if (File.Exists(FormMain.ImagePath +"\\"+ filename)) {//如果存在则删除File.Delete(FormMain.ImagePath +"\\"+ filename);}}/// <summary>/// 将产生的栅格数据添加到map中显示/// </summary>/// <param name="filename">栅格数据名称</param>///<param name="gdbpath">数据存放路径</param>/// <param name="axmapcontrol">Axmapcontrol</param>public static void AddLayerToMap(string filename,string gdbpath, AxMapControl axmapcontrol) {IWorkspaceFactory workspacefactory = new FileGDBWorkspaceFactoryClass();IRasterWorkspaceEx rasterworkspace = workspacefactory.OpenFromFile(gdbpath, 0) as IRasterWorkspaceEx;IRasterDataset rasterdataset = rasterworkspace.OpenRasterDataset(filename);IRasterLayer rasterlayer = new RasterLayerClass();rasterlayer.CreateFromDataset(rasterdataset);axmapcontrol.Map.AddLayer(rasterlayer as ILayer);axmapcontrol.Extent = axmapcontrol.FullExtent;}

图11:波段合成IDL代码实现

pro ENVI_LAYER_STACKING_DOIT_Record,_extra = extra
end
pro LayerStacking,paths,out_pathcompile_opt idl2;严格编译规则compile_opt idl2;载入envi的sav文件envi,/restore_base_save_files;初始化envienvi_batch_init,log_file = 'batch.LOG'  fids = lonarr(n_elements(paths))nbs = lonarr(n_elements(paths))nses = lonarr(n_elements(paths))nls = lonarr(n_elements(paths))dimses = lonarr(5,n_elements(paths))  Sum_nb = 0l  for i = 0,n_elements(paths)-1 do beginenvi_open_file,paths[i],r_fid =r_fidfids[i] = r_fid envi_file_query,fids[i],ns=ns, nl=nl, nb=nb,dims = dims  nses[i]=nsnls[i]=nlnbs[i]=nbdimses[*,i]=dimsSum_nb = Sum_nb + nbs[i]     endfor     pos = lonarr(Sum_nb)   out_proj = envi_get_projection(fid=fids[0],pixel_size=out_ps)ENVI_DOIT,'ENVI_LAYER_STACKING_DOIT',dims=dimses,FID=fids,pos=pos,OUT_NAME=out_path,$out_dt=4,interp=2, out_ps=out_ps, $ out_proj=out_proj, r_fid=r_fid
end

图12:指北针选择器

图13:添加文字及检测输入是否规范

图14:系统托盘

基于AE的GIS二次开发作业文档相关推荐

  1. C# 基于AE的GIS二次开发实例-----台风信息系统

    设计任务 课程设计的主要任务是利用GIS公共平台提供的二次开发环境开发一套"台风GIS软件",在遵循国家台风编码的基础上,实现台风的运动轨迹可视化,以及台风经过区域的经济损失评估. ...

  2. C# 基于AE的GIS二次开发 空间分析 缓冲区分析(Buffer) 相交(Intersect) 联合(Union)

    调用GP工具实现空间分析的; 需引用命名空间: using ESRI.ArcGIS.AnalysisTools;//添加引用 在Arcgis10.2\DeveloperKit10.2\DotNet\T ...

  3. C# 基于AE的GIS二次开发 基本操作方法

    使用ae前需许可认证:加在Program  main函数里面 //签入AE运行许可if (!RuntimeManager.Bind(ProductCode.Engine)){if (!RuntimeM ...

  4. C# 基于AE的GIS二次开发 要素查询操作,属性表查询操作及其属性表修改操作

    直接上代码: 要素查询 并高亮显示 模糊查询我的根据自己的表设计的,自己用基本语句是 属性表字段 LIKE '*内容*' *号为 SQL like语句里的% like '%%',在ArcGIS里是*开 ...

  5. pythoncad二次开发视频_revit二次开发|bim软件二次开发|revit二次开发教程|Revit二次开发技术文档...

    二次开发 revit二次开发|bim软件二次开发|revit二次开发教程|Revit二次开发技术文档2019-07-08赞( 0 ) 记录一下CAD二次开发的一些简单实例. 1.helloworld ...

  6. JEECG 智能开发平台二次开发帮助文档

    JEECG 智能开发平台二次开发帮助文档  http://code.google.com/p/jeecg/downloads/list

  7. 基于vol.NetCore vue低代码开发使用文档

    文章目录 一.前端 1.前端字段的label中文说明短时,this.boxOptions.labelWidth = 300 2.this.searchAfter(data, result); 3.查询 ...

  8. 修改人人商城服务器时间,修改收货地址 · 人人商城二次开发常用文档,超详细,微擎开发微擎二次开发【持续更新】 · 看云...

    # 联系微信/电话17854945210 20人团队,可实地考察,可签合同支持二次开发 ewei_shopv2/static/js/dist/foxui/js/foxui.picker.min.js ...

  9. discuz php接口文档,Discuz二次开发技术文档

    点评:Discuz二次开发基本知识总结,需要对discuz进行二次开发的朋友可以参考下. 一) Discuz!的文件系统目录 注:想搞DZ开发,就得弄懂DZ中每个文件的功能. a) Admin:后台管 ...

  10. ecshop二次开发目录文档【文件结构说明和数据库表分析】

    ecshop文件架构说明 /* ECShop 2.5.1 的结构图及各文件相应功能介绍 ECShop2.5.1_Beta upload 的目录 ┣ activity.php 活动列表 ┣ affich ...

最新文章

  1. 单纯形法(三)(概念部分)
  2. MySQL Workbench/SQLyog 高分辨率屏幕上界面模糊的解决方法
  3. Freeze 风暴导致的IOPS飙升 - 追溯与解法
  4. C#获取文件夹下指定格式的所有文件
  5. Dotfuscator使用教程
  6. js脚本锁计算机软件,JS使用插件cryptojs进行加密解密数据实例
  7. [css] 什么是FOUC?你是如何避免FOUC的?
  8. 华科一篇 20 年前硕士论文,「神预言」深圳赛格大厦晃动?导师回应
  9. 34. 二分查找左右边界
  10. openstreetmap_OpenStreetMap参加奥运会,SourceForge改造等
  11. spark学习-Spark的Core理解
  12. 微信qq一键登录php代码6,Laravel6实现第三方 微信登录
  13. gitlab一键安装 笔记
  14. j2ee和mysql怎么连接_Eclipse下配置j2ee开发环境及与MySQL数据库的连接
  15. VC2005工程常用设置系统环境变量设置
  16. php5.4 eregi,帮助将PHP eregi转换为preg_match
  17. 计算机在线使用高级,2017高会《职称计算机》Internet应用:Internet高级选项
  18. 1905 统计子岛屿
  19. 「Gitea篇」如何用Git平台账号登录建木CI
  20. 斗地主中自主出牌的游戏逻辑

热门文章

  1. w ndows7错误恢复,windows7错误恢复进不去循环 从根本上解决问题
  2. 备战数学建模36-时间序列模型2
  3. 东营网站服务器部署,联通东营服务器dns地址
  4. 正弦余弦优化算法[记录]
  5. 图片批量转换为C语言数组工具
  6. GoldWave音频混合剪辑教程
  7. 在Expression Blend中制作侧面为梯形的类棱柱体
  8. 基于Cocos2d-x游戏引擎实战开发超人
  9. word文档怎么删除论文末尾尾注的横线
  10. 如何免费下载论文资料