ArcEngine加载地图的多种方式
以下加载地图的方法需要写在静态类中,可直接调用
1. 加载shp
/// <summary>
/// 添加shp方法
/// </summary>
/// <param name="strFileName">shp的文件路径</param>
/// <returns>返回结果类型为图层类型</returns>
public static ILayer AddShape(string strFileName)
{
//获取路径
string WorkSpacePath = System.IO.Path.GetDirectoryName(strFileName);
//获取文件名
string strShpFileName = System.IO.Path.GetFileName(strFileName);
//定义接口变量,并对其实例化
IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
// 定义工作空间变量,利用工作空间工厂打开shp文件
IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(WorkSpacePath, 0);
//定义接口变量进行实例化
IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;
//实例化打开的文件夹
IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(strShpFileName);
//定义数据集对象
IDataset pDataset = pFeatureClass as IDataset;
//定义特征图层对象
IFeatureLayer pFeatureLayer = new FeatureLayerClass();
//定义特征图层的特征数据类
pFeatureLayer.FeatureClass = pFeatureClass;
//定义特征图层的名称
pFeatureLayer.Name = pDataset.Name;
//定义图层
ILayer pLayer = pFeatureLayer as ILayer;
//返回图层
return pLayer;
}
2. 加载栅格
/// <summary>
/// 加载栅格文件
/// </summary>
/// <param name="strFileName">文件的位置</param>
/// <returns>返回的图层类型</returns>
public static ILayer AddRaster(string strFileName)
{
//获取地址
string WorkSpacePath = System.IO.Path.GetDirectoryName(strFileName);
string strRasterFileName = System.IO.Path.GetFileName(strFileName); //获取文件名
IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactoryClass(); //利用工作空间工厂定义接口变量,并实例化该接口
IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(WorkSpacePath, 0); //声明并实例化工作空间变量
IRasterWorkspace pRasterWorkspace = pWorkspace as IRasterWorkspace; //声明并实例化栅格工作空间变量
IRasterDataset pRasterDataset = pRasterWorkspace.OpenRasterDataset(strRasterFileName); //定义栅格数据集并利用所选栅格数据文件进行实例化
//影像金字塔的判断与创建
IRasterPyramid pRasPyramid = pRasterDataset as IRasterPyramid;
if (pRasPyramid != null)
{
if (!(pRasPyramid.Present)) //没有金字塔
{
pRasPyramid.Create(); //创建金字塔
}
}
IRaster pRaster = pRasterDataset.CreateDefaultRaster(); //定义栅格数据
IRasterLayer pRasterLayer = new RasterLayerClass(); //定义栅格数据层
pRasterLayer.CreateFromRaster(pRaster); //在栅格数据层中加载数据层数据
ILayer player = pRasterLayer as ILayer; //定义图层
return player; //返回图层
}
3. 加载mxd
加载mxd 的方法需要建立一个MapDocument的字段,用于地图属性的访问。对于此对象的引用对大多数地图脚本操作都十分重要。
// 建立MapDocument类字段,用于访问地图文档的属性和方法
MapDocument mapDocument = null;
/// <summary>
/// 打开mxd文档方法
/// </summary>
/// <param name="axMapControl"></param>
public void OpenFile(AxMapControl axMapControl)
{
//打开文件字符流
OpenFileDialog pDialog = new OpenFileDialog();
//设置打开文件管理器的标题
pDialog.Title = "打开mxd文档";
if (pDialog.ShowDialog() == DialogResult.OK)
{
mapDocument = new MapDocumentClass();
// 获取文件路径
string pFileName = pDialog.FileName;
// 检查mxd是否合法
if (axMapControl.CheckMxFile(pFileName))
{
// 打开地图文档
mapDocument.Open(pFileName, "");
// 加载地图文档时候将鼠标更改为正在加载状态
axMapControl.MousePointer = ESRI.ArcGIS.Controls.esriControlsMousePointer.esriPointerHourglass;
// 在MapControl控件加载mxd地图数据
axMapControl.LoadMxFile(pFileName);
// 加载完成后鼠标更改为默认指针样式
axMapControl.MousePointer = ESRI.ArcGIS.Controls.esriControlsMousePointer.esriPointerDefault;
}
else
{
MessageBox.Show("加载错误");
}
}
}
本文的代码是参考 https://blog.****.net/weiwanshu/article/details/49784019 这篇博客,其中加入了自己的见解,推荐一下这篇博文,非常不错!