zoukankan      html  css  js  c++  java
  • PIE-SDK For C++打开GDB、Dwg数据

    1.功能简介

      目前不同的GIS软件平台具有自己独特支持的数据格式,如ESRIFile GeoDataBasePersonal GeoDataBaseMapInfomif数据、AutoCADDWG数据、GoogleKmlKmz数据等,PIE对这些常用软件的数据格式都进行了支持,能够顺利的进行浏览查看。

    2.功能实现说明

    2.1 数据格式介绍

            File GeoDataBasePersonal GeoDataBaseESRI的本地数据存储格式,其中File GDB以文件方式存储,Personal GDB则为一个MS-Access mdb数据库, FGDBPGDB具有更高的效率、更大的数据支持空间、更广的运行平台。

            DWGAutoCAD的数据格式,它采用点、线、面、文本组合存储的方式存储。

    2.2 实现思路及原理说明

    第一步

    通过文件路径打开数据集

    第二步

    进行多数据集接口转换

    第三步

    通过多数据集创建多图层

    2.3 核心接口与方法

    接口/

    方法

    说明

    SysDataSource::DatasetFactory

    OpenDataset

    打开数据集

    SysCarto::LayerFactory

    CreateDefaultMultiLayer

    创建多图层

    CreateDefaultLayer

    创建图层

    2.4 示例代码

    项目路径

    百度云盘地址下/PIE示例程序/03.数据加载/04.打开GDB数据

    数据路径

    百度云盘地址下/PIE示例数据/矢量数据/FGDB/China.gdb

    百度云盘地址下/PIE示例数据/矢量数据/PGDB/China.mdb

    百度云盘地址下/PIE示例数据/矢量数据/DWG/China.dwg

    视频路径

    百度云盘地址下/PIE视频教程/03.数据加载/04.打开GDB数据.avi

    示例代码

    (方法一)打开File GeoDatabase

        QString file_path = QFileDialog::getExistingDirectory(nullptr, "请选择文件路径...", "./");

        if (file_path.isEmpty()) return;

        

        SysCarto::LayerPtr fgdbLayer = SysCarto::LayerFactory::Instance()->CreateDefaultLayer(file_path);

        if (fgdbLayer == nullptr) return;

        m_ptrHookHelper->GetFocusMap()->AddLayer(fgdbLayer);

        m_ptrHookHelper->GetActiveView()->Refresh();

    (方法二)打开Personal GDBDwg

    注:打开MDB需要Microsoft Access环境,否则打开MDB会失败

        QString filter = "Personal GDB数据 (*.mdb);;Dwg数据 (*.dwg)";

        QString lstFile = QFileDialog::getOpenFileName(nullptr, "添加数据", "", filter);

        if (lstFile==nullptr) return;

        

        SysDataSource::MultiDatasetPtr dataSetPtr = SysDataSource::DatasetFactory::Instance()->OpenDataset(lstFile, ysDataSource::GA_ReadOnly);

        if (dataSetPtr==nullptr) return;

          

        SysCarto::LayerPtr multiLayer = SysCarto::LayerFactory::Instance()->CreateDefaultMultiLayer(dataSetPtr);

        if (multilayer==nullptr) return;

          

        m_ptrHookHelper->GetFocusMap()->AddLayer(multiLayer);

        m_ptrHookHelper->GetActiveView()->Refresh();

    2.5 示例截图

  • 相关阅读:
    C语言输出颜色
    嵌入式Linux串口编程简介
    推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
    嵌入式串口打印信息重定向到当前终端界面
    C、C++、boost、Qt在嵌入式系统开发中的使用
    LInux下Posix的传统线程示例
    Linux用C语言模拟‘ls‘命令
    关于Linux目录访问函数总结
    Inter内部指令--AVX编程基础
    SPECCPU2006测试(456测试小记)
  • 原文地址:https://www.cnblogs.com/PIESat/p/12367608.html
Copyright © 2011-2022 走看看