一、组件式开发的优缺点
1)优点
(1)高度的伸缩性
(2)灵活的拓展性
(3)易于开发
(4)易于集成
(5)更高的性价比
2)缺点
(1)与专业的GIS客户端软件相比,组件式GIS的效率相对低下
(2)支持的空间数据量有限
(3)支持的功能有限
(4)系统的容错率和可靠性有待提升
二、SuperMap Objects组件式开发的控件
1)核心控件:SuperMap、SuperWorkspace;
2)功能控件:Super3D、SuperAnalyst、SuperLayout、SuperTopo;
3)辅助开发工具:SuperWkspManager、SuperGridView、SuperLegend;
三、良好的组件式编程习惯
1)避免上帝对象
2)避免幻数
3)避免长函数
4)避免深度嵌套
5)应用分层
6)代码有注释
7)代码简洁、低耦合
8)标识符命名有意义
9)日志打印
四、基本概念
(1) SuperObjects 中提供了两种保存工作空间的接口:SuperWorkspace.Save()和SuperWorkspace.SaveAs();
(2) SuperGIS的工作空间是以树状层次结构保存的,工作空间的拓展名有smw(二进制格式)、sxw(XML格式);
(3) 用户的工作环境同时只允许有一个工作空间,因此,不要在同一个项目中加载一个以上的SuperWorkspace控件;工作空间保存的内容包括数据源、地图、系统资源和三维场景及布局;
(4) SuperMap Objects的主要功能有
1)数据转换
2)空间数据编辑与处理
3)空间数据组织与管理
4)空间数据获取与集成
5)数据访问与互操作
6)空间分析
7)查询分析
8)地理变换
9)地图显示
10)地图投影
11)制图输出
12)地图布局
(5)当需要将2个及以上的同类型的数据集合到一个数据集时,可以使用数据集追加的方法来实现。提供矢量数据集追加方法:soDatasetVector.Append(),提供栅格数据集追加方法:soDatasetRaster.Append();
(6)GIS由软件系统、硬件系统、用户和地理数据组成的。
(7)GIS开发的三种模式:
1)独立开发
2)单纯二次开发
3)集成二次开发
(8)GIS中的2种数据结构:
1)矢量数据结构,特点:定位明显,属性隐含;
2) 栅格数据结构,特点:定位隐含,属性明显;
五、网络分析的类型
1)连通性分析
2)服务区分析
3)物流分析
4)最短路径分析
5)最近设施查找
六、SuperMap Objects 获取字段
//先要判断字段名是否合法,需用以下接口
soDatasetVector.IsAvailableFieldName()
//创建字段,用以下接口
soDatasetVector.CreateField()//创建单个字段的接口
soDatasetVector.CreateFields()//创建多个字段的接口
//删除字段,用以下接口
soDatasetVector.Delete()
//更新字段,用以下接口
soDatasetVecot.UpdateField()//只更新字段值
soDatasetVector.UpdateFieldEx()//同步更新SQL数据源的值
七、栅格分析
1)类型:
(1)栅格统计
(2)表面分析
2)栅格数据模型/结果数据/主要数据源
(1)离散数据
(2)连续数据
八、SuperMap Objects OMD(至关重要)
三个关系很重要:
3个聚合、1个联合、1个继承;
九、用C#代码写出获取F:\A\AA路径里的工作空间里的所有图层。
this.axSuperWorkspace1.Open(@"F:\A\AA");
for(int i=1; i<=objDss.Count; i++)
{
string strDssName = objDss[i].Name;
soDatasets objDts = objDss[i].Datasets;
for(int j=1; j<objDts.Count; j++ )
{
string strDtsName = objDts[j].Name;
}
}
十、用C# 代码写出获取图层中的所有字段
soDataSources objDss = this.axSuperWorkspace1.Datasources;
soDataSource objDs = objDss[1];
string strDssName = objDs.Name;
soDatasets objDts = objDs.Datasets;
for(int i=1;i<=objDts.Count;i++)
{
soDatasetVector objDV = (soDatasetVector)objDts[i];
soRecordset objRecordset = objDV.Query("", true, null, "");
if(objRecordset!=null)
{
objRecordset.MoveFirst();
while(!objRecordset.IsEOF())
{
for(int k=1;k<=objRecordset.FieldCount;k++)
{
string strFieldInfo = objRecordset.GetFieldInfo(k).Name;
string strValue = objRecordset.GetFieldValue(k).ToString();
}
objRecordset.MoveNext();
}
}
ReleaseObjects(objDV);
ReleaseObjects(objRecordset);
}
}