组件式GIS开发总结(一)

一、组件式开发的优缺点
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(至关重要)
组件式GIS开发总结(一)
三个关系很重要:
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);
       }
   }



上一篇:城市防汛应急管理智慧 Web GIS 可视化平台


下一篇:阿里云GIS曾志明:空间数据中台是什么,怎么用