研究通常会涉及到多源数据,需要进行基于像元的运算,在此之前需要对数据进行地理配准、空间配准、重采样等操作。那么当不同来源,不同分辨率的数据重采样为同一空间分辨率之后,各个像元不一一对应,有偏移该怎么办呢?

在ArcGIS进行重采样操作时(resample 或者project raster)可以通过设置Environment --> Processing Extent --> Snap Raster 为参考栅格数据,解决这一问题。详见我的这一篇博客知乎文章

但面对大批量数据的时候,我们希望通过编程解决这一问题,下面分享gdal中对这一问题的解决思路。

# -*- coding: utf-8 -*-
"""
Created on Wed Sep 23 23:32:25 2020
以栅格A参考,对栅格B进行重投影操作,输出结果和栅格A像元大小一致,相互对齐
https://gis.stackexchange.com/questions/234022/resampling-a-raster-from-python-without-using-gdalwarp
https://gis.stackexchange.com/questions/268119/how-can-2-geotiff-rasters-be-aligned-and-forced-to-have-same-resolution-in-pytho
@author: pan
"""
from osgeo import gdal
from osgeo import gdalconst def pixel_geo_register(infile,outfile,reffile,methods):
'''
infile:输入文件
outfile:输出文件
reffile:参考文件
methods:重采样方法
gdalconst.GRA_NearestNeighbour:near
gdalconst.GRA_Bilinear:bilinear
gdalconst.GRA_Cubic:cubic
gdalconst.GRA_CubicSpline:cubicspline
gdalconst.GRA_Lanczos:lanczos
gdalconst.GRA_Average:average
gdalconst.GRA_Mode:mode
'''
# 打开tif文件
in_ds = gdal.Open(infile, gdalconst.GA_ReadOnly) # 输入文件
ref_ds = gdal.Open(reffile, gdalconst.GA_ReadOnly) # 参考文件 # 参考文件与输入文件的的地理仿射变换参数与投影信息
in_trans = in_ds.GetGeoTransform()
in_proj = in_ds.GetProjection()
ref_trans = ref_ds.GetGeoTransform()
ref_proj = ref_ds.GetProjection()
# 参考文件的波段参考信息
band_ref = ref_ds.GetRasterBand(1) # 输入文件的行列数
x = ref_ds.RasterXSize
y = ref_ds.RasterYSize # 创建输出文件
driver= gdal.GetDriverByName('GTiff')
output = driver.Create(outfile, x, y, 1, gdalconst.GDT_UInt16)
# 设置输出文件地理仿射变换参数与投影
output.SetGeoTransform(ref_trans)
output.SetProjection(ref_proj) # 重投影,插值方法为双线性内插法
gdal.ReprojectImage(in_ds, output, in_proj, ref_proj, methods) # 关闭数据集与driver
in_ds = None
ref_ds = None
driver = None
output = None if __name__ == '__main__':
infile=r''
outfile=r''
reffile=r''
methods=gdalconst.GRA_Bilinear pixel_geo_register(infile,outfile,reffile,methods)

