该项目展示了如何使用SuperMap iObjects for C++ 进行二次开发,并对一些不易使用的功能进行封装,如用于地图窗口MapControl,用于场景窗口的SceneControl等。封装的工程在SuObjectCpp目录,这些类都支持在VS和Qt项目中使用,以及Linux系统下Qt开发使用。
- GitHub: JunSuCpp, 原始项目。
- Gitee码云: JunSuCpp, 同步自Github的项目,下载速度较好。
注:TestData目录中仅有二维地图数据,因三维数据较大,没有上传GitHub。应用中采用选择文件方式打开,因此可以使用自己制作的工作空间数据,或是超图软件其他产品提供的示范数据。
- 实现地图窗口,实现地图交互操作
- 打开工作空间,显示地图
- 绘制点、线、面、态势标绘对象
- 获得选中对象
- 动态层示例:选中对象时,在点击位置添加一条线到动态层显示
- 态势标绘代码示例:选中对象时,在点击位置添加一个态势标绘对象到CAD数据集
- 态势推演示例:选中点类型的标绘对象,创建比例动画
- 同时支持二维地图和三维场景
- 选择文件打开工作空间(*.smwu, *.sxwu)
- 选择文件打开数据源(*.udb)
- 选择文件打开场景缓存文件(*.scp)
- 从数据库打开工作空间或数据源(数据库包括:MySQL, SQLPlus, PostgreSQL, PostGIS,达梦等)
- 多窗口模式,支持打开多幅地图或多个场景
- 支持选中数据集右键添加到二维地图
- 支持选中二维地图图层设置是否可选,是否可见,是否可编辑
- 支持二维地图上绘制点、线、面
- 支持二维地图上编辑选择对象的节点
包含Data和Mapping两个工程,用于封装SuperMap iObjects C++中较复杂的功能接口。Data中的Workspace实现对工作空间和数据源的管理。Mapping中的MapControl和SceneControl分别实现对二维地图和三维场景的窗口连接,以及图层管理等功能。JunSuMFCDialog和JunSuCpp就是基于这些封装实现的。
JunSuCpp
|—— PropertySheets -- MFC 项目属性配置文件
|—— Qt_pros -- Qt 项目配置文件,Qt Creator 打开该目录下的.pro文件即可
|—— SuObjectsCpp -- 部分封装SuperMap Objects C++常用功能方法的C++库,尤其是Mapping/MapControl是一个具有通用性的实现地图窗口的类
|—— TestData -- 测试数据
|—— VSApps -- 使用SuObjectsCpp中的库和SuperMap原有库构建的应用,分MFC和Qt框架两类应用
|—— VSSolution_2017 -- VS2017解决方案文件,VS2017为当前项目使用的版本
|—— What's New.md -- 项目功能更新记录
- 验证过的开发工具及版本
- VS2012 + Qt5.2(Qt addin 1.2.5)
- VS2017 + Qt5.2 及以上(Qt addin 2.3.2, 使用过的Qt有Qt5.2、Qt5.6.3、Qt5.9.3、Qt5.12
- Windows, Qt Creator 5.2及以上
- Unbuntu, Qt Creator 4.8.6, 5.2; 由于SuperMap iObjects C++是基于Qt4.8.6编译, 且Qt5不兼容Qt4, 因此Linux系统上需使用4.8.6版本的Qt库编译。
- PropertySheets中添加顺序,以Debug_x64为例
本项目都使用这些配置文件来配置:
1) PropertySheet_x64d.props -- 设置SuperMap Objects C++链接库目录和链接库名称
2) PropertySheets_Link_SuObjectsCpp.props -- 引入SuObjectsCpp中封装的库
3) PropertySheet_General.props -- 定义宏名"SuObjectsDir"指向SuperMap Objects C++ 产品包目录,并配置同文件目录; 头文件包括include,include/private 两个目录
如图:
- VS开发,以VS2017为例,说明打开解决方案后,需要修改的配置
-
打开属性管理器,在任意一个项目配置中打开"PropertySheet_General.props"配置文件,修改“自定义宏” -> "SuObjectsDir"指定的SuperMap iObjects for C++产品包目录。 如图:
-
Qt工程,右键工程 -> Qt工程设置,检查设置Qt版本以及使用的模块,本项目只使用Core, GUI, Widgets, 如图:
-
若使用VS2012打开解决方案,其配置方法类似
- Qt Creator开发,以Qt 5.9.3为例,说明配置方法