ArcGIS二次开发基础教程(01) :打开mxd文件,添加ShapeFiles(.shp),LayerFiles(.lyr),Personal GeoDatabase(.mdb),RasterFiles(.tif;.img)等多种类型的数据
(开发环境:VS+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();
历届GIS应用技能大赛开发题答案点这里,尚在不定期更新中