📄 addlayers.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Resources;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.SystemUI;
using ESRI.ArcGIS.ADF.CATIDs;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesRaster;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.DataSourcesGDB;
namespace MHGIS.AddLayer
{
[Guid("c1220f36-0f10-42f3-83c7-ef854255929b")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("AddLayer.AddLayers")]
public class AddLayers
{
private IActiveView _activeView;
public AddLayers(IActiveView activeView)
{
_activeView = activeView;
}
//一、shp文件的加载:
public void addShpLayer(string strFullPath)
{
IWorkspaceFactory pWorkspaceFactory;
IFeatureWorkspace pFeatureWorkspace;
IFeatureLayer pFeatureLayer;
//获取当前路径和文件名
if (strFullPath == "") return;
int Index = strFullPath.LastIndexOf("\\");
string filePath = strFullPath.Substring(0, Index);
string fileName = strFullPath.Substring(Index + 1);
//打开工作空间并添加shp文件
pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
//注意此处的路径是不能带文件名的
pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(filePath, 0);
pFeatureLayer = new FeatureLayerClass();
//注意这里的文件名是不能带路径的
pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(fileName);
pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;
_activeView.FocusMap.AddLayer(pFeatureLayer);
_activeView.Refresh();
}
//二、个人数据库(personGeodatabase)的加载:
public void addPGDBLayer(string strFullPath)
{
IWorkspaceFactory pWorkspaceFactory;
IFeatureWorkspace pFeatureWorkspace;
IFeatureLayer pFeatureLayer;
IFeatureDataset pFeatureDataset;
//获取当前路径和文件名
if (strFullPath == "") return;
//打开personGeodatabase,并添加图层
IWorkspaceFactory pAccessWorkspaceFactory = new AccessWorkspaceFactoryClass();
//打开工作空间并遍历数据集
IWorkspace pWorkspace = pAccessWorkspaceFactory.OpenFromFile(strFullPath, 0);
IEnumDataset pEnumDataset = pWorkspace.get_Datasets(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTAny);
pEnumDataset.Reset();
IDataset pDataset = pEnumDataset.Next();
//如果数据集是IFeatureDataset,则遍历它下面的子类
if (pDataset is IFeatureDataset)
{
pFeatureWorkspace = (IFeatureWorkspace)pAccessWorkspaceFactory.OpenFromFile(strFullPath, 0);
pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(pDataset.Name);
IEnumDataset pEnumDataset1 = pFeatureDataset.Subsets;
pEnumDataset1.Reset();
IDataset pDataset1 = pEnumDataset1.Next();
//如果子类是FeatureClass,则添加到axMapControl1中
if (pDataset1 is IFeatureClass)
{
pFeatureLayer = new FeatureLayerClass();
pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(pDataset1.Name);
pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;
_activeView.FocusMap.AddLayer(pFeatureLayer);
_activeView.Refresh();
}
}
}
//三、CAD文件的加载:
public void addCADLayer(string strFullPath)
{
IWorkspaceFactory pWorkspaceFactory;
IFeatureWorkspace pFeatureWorkspace;
IFeatureLayer pFeatureLayer;
IFeatureDataset pFeatureDataset;
//获取当前路径和文件名
if (strFullPath == "") return;
int Index = strFullPath.LastIndexOf("\\");
string filePath = strFullPath.Substring(0, Index);
string fileName = strFullPath.Substring(Index + 1);
//打开CAD数据集
pWorkspaceFactory = new CadWorkspaceFactoryClass();
pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(filePath, 0);
//打开一个要素集
pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(fileName);
//IFeaturClassContainer可以管理IFeatureDataset中的每个要素类
IFeatureClassContainer pFeatClassContainer = (IFeatureClassContainer)pFeatureDataset;
//对CAD文件中的要素进行遍历处理
for (int i = 0; i < pFeatClassContainer.ClassCount - 1; i++)
{
IFeatureClass pFeatClass = pFeatClassContainer.get_Class(i);
if (pFeatClass.FeatureType == esriFeatureType.esriFTCoverageAnnotation)
//如果是注记,则添加注记层
pFeatureLayer = new CadAnnotationLayerClass();
else
//如果是点、线、面,则添加要素层
pFeatureLayer = new FeatureLayerClass();
pFeatureLayer.Name = pFeatClass.AliasName;
pFeatureLayer.FeatureClass = pFeatClass;
_activeView.FocusMap.AddLayer(pFeatureLayer);
_activeView.Refresh();
}
}
//四、栅格数据的加载:
public void addRasterLayer(string strFullPath)
{
IWorkspaceFactory pWorkspaceFactory;
IRasterWorkspace pRasterWorkspace;
//获取当前路径和文件名
if (strFullPath == "") return;
int Index = strFullPath.LastIndexOf("\\");
string fileName = strFullPath.Substring(Index + 1);
string filePath = strFullPath.Substring(0, Index);
pWorkspaceFactory = new RasterWorkspaceFactoryClass();
pRasterWorkspace = (IRasterWorkspace)pWorkspaceFactory.OpenFromFile(filePath, 0);
IRasterDataset pRasterDataset = (IRasterDataset)pRasterWorkspace.OpenRasterDataset(fileName);
IRasterLayer pRasterLayer = new RasterLayerClass();
pRasterLayer.CreateFromDataset(pRasterDataset);
_activeView.FocusMap.AddLayer(pRasterLayer);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -