ArcEngine点滴2(C#读取Coverage数据)
时间:2011-04-24 来源:liuyh208
1、Coverage简要说明:
Coverage 是ArcInfo workstation 的原生数据格式,是ESRI的一种地理关系数据模型,它利用分离的系统来存储空间数据和属性数据,它是一个集合,它可以包含一个或多个要素类,支持三种基本拓扑关系:连接性、面定义、邻接性。一般的GIS原理书中都有它的原理论述。数据结构复杂,属性缺省存储在Info表中。目前ArcGIS中仍然有一些分析操作只能基于这种数据格式进行操作。coverage 是一个非常成功的早期地理数据模型,二十多年来深受用户欢迎,很多早期的数据都是 coverage 格式的。ESRI 不公开 coverage 的数据格式,但是提供了 coverage 格式转换的一个交换文件(interchange file,即 E00),并公开数据格式,这样就方便了 coverage 数据与其他格式的数据之间的转换。
2、读取coverage数据
///
///
///
///
路径 ///
图层名称 ///
public IList OpenFeatureClass(string stringPath,string layerName)
{
//判断路径是否存在,不存在创建
bool bl = Directory.Exists(stringPath);
if (!bl)
{
Directory.CreateDirectory(stringPath);
}
IWorkspaceFactory pFactory = new ArcInfoWorkspaceFactoryClass();
IPropertySet pPropertySet = new PropertySetClass();
pPropertySet.SetProperty("DATABASE", stringPath);
//打开工作空间
IWorkspace pWorkspace = pFactory.Open(pPropertySet, 0);
//获得所有的要素集
IEnumDataset pEnumDataSet = pWorkspace.get_Datasets(esriDatasetType.esriDTAny);
pEnumDataSet.Reset();
IDataset pds = pEnumDataSet.Next();
while (pds != null)
{
//判断要素集的名称
if (pds.Name.ToLower() == layerName.ToLower())
{
return getFeatureClass(pds, coverageType);
}
pds = pEnumDataSet.Next();
}
throw new Exception(string.Format("不存在名称为 {0} 的图层!",layerName));
}
///
///
///
///
要素类 ///
private IList getFeatureClassList(IDataset ds)
{
if (ds==null)
{
return null;
}
IList pFeatureClassList=new List ();
IEnumDataset pEnumDataSet = ds.Subsets;
pEnumDataSet.Reset();
IDataset pds = pEnumDataSet.Next();
while (pds != null)
{
IFeatureClass pFeatureClass=pds as IFeatureClass;
if (pFeatureClass!=null)
{
pFeatureClassList.Add(pFeatureClass);
}
pds = pEnumDataSet.Next();
}
return pFeatureClassList;
}