- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
GIS开发第三章
GIS设计与开发
实验2
程序运行时截图:
界面设计:
设计思路
具体步骤
首先建立SuperMap控件之间的连接:
private void ConnectSuperMap()
{
object objWshandle_ear = this.axSuperWorkspace1.CtlHandle;
this.axSuperMap1.Connect(objWshandle_ear);
this.axSuperWkspManager1.Connect(objWshandle_ear);
}
打开一个数据集
//定义它的位置
string path =C:\\Users\\Daniel\\Documents\\Visual Studio 2010\\Projects\\GISSuperMap开发\\Gis开发空间数据管理(3)\\Data\\World.sdb;
//定义他的别名
//这里使用了subString()和IndexOf()方法来获取文件的全名
//然后调用System.IO.Path中的GetFileNameWithoutExtension()方法去掉后缀。
String strDsName = path;
String strAlias = Path.GetFileNameWithoutExtension(path.Substring(path.LastIndexOf(\\) + 1));
获取数据集集合
soDatasets datasets = objDs.Datasets;
//可以通过访问datasets[i].Name来得到每个数据集的名字。
同时,我们还可以调用操作符重载datasets[Capital]来访问数据集集合中的某数据集。
通过访问ds.Type等等属性,即可获得该数据集的类型,或其它属性。
4.建立自己的数据集
soDataset Myds = objDs.CreateDataset(Myds, seDatasetType.scdRasterCollection, seDatasetOption.scoDefault);
其中objDS是DataSource(数据源)对象。这里实现了直接从数据源到数据集的转换。
数据集之间的继承关系
soDatasetRaster datasetR = (soDatasetRaster)Myds;
//soDatasetRaster datasetR2 = (soDatasetRaster)ds;
int width = datasetR.PixelWidth;
这里的Myds本来是dataset对象,但是soDatasetRaster继承于DataSet是他的子类,我们采用了向下转型,使得datasetR对象具有了栅格数据特有的PixelWidth属性。
新建数据源
string path = C:\\Users\\Daniel\\Documents\\Visual Studio 2010\\Projects\\GISSuperMap开发\\Gis开发空间数据管理(3)\\Data\\XXX.sdb;
soDataSource objDs = this.axSuperWorkspace1.CreateDataSource(path, XXX, seEngineType.sceSDBPlus, false, false, false, );
在这里我们建立了一个名字为XXX的SDBPlus数据源。
新建一个字段
//首先获得数据集
soDataset ds = datasets[World_Attri];
//向下转型为soDatasetVector类型
soDatasetVector vector = (soDatasetVector)ds;
//新建一个字段
soFieldInfo finfo = new soFieldInfoClass();
//然后设置字段的一些属性
finfo.Name = TTT;
finfo.Type = seFieldType.scfInteger;
//在创建之前必须先清空记录集。
vector.ClearRecordsets();
//最后插入并且判断插入是否成功。
bool OK = vector.CreateField(finfo);
if (OK) MessageBox.Show(OK);
在此处特别注意一点,com对象是在打包时自动进行封装的,创建一个字段的时候我们可以先创建一个soFieldInfoClass()的实例,然后将其转
文档评论(0)