深入理解数据集(转自 http://www.gisall.com/html/63/151663-4895.html)
2012-07-27 16:32
453 查看
在Geodatabase中,要素类可以直接存储在数据库中,也可以存储在数据集中。数据集(Dataset)是一个代表了Workspace中所谓数据集合的抽象类,它是一个集合,但是在理解数据集对象的时候,要用广义的概念来看待,不要从我们在数据库里存储的那个物理结构去理解,否则会走入误区,因为在设计数据库的时候,我们可以在数据集里面存储相关的要素类。那么我们在编程的时候就可以这么想,要获取数据库中的某一个要素类,要先获取数据集,然后获取要素类,其实通过工作空间IFeatureWorkspace.OpenFeatureClass就可以,可以把数据库比作文件夹,数据集比作子文件夹,但是在数据库中的表,要素类,是没有重复的,不像Windows上的文件夹,子文件夹里面可以有名称重复的文件,刚才说到用广义的意义,应该知道所有放在工作空间的对象都是一种数据集对象,也就是说Table,FeatureClass等都是数据集,也就是说数据集中的数据可以是一个字段,一行记录,一张表等。Workspace其实也是一种数据集,它也继承了IDataset这个接口。在数据库中一切对象都可以看做是数据集,不管是要素类,还是表,或者栅格数据,那么怎么区分我们得到的到底是表,还是要素类?IDataset有一个很重要的属性IDataset.Type,通过这个属性我们就可以判断,IDataset.Type的这个属性是一个枚举类型的常量,如下图
获取数据库中的要素类
在AE中,要得到某一个类,首要要获取工作空间,然后进入工作空间再得到相应的东西,我们定义一个函数用来获取个人数据库的路径
public string WsPath()
{
string WsFileName="";
OpenFileDialog penFile = new OpenFileDialog();
OpenFile.Filter = "个人数据库(MDB)|*.mdb";
DialogResult DialogR = OpenFile.ShowDialog();
if (DialogR == DialogResult.Cancel)
{
}
else
{
WsFileName = OpenFile.FileName;
}
return WsFileName;
}
要获取要素类,首先要进入
private void button2_Click(object sender, EventArgs e)
{
string WsName = WsPath();
if (WsName != "")
{
IWorkspaceFactory pWsFt = new AccessWorkspaceFactoryClass();
IWorkspace pWs = pWsFt.OpenFromFile(WsName, 0);
IEnumDataset pEDataset = pWs.get_Datasets(esriDatasetType.esriDTAny);
IDataset pDataset = pEDataset.Next();
while (pDataset != null)
{
if (pDataset.Type ==esriDatasetType.esriDTFeatureClass)
{
FeatureClassBox.Items.Add(pDataset.Name);
}
//如果是数据集
else if (pDataset.Type == esriDatasetType.esriDTFeatureDataset)
{
IEnumDataset pESubDataset = pDataset.Subsets;
IDataset pSubDataset = pESubDataset.Next();
while (pSubDataset != null)
{
FeatureClassBox.Items.Add(pSubDataset.Name);
pSubDataset = pESubDataset.Next();
}
}
pDataset = pEDataset.Next();
}
}
FeatureClassBox.Text = FeatureClassBox.Items[0].ToString();
}
获取数据库中的要素类
在AE中,要得到某一个类,首要要获取工作空间,然后进入工作空间再得到相应的东西,我们定义一个函数用来获取个人数据库的路径
public string WsPath()
{
string WsFileName="";
OpenFileDialog penFile = new OpenFileDialog();
OpenFile.Filter = "个人数据库(MDB)|*.mdb";
DialogResult DialogR = OpenFile.ShowDialog();
if (DialogR == DialogResult.Cancel)
{
}
else
{
WsFileName = OpenFile.FileName;
}
return WsFileName;
}
要获取要素类,首先要进入
private void button2_Click(object sender, EventArgs e)
{
string WsName = WsPath();
if (WsName != "")
{
IWorkspaceFactory pWsFt = new AccessWorkspaceFactoryClass();
IWorkspace pWs = pWsFt.OpenFromFile(WsName, 0);
IEnumDataset pEDataset = pWs.get_Datasets(esriDatasetType.esriDTAny);
IDataset pDataset = pEDataset.Next();
while (pDataset != null)
{
if (pDataset.Type ==esriDatasetType.esriDTFeatureClass)
{
FeatureClassBox.Items.Add(pDataset.Name);
}
//如果是数据集
else if (pDataset.Type == esriDatasetType.esriDTFeatureDataset)
{
IEnumDataset pESubDataset = pDataset.Subsets;
IDataset pSubDataset = pESubDataset.Next();
while (pSubDataset != null)
{
FeatureClassBox.Items.Add(pSubDataset.Name);
pSubDataset = pESubDataset.Next();
}
}
pDataset = pEDataset.Next();
}
}
FeatureClassBox.Text = FeatureClassBox.Items[0].ToString();
}
![](http://www.gisall.com/attachments/2011/04/151663_201104051141211tRnV.jpg)
相关文章推荐
- HttpModule的认识与深入理解 --http://www.cnblogs.com/SAL2928/archive/2009/11/07/1597862.html
- 深入理解ob_flush和flush的区别 转自http://www.laruence.com/2010/04/15/1414.html
- http://www.cnblogs.com/alcc/p/Allc.html
- 我对架构师的理解(如何成为一个合格的架构师)http://www.cnblogs.com/daoxuebao/archive/2012/06/14/2549967.html
- 深入认识javascript中的eval函数 (转http://www.cnblogs.com/agloat/archive/2008/05/09/1190468.html)
- http://www.gisinternals.com/aboutgisinternals.html
- C#委托之个人理解(转自:http://www.cnblogs.com/michaelxu/archive/2008/03/31/1131500.html)
- 理解委托和事件的好文章http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html
- 深入理解Line-height(转:http://www.maxdesign.com.au/)
- 深入理解Java虚拟机笔记---方法调用http://www.tuicool.com/articles/vQVzIje
- SQL Server 2000 元数据应用(三):获得数据库中存储过程的参数和数据集字段http://www.cnblogs.com/ClarkChan/archive/2006/10/31/545131.html
- http://www.ebook-search-engine.com/albpm-papi-ebook-all.html
- 破解激活Win10无风险?激活后删除激活工具无影响===http://www.pconline.com.cn/win10/693/6932077_all.html#content_page_4
- prototype.js 让你更深入的了解javascript的面向对象特性 http://www.cnblogs.com/meil/archive/2007/05/09/740043.html
- 深入理解 Java中的 流 (Stream) --转自石头儿 http://www.cnblogs.com/shitouer/
- Group by与having理解(原文http://www.cnblogs.com/gaiyang/archive/2011/04/01/2002452.html)
- 谈谈对Spring IOC的理解,转载自http://www.cnblogs.com/xdp-gacl/p/4249939.html
- ListView应用(转自http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html)
- 深入理解JavaScript系列(20):《你真懂JavaScript吗?》答案详解(http://www.cnblogs.com/TomXu/archive/2012/02/10/2342098.)
- 深入理解Java内存模型(二)——重排序http://www.infoq.com/cn/articles/java-memory-model-2