精华内容
下载资源
问答
  • GDAL

    2020-06-22 22:07:36
    GDAL 是 Geospatial Data Abstraction Library 的缩写, 最开始的时候是一个用来处理栅格空间数据的类库,OGR 则是则是来处 理矢量数据的。 参考: https://www.osgeo.cn/pygis/gdal-gdalintro.html#

    GDAL 是 Geospatial Data Abstraction Library 的缩写, 最开始的时候是一个用来处理栅格空间数据的类库,OGR 则是则是来处 理矢量数据的。

    from osgeo import gdal
    

    参考:
    https://www.osgeo.cn/pygis/gdal-gdalintro.html#

    展开全文
  • gdal

    2019-10-03 23:40:51
    gdal posted on 2019-08-29 15:54秦瑞It行程实录 阅读(...) 评论(...) 编辑 收藏 ...

     

    posted on 2019-08-29 15:54 秦瑞It行程实录 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/ruiy/p/11430146.html

    展开全文
  • GDAL源码剖析(七)之GDAL RasterIO使用说明

    万次阅读 多人点赞 2011-12-14 22:59:04
    GDAL中读写图像是最基本的操作,那么RasterIO也就是最基本的函数了,关于RasterIO有很多方式,这个函数的功能相当强大,下面慢慢说明。RasterIO一共有两个,一个是GDALRasterBand::RasterIO,另一个是GDALDataset:...

    一、关于RasterIO

    在GDAL中读写图像是最基本的操作,那么RasterIO也就是最基本的函数了,关于RasterIO有很多方式,这个函数的功能相当强大,下面慢慢说明。RasterIO一共有两个,一个是GDALRasterBand::RasterIO,另一个是GDALDataset::RasterIO,这两个RasterIO都可以对图像数据来进行读写,大多数情况下是一样的,但是还是有一些区别的。

    二、RasterIO参数说明

    下面对两个RasterIO的参数进行一个简单的说明:首先是GDALRasterBand::RasterIO  ,该函数的声明如下,具体可以参考下面网址:http://gdal.org/classGDALRasterBand.html#5497e8d29e743ee9177202cb3f61c3c7

     

    CPLErr GDALRasterBand::RasterIO (   GDALRWFlag eRWFlag,
    int     nXOff,
    int     nYOff,
    int     nXSize,
    int     nYSize,
    void * pData,
    int     nBufXSize,
    int     nBufYSize,
    GDALDataType    eBufType,
    int     nPixelSpace,
    int     nLineSpace 
    )


    接下来是GDALDataset::RasterIO ,该函数的什么如下,具体形式可以参考下面的网址:http://gdal.org/classGDALDataset.html#e077c53268d2272eebed10b891a05743

     

     

    CPLErr GDALDataset::RasterIO    (   GDALRWFlag eRWFlag,
    int     nXOff,
    int     nYOff,
    int     nXSize,
    int     nYSize,
    void * pData,
    int     nBufXSize,
    int     nBufYSize,
    GDALDataType    eBufType,
    int     nBandCount,
    int *   panBandMap,
    int     nPixelSpace,
    int     nLineSpace,
    int     nBandSpace 
    )

     

    由于这两个函数的参数基本一致,大多数参数都是一样的,下面就一起进行说明:

    第一个参数RWFlag来指定是读数据还是写入数据,其值只能有两个即:GF_Read 和GF_Write,分别表示读取数据和写入数据。

    第二个和第三个参数nXOff, nYOff表示读取或者写入图像数据的起始坐标图像的左上角坐标为(0,0)。

    第四个和第五个参数 nXSize, nYSize表示读取或者写入图像数据的窗口大小,nXSize表示宽度,nYSize表示高度,均使用像素为单位,该宽度和高度是从第二个和第三个参数处开始计算。这两个参数和第二第三个参数一起表示就是,读取和写入图像的窗口位置和大小。

    第六个参数pData是指向存储数据的一个指针。如果是写入数据,那么会将pData中的数据写入到栅格图像中去;如果是读取数据,那么会将栅格数据中的数据读入到pData中。pData的真实数据类型是通过后面的eBufType参数来指定的。如GDT_Byte就是代表的是一个8U的数据类型,如果是GDT_Float32就表示的是一个32F(float)的数据类型。RasterIO会自动将读入的数据按照参数eBufType指定的数据类型进行转换,需要注意的是,将浮点数转换为整数时,将对数据进行四舍五入处理;而且从一个大的存储单位转换到一个较小的存储单位是所进行的操作是截断操作而不是按照比例缩小操作,比如原来的实际数据中float的存取数据范围超过了缓冲数据指定的数据byte类型的最大存储范围,操作将把超过byte存储的范围外的数据进行丢弃处理,而不是将float缩小到0~255。

    第七个和第八个参数nBufXSize和nBufYSize参数指定缓冲区的大小。注意pData的大小应当是nBufXSize×nBufYSize。当读取的数据是完整分辨率的数据(原始数据,没有进行缩放操作),他们应该设置和取值窗口的大小相同,也就是与第四个和第五个参数相等,但是在读取时使用了缩小或者放大系数,那么他们需要根据这个缩放系数进行调整。在这种情况下,RasterIO将会使用缩略图组overviews(金字塔)中某个合适的缩略图来进行读取数据。

    第九个和第十个参数(对于GDALDataset来说还有第十一个参数nBandSpace)nPixelSpace和nLineSpace(以及nBandSpace)参数一般情况下是将0作为缺省值。但是,他们可以用于控制存取的内存数据的排列顺序,可以使用这两个参数将图像数据按照另一种组织形式读取内存缓冲区中。也就是说这两个(三个)参数可以读取或者写入非常规组织的缓冲数据。这个首先可以用于在一个缓冲区中包含多个波段数据,并且各个数据之间是交叉排列的,比如一个图像中的数据组织是RGBRGBRGB…,而普通的数据可能是RRR…GGG…BBB…,我们一般读取到的数据就是RGBRGBRGB…这种排列,现在需要使用RRR…GGG…BBB…这样的排列,一般想法就是自己写个for循环之类的,重新组织一次,其实完全没有必要,只要设置这两个(三个)参数就可以达到这个目的。

    nPixelSpace表示的是在一个扫描行中一个像元的字节偏移起始点到下一个像元字节偏移起始点之间的字节间隔,如果默认使用0,那么将使用eBufType作为实际的两个像元之间的字节间隔。

    nLineSpace表示在一行数据和下一行数据之间的起始字节见的间隔,如果使用0,那么将会使用eBufType*nBufXSize来表示实际间隔。

    此外如果使用的GDALDataset::RasterIO函数,最后还有一个参数叫nBandSpace,同上,这个参数的意思就是一个波段与下一个波段之间的起始字节间的间隔,如果使用0,实际将使用eBufType*nBufXSize*nBufYSize来表示。

    对于GDALDataset::RasterIO函数还有两个参数nBandCount和panBandMap,分别表示要读取的波段个数和波段序号,尤其是后一个参数波段序号,可以自定义先读取那一个波段,后读取那一个。具体使用方法见下。

    三、RasterIO使用方法示例

    使用示例一,在Windsow位图数据颜色排列是BGR,但是图像存储的可能是按照RGB来存储的,一般的做法是将数据按照每个波段读出来,然后再认为的按照BGR来进行组织,其实完全可以使用后面三个参数来将读出来的数据自动按照BGR的方式组织好。只要将参数设置为:nBandCount=3;panBandMap =new int[]{3,2,1}即可。     

     

       int panBandMap [3]= {3,2,1};   //按照BGR BGR BGR ... 来读取数据组织
            DT_8U *pData = new DT_8U[iWidth*iHeight*3];
            poDataset ->RasterIO(GF_Read, 0, 0, iWidth,iHeight, pData,iWidth, iHeight,        (GDALDataType)iDataType, 3, panBandMap,iDataType*3, iDataType*iMthWidth*3, iDataType);

     

    使用示例二,实现的是将7波段图像中的第2 3 4波段按照3 42的顺序读入内存中,逐像素存储: 

     

      intbandmap[7];
      bandmap[0]=3;
      bandmap[1]=4;
      bandmap[2]=2;
      Scanline=(nImagSizex*8+31)/32*4;
     BYTE   pafScan=( BYTE )CPLMalloc(sizeof(byte)*nImgSizeX*nImgSizeY*3)
     poDataset->RasterIO(GF_Read, 0, 0,nImgSizeX,nImgSizeY, pafScan,
    nImgSizeX,nImgSizeY,GDT_Byte,3,bandmap,3,Scanline*3,1 );

     

    以这种方式读取之后,直接可构建位图进行显示。这里可以按照自己的需要进行其他方式读取。以上读取方式仅仅为了显示方便,如进行图像处理相关运算,则按波段全部读出会比较方便,即按照常规的方式读取处理:

     

    poDataset->RasterIO( GF_Read, 0,0,nImgSizeX,nImgSizeY, pafScan,
    nImgSizeX,nImgSizeY,GDT_Byte,bandcount,0,0,0,0);

     

    之前申请的内存改为:

     

    BYTE  pafScan=new byte[nImgSizeX*nImgSizeY*bandcount];

     

    将图像数据读入内存后,即可通过指针pafScan对图像进行你想要进行的操作了。

    以下内容更新于2012年5月25日

     

    通过上面的介绍,发现很多人还是不太理解,下面举六个例子,基本上涵盖了RasterIO的所有用法:

    1、第一种方式

    常规的读图方式,这里只读取图像的第二波段的第二行数据,代码如下:

     

    //获取第二波段的波段指针,参数就是表示第几波段的意思
    GDALRasterBand *pBand =poDataset->GetRasterBand(2);   
    //获取该波段的数据类型,如8U,16U等
    GDALDataType dataType =pBand->GetRasterDataType();
    //分配存储一行数据的空间,按照8U的数据类型
    DT_8U *pBuf = newDT_8U[iWidth];   
    pBand->RasterIO(GF_Read,0, 1, iWidth, 1, pBuf, iWidth, 1, GDT_Byte, 0, 0);
    delete []pBuf;
    pBuf = NULL;   

     

    2、第二种方式

    使用数据集读取,按照8bit的数据来进行处理,读取整幅图像,按照BGRBGR…BGR的顺序来组织,代码如下:

     

    DT_8U *pBuf = newDT_8U[iWidth*iWidth*iBandCount];  //分配存储空间
    int panBandMap [3]={3,2,1};   //如果想读取为RGB,那么将数据换成1,2,3
    poDataset->RasterIO(GF_Read, 0, 0, iWidth,iHeight, pBuf,iWidth, iHeight,     
                    GDT_Byte, 3, panBandMap, 3, iWidth*3, 1);
    delete []pBuf;
    pBuf = NULL;

     

    3、第三种方式

    读取一个矩形区域的像元,这里读取第三波段的数据,读取范围为从100行,200列开始,到400行,400列结束的一个矩形区域,代码如下:

     

    //获取第三波段的波段指针,参数就是表示第几波段的意思
    GDALRasterBand *pBand =poDataset->GetRasterBand(3);
    //获取该波段的数据类型,如8U,16U等
    GDALDataType dataType =pBand->GetRasterDataType();
    //分配存储数据的空间,按照8U的数据类型,大小按照矩形区域来确定
    DT_8U *pBuf = newDT_8U[200*300];  
    pBand->RasterIO(GF_Read,200, 100, 200, 300, pBuf, 200, 300, GDT_Byte, 0, 0);
    delete []pBuf;
    pBuf = NULL;

     

    4、第四种方式

    读取缩放区域,即读取一个区域的数据,然后把这个区域进行缩放,放大或者缩小,这个非常有用,比如在显示大图像的时候,就可以用这个方式来进行读取数据,这里依旧读取第三波段的数据,读取范围为从100行,200列开始,到400行,400列结束的一个矩形区域,按照0.5的缩放比例对区域进行缩放,所以原始图像的区域大小为200*300,缩放后就是100*150。代码如下:

     

    //为了举例,这里读取第三波段的数据,读取范围为从100行,200列开始,到400行,400列结束的一个矩形区域
    GDALRasterBand *pBand =poDataset->GetRasterBand(3);   
    //获取该波段的数据类型,如8U,16U等
    GDALDataType dataType =pBand->GetRasterDataType();
    //按照0.5的区域进行缩放,所以原始图像的区域大小为200*300,缩放后就是100*150
    //分配存储数据的空间,按照8U的数据类型,大小按照矩形区域来确定
    DT_8U *pBuf = newDT_8U[100*150];  
    pBand->RasterIO(GF_Read,200, 100, 200, 300, pBuf, 100, 150, GDT_Byte, 0, 0);
    delete []pBuf;
    pBuf = NULL;   

     

    5、第五种方式

    将8bit读取为16bit,为了方便说明,这里读取第一波段的第一行数据,这里假设打开的数据是一个8bit的数据。代码如下:

     

    GDALRasterBand *pBand =poDataset->GetRasterBand(1);
    //获取该波段的数据类型,如8U,16U等
    GDALDataType dataType =pBand->GetRasterDataType();
    //分配存储一行数据的空间,按照16U的数据类型
    DT_16U *pBuf = newDT_16U[iWidth]; 
    pBand->RasterIO(GF_Read,0, 0, iWidth, 1, pBuf, iWidth, 1, GDT_UInt16, 0, 0);
    delete []pBuf;
    pBuf = NULL;   

     

    6、第六种方式

    将16bit读取为8bit,为了方便说明,这里依旧读取第一波段的第一行数据,这里假设打开的数据是一个16bit的数据。在这里需要特别的注意,虽然GDAL提供这种可以把16bit的数据读取到8bit的存储空间中,GDAL会自动进行转换,但是这种转换是有损的,和把int值转为unsigned char类似,超过存储范围的就会被截取掉,这里也是一样,比如,16bit中的数据有个超过了255,那么使用8bit的数据存储来只剩下255了,所以一般不建议从这里转换/最好自己写个算法来进行转换,比如线性拉伸等,代码如下:

     

    //!!!!!!!!!!!!!!!!!!
    //强烈注意,虽然GDAL提供这种可以把16bit的数据读取到8bit的存储空间中,但是会自动进行转换这种转换是有损的,和把int值转为unsigned char类似,超过存储范围的就会被截取掉,这里也是一样。比如,16bit中的数据有个超过了255,那么使用8bit的数据存储来只剩下255了,所以一般不建议从这里转换。最好自己写个算法来进行转换,比如线性拉伸等。
    //!!!!!!!!!!!!!!!!!!
    GDALRasterBand *pBand =poDataset->GetRasterBand(1);
    GDALDataType dataType =pBand->GetRasterDataType();
     
    DT_8U *pBuf = new DT_8U[iWidth];
    pBand->RasterIO(GF_Read,0, 0, iWidth, 1, pBuf, iWidth, 1, GDT_Byte, 0, 0);
    …
    delete []pBuf;
    pBuf = NULL;

     

    如果还有疑问,请留言,或者发邮件。

    展开全文
  • GDAL资料GDAL资料GDAL资料GDAL资料GDAL资料
  • GDAL java包

    2020-12-14 20:27:07
    GDAL安装包,GDAL安装包,GDAL安装包,GDAL安装包,GDAL安装包 GDAL安装包,GDAL安装包
  • GDAL 2.2.2

    2017-11-12 13:35:46
    GDAL库 2.2.2 GDAL可处理多中栅格格式文件,便于读取、存储、编辑。结合OPENCV很方便。
  • gdal库(含gdal200.dll,gdal_i.lib文件)
  • <div><p>With gdal 1.10.0 (Released in April 2013) the current "GDAL Version Information macro" was introduced. Older versions used a different version of the macro. The current version of ...
  • GDAL_ GDAL API Tutorial

    2013-12-03 15:57:30
    GDAL_ GDAL API Tutorial 景观生态学软件
  • gdal workshop

    2018-01-29 00:12:55
    gdal的workshop,介绍了如何使用gdal处理栅格和矢量数据。(内容是英文的,之前上传的别的资源,有人说英文看不懂,给了一星…………)
  • Gdal 2.2.3

    2020-12-29 02:01:19
    <p>Update the GDAL native libraries to version 2.2.3. Modify GDAL library loader to support loading of multiple native libraries, instead of the previous fixed single library 'gdalalljni'. ...
  • GDAL_CALC GDAL命令

    2020-04-12 17:11:33
    使用gdal_calc重新分类栅格 gdal_calc是GDAL实用程序中较少使用的工具之一。没有很多使用它的示例,并且一些高级功能没有得到很好的记录。我最近发现自己经常使用它,并且发现了一些非常强大的用例。 处理多波段栅格...

    使用gdal_calc重新分类栅格
    gdal_calc是GDAL实用程序中较少使用的工具之一。没有很多使用它的示例,并且一些高级功能没有得到很好的记录。我最近发现自己经常使用它,并且发现了一些非常强大的用例。
    处理多波段栅格
    gdal_calc具有用于指定输入的特殊语法。如果要使用2个图像-input1.tif和input2.tif,请按以下方式指定它们
    gdal_calc -A input1.tif -B input2.tif …但是,如果您想进行一些波段数学运算或分别使用输入的每个波段怎么办?如果您的input.tif有4个频段,请按照以下方法指定它们
    gdal_calc -A input.tif --A_band=1 -B input.tif --B_band=2 -C input.tif --C_band=3 -D input.tif --D_band=4 …表达式语法
    gdal_calc使用numpy语法指定计算。有许多种写表达式的方法。这是我首选方法的一些示例
    假设您有一个1波段图像input.tif,并且要查找值> 100的所有像素。将在每个像素处计算以下表达式。结果将为1,其中像素值通过表达式文本,而在其他位置为0。

    gdal_calc -A input.tif --calc=“A>100” --outfile output.tif

    因此,这为我们进行重新分类提供了基础。假设您的目标是对input.tif进行重新分类,如下所示
    ● 0-100→1
    ● 101-200→2
    ● > 200→3
    我们可以在表达式中添加3个条件,然后将结果与适当的重新分类值相乘以获得结果。

    gdal_calc -A input.tif --calc="(A<=100)1 + (A>100)(A<=200)*2 + (A>200)*3" --outfile output.tif

    您也可以使用logical_or和logical_and函数获得相同的结果。

    gdal_calc -A input.tif --calc="(A<=100)*1 + logical_and(A>100,A<=200)*2 + (A>200)*3" --outfile output.tif

    但是logical_and和logical_or仅接受2个参数。因此,如果您有多个条件(如我们在下面的示例中看到的),则表达式的编写将变得更加棘手。因此,我更喜欢使用我们之前使用的乘法语法。但是gdal_calc可以使用numpy库提供的全套功能。
    重新分类多波段栅格
    现在,我们可以尝试将这些概念应用于对多波段栅格进行重新分类。该表达式有点复杂,但是如果您遵循上述示例,它应该很有意义。
    假设我们要对4频段输入进行重新分类。tif如下
    ● (R,G,B,A)值(<= 100,<= 100,<= 100,255)→1
    ● (R,G,B,A)值(100-200,100-200,100-200,255)→2
    ● (R,G,B,A)值(> = 200,> = 200,> = 200,255)→3
    ● 所有其他组合为0
    该表达式可以如下编译

    gdal_calc -A input.tif --A_band=1 -B input.tif --B_band=2 -C input.tif --C_band=3 -D input.tif --D_band=4 --outfile output.tif --calc="(A<=100)(B<=100)(C<=100)(D==255) + (A>100)(A<=200)(B>100)(B<=200)(C>100)(C<=200)(D==255)2 + (A>=200)(B>=200)(C>=200)*(D==255)*3"

    展开全文
  • gdal error

    2020-12-26 14:48:31
    <div><p>hi, I am using django 1.11 when i run the migrate command it give me gdal related error but you mentioned that i dont need gdal for this. can you please help me in this regard</p><p>该提问来源...
  • GDAL简介

    万次阅读 2018-05-14 07:30:52
    GDAL简介 作者:阿振 邮箱:tanzhenyugis@163.com 博客:https://blog.csdn.net/theonegis/article/details/80089375 修改时间:2018-05-13 声明:本文为博主原创文章,转载请注明原文出处 Geospatial Data ...
  • GDAL 1.11.4

    2021-01-01 05:54:29
    <div><p>Fiona is broken in the default channel because it installs GDAL 2.0, which fiona is not ready to use yet. <p>See ...
  • gdal开发文档

    2018-08-16 14:25:35
    gdal开发文档,比较清晰的介绍了一下常用的gdal命令,以及gdal的一下基础原理知识,有助于初步了解gdal
  • docker-golang-gdal:DockerHub Golang + Gdal
  • 已编译的GDAL gdal111

    2014-08-27 22:27:31
    已编译的GDAL,c++编译的gdal11版本,证实可用,共五个文件夹,包括lib、include、bin、data、html五个文件夹
  • python for gdal

    2019-01-15 17:31:10
    python for gdal pdf
  • <div><p>Split rust-gdal into a gdal-sys and a (rust-) gdal crate. (I'm currently working on this)</p><p>该提问来源于开源项目:georust/gdal</p></div>
  • GDAL安装

    2021-01-22 13:10:09
    GDAL下载 地址:https://trac.osgeo.org/gdal/wiki/DownloadSource
  • gdal安装

    2020-02-27 15:44:37
    conda/pip search gdal 查看版本,选择合适的版本, 例如: conda search gdal 命令行 conda/pip install gdal=版本号 ,注意加上版本号,否则可能安装上老版本(windows/linux都可用。例如: conda install gdal=...
  • Java 环境下的 GDAL类库( jar + dll )
  • gdal操作

    2020-04-26 16:56:11
    gdal浅尝篇 1.gdal背景知识 GDAL主要提供了三大类数据的支持:栅格数据,矢量数据以及空间网络数据(Geographic Network Model)。 GDAL不但提供了API借口方便开发人员自定义自己的功能,而且还提供了一系列...
  • gdal1.11.5 源文件

    2020-05-01 13:43:44
    本资源为GDAL1.11.5版本源码,方便重新编译使用。GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行...
  • windows环境下gdal库的搭建,包含gdal\GDAL及python安装包,gdal为202-1700,GDAL位2.21-win32-py2.7.
  • java操作gdal

    2018-09-26 11:36:26
    java操作gdal 64位,集成版!2018最新版。 在使用Java处理图像时使用Gdal
  • 二、JAVA开发环境整合GDAL1、新建一个SpringMvc或者SpringBoot项目跳过这个过程,大家根据IDE自行完成2、项目资源结构采用资源管理gdal文件,通过Maven加载gdal.jar,在web应用resources目录下新增gdal文件件,再...
  • GDAL】C# 调用 gdal

    2020-11-04 12:53:40
    c# 项目使用GDAL: VS2019从NuGet中导入的 “GDAL” 和 “GDAL.Native” 应用到项目中出错,将解决方法记录一下 解决步骤: Step1:导入“GDAL” 和 “GDAL.Native”     点击  工具 > NuGet 包管理器 >...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,521
精华内容 4,208
关键字:

GDAL