PIE-SDK For C++矢量数据的创建

1.功能简介

        GIS将地理空间数据表示为矢量数据和栅格数据。矢量数据模型使用点、线和多边形来表示具有清晰空间位置和边界的空间要素,如控制点、河流和宗地等,每个要素被赋予一个ID,以便与其属性相关联。栅格数据模型使用一个格网和格网元胞(像元)代表空间要素,元胞值表示该元胞位置的空间要素属性。栅格数据模型适用于表示连续的要素,如海拔和降水量。

PIE-SDK For C++矢量数据的创建PIE-SDK For C++矢量数据的创建

[矢量数据模型]                                                                                                                   [栅格数据模型]

        PIE支持多种矢量数据的创建,下面对矢量数据格式的数据创建功能进行介绍。

2.功能实现说明

2.1 Shape数据介绍

        Shapefile是由ESRI开发后被广泛应用的数据格式,它采用文件的方式分开存储数据的控件信息和属性信息,但其不能存储拓扑关系,具有简单、快速显示的优点。一个Shape数据的文件结构如下所示:

PIE-SDK For C++矢量数据的创建

[Shape数据文件结构]

编号

后缀

文件说明

1

.shp

基本文件,存储地理要素的几何图形信息;

2

.dbf

基本文件,存储地理要素的属性信息;

3

.shx

基本文件,存储图形要素与属性信息的索引;

4

.prj

可选文件,存储数据的空间参考信息;

5

.sbn/.sbx

可选文件,存储数据的空间索引信息(ESRI创建的空间索引);

6

.qix

可选文件,存储数据的空间索引信息(PIE创建的空间索引);

[Shape数据文件结构说明]

2.2 实现思路及原理说明

第一步

创建字段信息并添加值,创建空间参考,保存等

第二步

创建矢量要素数据集

2.3 核心接口与方法

接口/类

方法/属性

说明

SysDataSource::DatasetFactory

CreateFeatureDataset(…)

创建要素数据集

SysCarto::LayerFactory

CreateDefaultFeatureLayer(…)

创建矢量图层

SysGeometry::SpatialReferenceFactory

CreateSpatialReference(int Code)

创建空间参考

SysDataSource::Field

Name,AliasName,DefaultValue

字段属性

SysDataSource::Fields

AddField(IField ptrField)

添加字段

SysDataSource::Feature

SetValue(int nIndex, object field)

设置字段值

SysDataSource::FeatureDataset

AddFeature(IFeature ptrFeature)

添加要素

2.4示例代码

项目路径

百度云盘地址下/PIE示例程序/04数据操作/01.矢量数据的创建

视频路径

百度云盘地址下/PIE视频教程/04数据操作/01.矢量数据的创建.avi

示例代码

/** 创建矢量数据

* @brief

* @param[in] bool checked 是否选中

* @return

*/

void PIEMainWindow::On_ActionCreateShpFile_Triggered(bool checked)

{

    QString saveFilePath = QFileDialog::getSaveFileName(this, "选择存储路径", "../", "ShapeFile (*.shp)");

    if (saveFilePath.isEmpty())

    {

        return;

    }

    //1 建立字段

    SysDataSource::FieldsPtr fields = new SysDataSource::Fields();

    SysDataSource::FieldPtr name_Field = new SysDataSource::Field("name", SysDataSource::FieldType::OFTString, 20, 4);

    name_Field->SetAliasName("名称");

    //2 建立空间参考

    SysGeometry::SpatialReferencePtr spPtr = SysGeometry::SpatialReferenceFactory::CreateSpatialReference(4326);

    //3 创建矢量数据集

    SysDataSource::FeatureDatasetPtr featureDataSetPtr = SysDataSource::DatasetFactory::Instance()->CreateFeatureDataset(saveFilePath, fields,SysGeometry::GeometryType::GeometryPoint, spPtr, "Shape");

    if (featureDataSetPtr==nullptr)

    {

        return;

    }

    //4 写入要素

    SysDataSource::FeaturePtr newFeaturePtrA = featureDataSetPtr->CreateNewFeature();

    SysGeometry::PointPtr point = new SysGeometry::Point();

    point->SetX(116.4); point->SetY(39.9);

    newFeaturePtrA->SetGeometry(point);

    newFeaturePtrA->SetValue(0, "北京市");

    featureDataSetPtr->AddFeature(newFeaturePtrA);

 

    SysDataSource::FeaturePtr newFeaturePtrB = featureDataSetPtr->CreateNewFeature();

    SysGeometry::PointPtr pointB = new SysGeometry::Point();

    pointB->SetX(121.48); pointB->SetY(31.22);

    newFeaturePtrB->SetGeometry(pointB);

    newFeaturePtrB->SetValue(0, "上海市");

    featureDataSetPtr->AddFeature(newFeaturePtrB);

    //5 保存要素

    featureDataSetPtr->Save();

    featureDataSetPtr->CreateSpatialIndex();

    //6 创建图层

    SysCarto::LayerPtr layer = SysCarto::LayerFactory::Instance()->CreateDefaultFeatureLayer(featureDataSetPtr);

    if (layer!=nullptr)

    {

        m_pCurrentControl->GetMap()->AddLayer(layer);

        m_pCurrentControl->GetActiveView()->Refresh();

    }

}

2.5示例截图

PIE-SDK For C++矢量数据的创建

   生成的shape文件,格式如下:

PIE-SDK For C++矢量数据的创建

原文链接: https://www.cnblogs.com/PIESat/p/12371229.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    PIE-SDK For C++矢量数据的创建

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/332228

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午6:24
下一篇 2023年3月1日 下午6:24

相关推荐