GDAL重投影重采样像元配准对齐的更多相关文章

  1. PL-SVO公式推导及代码解析:地图点重投影和特征对齐

    对当前帧进行地图点重投影和特征对齐 // map reprojection & feature alignment SVO_START_TIMER("reproject") ...

  2. AE设置投影而非重投影IGeoDatasetSchemaEdit

    AE设置投影而非重投影 读取一个jpg格式的影像,包含jgw文件,这时设置投影.赋值操作. IRasterDataset raster = rasterWsp.OpenRasterDataset(Fi ...

  3. Bundle Adjustment---即最小化重投影误差(高翔slam---第七讲)

    一.历史由来 Adjustment computation最早是由geodesy的人搞出来的.19世纪中期的时候,geodetics的学者就开始研究large scale triangulations ...

  4. ArcGIS进行自定义投影转换(重投影)

    这里记录一下使用自定义七参数进行投影转换的过程. 1.主动创建自定义地理(坐标)变换 首先在系统工具箱里面选择创建自定义地理(坐标)变换 在弹出的窗口中输入相关参数即可. 转换方法选择COORDINA ...

  5. 【opencv】projectPoints 三维点到二维点 重投影误差计算

    今天计算rt计算误差——重投影误差 用solvepnp或sovlepnpRansac,输入3d点.2d点.相机内参.相机畸变,输出r.t之后 用projectPoints,输入3d点.相机内参.相机畸 ...

  6. opencv 角点检测+相机标定+去畸变+重投影误差计算

    https://blog.csdn.net/u010128736/article/details/52875137 https://blog.csdn.net/h532600610/article/d ...

  7. GDAL获取投影坐标系注意问题

    GDAL提供了获取投影坐标系的C函数GDALGetProjectionRef以及对应的C++函数GetProjectionRef, 但在获取投影坐标系之前需要设置通过CPLSetConfigOptio ...

  8. modis数据处理的坑(MOD02,mod03,mod04,MCD19A2)

    一直以来处理modis产品都是用的 modis conversion toolkit(MCTK),用 IDL 来跑感觉好像也没什么问题,好像并没有去验证结果到底对不对,因为用的气溶胶数据 MOD04_ ...

  9. Google earth engine 中的投影、重采样、尺度

    本文主要翻译自下述GEE官方帮助 https://developers.google.com/earth-engine/guides/scale https://developers.google.c ...

随机推荐

  1. [gym102770L]List of Products

    有一个很重要的性质:若$a\le b$且$c\le d$,则$ac\le bd$ 根据这一性质,就可以利用单调性$o(n)$求出小于$a_{x}\cdot b_{y}$的数的个数(先要对$a$和$b$ ...

  2. [loj3175]排列鞋子

    贪心与最近的鞋子匹配(大小相同且方向相反),记$a_{x}$表示第x双鞋子的左位置,$b_{x}$表示右位置 若$a_{x}>b_{x}$,那么可以交换这两双鞋子并令答案+1,所以不妨设$a_{ ...

  3. I.MX启动方式和头部

    1. 启动方式 2. 头部信息 编译好的bin文件烧写到SD卡中,需要加一些头部文件,才可以执行. Image vector table,简称 IVT,IVT 里面包含了一系列的地址信息,这些地址信息 ...

  4. CF1477A Nezzar and Board

    考虑 \(2x - y\) 我们改为 \(x + (x - y)\) 是一个更好的形式. 我们可以表示一个数为\(x_i + \sum_{j,k}(x_j - x_k) = K\) 我们考虑移到 \( ...

  5. Linux系统编程之命名管道与共享内存

    在上一篇博客中,我们已经熟悉并使用了匿名管道,这篇博客我们将讲述进程间通信另外两种常见方式--命名管道与共享内存. 1.命名管道 管道是使用文件的方式,进行进程之间的通信.因此对于管道的操作,实际上还 ...

  6. Python基础之流程控制if判断

    目录 1. 语法 1.1 if语句 1.2 if...else 1.3 if...elif...else 2. if的嵌套 3. if...else语句的练习 1. 语法 1.1 if语句 最简单的i ...

  7. php操作mongodb手册地址

    php操作mongodb手册地址: http://php.net/manual/zh/class.mongocollection.php

  8. ansible-playbook 编译安装nginx

    mkdir /etc/ansible/roles/nginx/{files,templates,tasks,handlers,vars,default,meta} -pv └── nginx ├── ...

  9. 巩固java第五天

    巩固内容: HTML 实例解析 <p> 元素: <p>这是第一个段落.</p> 这个 <p> 元素定义了 HTML 文档中的一个段落. 这个元素拥有一个 ...

  10. A Child's History of England.17

    CHAPTER 6 ENGLAND UNDER HAROLD HAREFOOT, HARDICANUTE, AND EDWARD THE CONFESSOR Canute left three son ...