加载矢量数据的代码优化

一世执手 提交于 2019-12-02 00:08:49

深入来看,依据ESRI公司数据浏览架构,数据打开需要经历以下流程

首先利用新建工作空间工厂的方法打开工作空间;然后强制转换为要素工作空间或者栅格工作空间;最后使用要素工作空间或者栅格工作空间的方法打开(要素/矢量或栅格)数据。

 

 

对于ShapeFile来说,工作空间就是它所在的文件夹,打开工作空间需要使用对应的工作空间工厂,即ShapeFileWorkspaceFactoryClass,然后调用IWorkspaceFactory的OpenFromFile方法,就可以得到一个工作空间,这也是设计模式中工厂方法的体现。工作空间工厂的打开方法返回的是一般意义的工作空间,根据具体数据还需要进行接口转换。因为ShapeFile是矢量数据,所以把工作空间接口跳转到IFeatureWorkspace,从而读取其中的要素类。

这一点对于多种格式的数据(如Coverage、GeoDatabase、ArcSDE数据格式)都是一样。

对比代码:

最简单的ArcGIS Engine应用程序(上)

private void menuAddShp_Click(object sender, EventArgs e)
{
    IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();
    IWorkspace pWorkspace1 = pWorkspaceFactory.OpenFromFile(@"D:\data", 0);
    IFeatureWorkspace pFeatureWorkspce = pWorkspace1 as IFeatureWorkspace;
    IFeatureClass pFC = pFeatureWorkspce.OpenFeatureClass("华东地区.shp");
    IFeatureLayer pFLayer = new FeatureLayerClass();
    pFLayer.FeatureClass = pFC;
    pFLayer.Name = pFC.AliasName;
    ILayer pLayer = pFLayer as ILayer;
    IMap pMap = axMapControl1.Map;
    pMap.AddLayer(pLayer);
    axMapControl1.ActiveView.Refresh();
}

 

介绍ArcGIS中各种数据的打开方法——shp(矢量文件)

private void addShapeFile2()
{
    ... //省略
    IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
    IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(filePath,0) as IFeatureWorkspace;
    IFeatureLayer pFLayer = new FeatureLayerClass();
    pFLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(fileName);
    pFLayer.Name = pFLayer.FeatureClass.AliasName;
    this.axMapControl1.AddLayer(pFLayer as ILayer);
    this.axMapControl1.Refresh();
}

 

第二处的代码明显要少于第一处的代码,但是在理解上第一处的代码更加容易让人读。(所以需要结合一下)

经过测试

1、

IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();

可以写为(推荐使用):

IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();

 

2、

(推荐使用)

IWorkspace pWorkspace1 = pWorkspaceFactory.OpenFromFile(@"D:\data", 0);
IFeatureWorkspace pFeatureWorkspce = pWorkspace1 as IFeatureWorkspace;

可以写为:

IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(@"D:\data", 0)  as IFeatureWorkspace;

 

3、

相同

IFeatureLayer pFLayer = new FeatureLayerClass();

 

4、

(推荐使用)

IFeatureClass pFC = pFeatureWorkspce.OpenFeatureClass("华东地区.shp");
pFLayer.FeatureClass = pFC;

可以写为:

pFLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(fileName); 

 

5、

(推荐使用)

pFLayer.Name = pFC.AliasName;

可以写为:

pFLayer.Name = pFLayer.FeatureClass.AliasName;

 

5、

ILayer pLayer = pFLayer as ILayer;
IMap pMap = axMapControl1.Map;
pMap.AddLayer(pLayer);

可以写为:

this.axMapControl1.AddLayer(pFLayer as ILayer);

或者可以写为(推荐使用)

this.axMapControl1.AddLayer(pFLayer);

 

7、

axMapControl1.ActiveView.Refresh();

可以写为(推荐使用)

this.axMapControl1.Refresh();

 

像其他数据的加载基本上都是大同小异的,以下列出的是加载矢量数据的代码。

个人推荐使用的总结代码:

IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
IWorkspace pWorkspace1 = pWorkspaceFactory.OpenFromFile(@"D:\data", 0); 
IFeatureWorkspace pFeatureWorkspce = pWorkspace1 as IFeatureWorkspace;
IFeatureClass pFC = pFeatureWorkspce.OpenFeatureClass("华东地区.shp");
IFeatureLayer pFLayer = new FeatureLayerClass();
pFLayer.FeatureClass = pFC;
pFLayer.Name = pFC.AliasName;
this.axMapControl1.AddLayer(pFLayer);
this.axMapControl1.Refresh();

 

图解代码:

 

谢谢观看!本人初学GIS二次开发,如果有不对的地方,请多多包涵!

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!