zoukankan      html  css  js  c++  java
  • PIE-SDK For C++栅格数据集的读写

    1.功能简介

       栅格数据包含很多信息,在数据的运用中需要对数据的信息进行读取或写入,目前PIE SDK支持多种数据格式的数据读取和写入,下面对栅格数据格式的数据读写功能进行介绍。

    2.功能实现说明

    2.1. 实现思路及原理说明

    第一步

    获取要读取的栅格数据

    第二步

    读取栅格数据

    第三步

    写入栅格数据并赋值投影

    2.2. 核心接口与方法

    接口/

    方法/属性

    说明

    RasterDatasetPtr

    GetBandCount()

    获取波段数

    GetRasterBand(int nIndex)

    获取栅格波段对象

    GetRasterDataType()

    获取栅格数据类型

    Read(int nx, int ny, int nWid, int nHei, int nBufXSize, int nBufYSize, const QVector<int>& bandMap)

    栅格数据集读取数据

    2.3. 示例代码

    项目路径

    百度云盘地址下/PIE示例程序/04数据操作/12栅格数据集的读写

    数据路径

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

    视频路径

    百度云盘地址下/PIE视频教程/04数据操作/12栅格数据集的读写.avi

    示例代码

    void PIEMainWindow::On_ActionLayoutReadRaster_Triggered(bool checked)

    {

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

        if (rasterLayerPtr == nullptr) return;

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

        int BandCount = rasterDataSetPtr->GetBandCount();

        SysDataSource::RasterBandPtr band = rasterDataSetPtr->GetRasterBand(0);

        SysDataSource::PixelDataType bandType= band->GetRasterDataType();

     

        QVector<int> vectorBand;

        int* bandMap = new int[BandCount];

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

        {

            bandMap[i] = i + 1;

            vectorBand.insert(i, i + 1);

        }

        SysDataSource::PixelBufferPtr buffer= rasterDataSetPtr->Read(0, 0, 500, 500, 500, 500, vectorBand);

     

        /*将读取到的数据,写入内存数据集,并加载至图层*/

        SysDataSource::RasterDatasetPtr newDataSet = SysDataSource::DatasetFactory::Instance()->CreateRasterDataset("", 500, 500        , BandCount, rasterDataSetPtr->GetRasterBand(0)->GetRasterDataType(), "MEM");

        double* geo = new double[6];

        rasterDataSetPtr->GetGeoTransform(geo);

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

        newDataSet->SetGeoTransform(geo);

        bool flag = newDataSet->Write(0, 0, 500, 500, buffer->GetData(), 500, 500, bandType, BandCount, bandMap);

        if (flag)

        {

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

            newLayer->SetName("内存图层");

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

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

        } 

    }

    2.4. 示例截图

  • 相关阅读:
    LocalDate/LocalDateTime与String的互相转换示例(附DateTimeFormatter详解)
    MyBatis中的JdbcType映射介绍
    mybatis的一些特殊符号标识(大于,小于,等于,不等于)
    c++多重继承
    tensorflow 一些好的blog链接和tensorflow gpu版本安装
    java中Arraylist复制方法
    java/python中的队列
    java中的函数参数
    linux命令
    python爬某个网站的图片
  • 原文地址:https://www.cnblogs.com/PIESat/p/12373289.html
Copyright © 2011-2022 走看看