• PIE-SDK For C++栅格数据的创建


    1.功能简介

        目前在地理信息领域中数据包括矢量和栅格两种数据组织形式。每一种数据有不同的数据格式,目前PIE SDK支持多种数据格式的数据创建,下面对栅格数据格式的数据创建功能进行介绍。

    2.功能实现说明

    2.1 实现思路及原理说明

    第一步

    获取要读取的栅格数据

    第二步

    获取栅格数据的读取

    第三步

    构建新的栅格数据集

    第四步

    栅格数据写入

    第五步

    设置空间参考

    第六步

    设置仿射变换

    2.2 核心接口与方法

    接口/

    方法/属性

    说明

    SysDataSource::RasterDatasetPtr

    GetBandCount()

    获取波段数

    Read()

    栅格读取

    Write()

    栅格写入

    GetGeoTransform()

    获取仿射变换参数

    SetGeoTransform()

    设置仿射变换参数

    GetSpatialReference()

    空间参考

    SysDataSource::DatasetFactory

    CreateRasterDataset()

    空间栅格数据集

    2.3 示例代码

    项目路径

    百度云盘地址下/PIE示例程序/04数据操作/10栅格数据的创建

    数据路径

    百度云盘地址下/PIE示例数据/栅格数据/04.World/World.tif

    视频路径

    百度云盘地址下/PIE视频教程/04数据操作/10栅格数据的创建.avi

    示例代码

    void PIEMainWindow::On_ActionCreateRaster_Triggered(bool checked)

    {

        SysCarto::RasterLayerPtr rasterLayerPtr = m_pCurrentControl->GetActiveView()->GetCurrentLayer();

        if (rasterLayerPtr == nullptr) return;

     

        SysDataSource::RasterDatasetPtr datasetPtr = rasterLayerPtr->GetDataset();

        int BandCount = datasetPtr->GetBandCount();

        //2栅格数据范围等信息的读取

        int xSize = datasetPtr->GetRasterXSize();//

        int ySize = datasetPtr->GetRasterYSize();//

        QVector<int> vectorBand;

        int* bandMap = new int[BandCount];

        for (int i = 0; i < BandCount; i++)

        {

            bandMap[i] = i + 1;

            vectorBand.insert(i, i + 1);

        }

        QString filter = "Raster Files (*.tif *.tiff *.img *.bmp *.jpg *.ldf *.dat *.1bd *.1b)";

        QString saveFilePath= QFileDialog::getSaveFileName(nullptr, "保存", "", filter);

        if (saveFilePath.isEmpty()) return;

        SysDataSource::PixelBufferPtr buffer=datasetPtr->Read(0, 0, xSize, ySize, xSize, ySize, vectorBand);

     

        SysDataSource::RasterDatasetPtr newDataSet = SysDataSource::DatasetFactory::Instance()->CreateRasterDataset(saveFilePath, xSize, ySize, BandCount, datasetPtr->GetRasterBand(0)->GetRasterDataType(), "GTiff");

        double* geo=new double[6];

        datasetPtr->GetGeoTransform(geo);

        newDataSet->SetSpatialReference(datasetPtr->GetSpatialReference());

        newDataSet->SetGeoTransform(geo);

        bool flag= newDataSet->Write(0, 0, xSize, ySize, buffer->GetData(), xSize, ySize, datasetPtr->GetRasterBand(0)->GetRasterDataType(), BandCount, bandMap);

        if (flag)

        {

            SysCarto::LayerPtr newLayer = SysCarto::LayerFactory::Instance()->CreateDefaultRasterLayer(newDataSet);

            if (newLayer!=nullptr)

            {

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

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

            }

        }

    }

    2.4 示例截图

  • 相关阅读:
    IOS系统下虚拟键盘遮挡文本框问题的解决
    ubuntu git的安装更新及配置
    js 画布与图片的相互转化(canvas与img)
    js 图片与base64互相转换
    PHP base64数据与图片的互相转换
    js 判断当前操作系统是ios还是android还是电脑端
    ubuntu下nodejs和npm的安装及升级
    vue中使用html2canvas及解决html2canvas截屏图片模糊问题
    vue文件中引入外部js
    php 执行 命令行命令
  • 原文地址:https://www.cnblogs.com/PIESat/p/12373119.html
Copyright © 2020-2023  润新知