ArcGIS二次开发基础教程(01) :打开mxd文件,添加(.shp),(.lyr),(.mdb),(.tif;.img)等多种类型数据
程序员文章站
2022-06-12 16:55:26
...
ArcGIS二次开发基础教程(01) :打开mxd文件,添加ShapeFiles(.shp),LayerFiles(.lyr),Personal GeoDatabase(.mdb),RasterFiles(.tif;.img)等多种类型的数据
(开发环境:VS2010+ArcEngine10.2+C#)
-
打开文件对话框
openFileDialog1.Title = "打开文件"; //这里只用了五种类型的文件 openFileDailog1.Filter = "ArcMap Document(*.mxd)|*.mxd|ShapeFile(*.shp)|*.shp|Personal GeoDatabase(*.mdb)|*.mdb|LayerFile(*.lyr)|*.lyr|RasterFile(*.tif;*.img)|*.tif;*.img"; //设置不能多选 openFileDialog1.Multiselect = false; if(openFileDialog.ShowDialog() == DialogResult.OK) { //记录文件路径为全局变量 方便后面使用(变量声明未写出) path = openFileDialog1.FileName; //获取文件名 string fileName = System.IO.Path.GetFileName(path); //获取文件所在文件夹,打开工作空间需要 string directory = Syste.IO.Path.GetDirectory(path); //文件扩展名 string extention = System.IO.Path.GetExtention(path).Replace(".","").ToLower(); //判断打开为何种类型的文件,调用相应的处理函数 switch(extension) { case "mxd": OpenMXDFile(path); break; case "shp": OpenShapeFile(fileName,directory); break; case "mdb": OpenPersonalGeoDatabase(path); break; case "lyr": OpenLayerFile(path); break; case "tif": case "img": OpenRasterFile(path); break; default: MessageBox.Show("Error"); return; } axMapControl1.Refresh(); axTOCControl.Updata(); }
-
打开mxd文件
void OpenMXDFile(path) { //直接调用mapcontrol的方法打开文件,当然还有其它方法 axMapControl1.LoadMxFile(Path); }
-
shapeFile文件
void OpenShapeFile(string fileName,string directory) { //创建与数据类型相应的工作空间工厂 详情可查阅帮助文档 IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactoryClass(); //在数据所在文件夹中打开工作空间 IFeatureWorkspace featrueWorkspace = workspaceFactory.OpenFromFile(directory) as IFeatureWorkspace; //以文件名打开要素类 IFeatureClass featrueClass = featureWorkspace.OpenFeatrueClass(fileName); //创建要素图层并赋值 IFeatureLayer featureLayer = new FeatureLayerClass(); featureLayer.FeatureClass = featureClass; featureLayer.Name = featureClass.AliceName; //添加到mapcontrol中 axMapControl1.AddLayer(featureLayer); axMapControl1.Refresh(); axTOCControl1.Update(); }
-
mdb数据库
void OpenPersonalGeoDatabase(path) { //创建与数据类型相应的工作空间工厂 IWorkspaceFactory workspaceFactory = new AccessWorkspaceFactory(); //直接以数据库文件全名打开数据库 这与打开要素类工作空间不同 IWorkSpace workspace = workspaceFactory.OpenFromFile(path); //获取相应类型的数据集 IEnumDataset enumDataset = workspace.get_Datasets(esriDatasetType.esriDTFeatureClass);//是什么数据就用什么类型,这里用FeatureClass做示范,也可用esriDTany表示任意类型 IFeatureClass featrueClass = enumDataset.Next(); //遍历每个要素类创建要素图层并添加到mapcontrol中 while(featureClass != null) { IFeatureLayer layer = new FeatureLayerClass(); layer.FeatureClass = featureClass; layer.Name = featureClass.AliceName; axMapControl1.AddLayer(layer as ILayer); featrueClass = enumDataset.Next(); } axMapControl1.Refresh(); axTOCControl1.Update(); }
-
img,tif栅格数据
void OpenRasterFile(path) { //通过路径直接创建 IRasterLayer rasterLayer = new RasterLayerClass(); rasterLayer.CreateFromFile(path); axMapControl.AddLayer(rasterLayer as ILayer); }
-
还有一种最简单的添加数据的方法!!!
//直接使用AddData命令对象 这是我已知的最简单的用代码添加数据的方法
//Toolbar也提供了很多集成命令工具,以下代码也就是调用这些命令工具
ICommand icc = new ControlsAddDataCommandClass();
icc.OnCreate(axMapControl1.Object);//钩子函数
icc.OnClick();
上一篇: 估值一亿的AI核心代码现已开源
下一篇: AI环境的搭建