GeoPy
  • 前言
  • Python基础
    • Python环境搭建及基本数据类型
    • 运算符及字符串
    • 序列与字典
    • 流程控制语句
    • 函数
    • 面向对象编程初识
    • 面向对象编程高级
    • Python科学计算
    • 空间数据处理环境搭建
  • 空间数据基础
    • 空间参考系统
    • 地图投影
    • 空间数据
  • GDAL空间数据处理
    • GDAL简介
    • GDAL数据基本操作
      • 打开栅格数据的正确方式
      • 栅格数据格式转换
      • 栅格数据创建与保存
      • 读取HDF或者NetCDF格式的栅格数据
      • 栅格数据投影转换
      • 栅格数据裁剪
      • 打开Shapefile文件的正确方式
      • 创建Shapefile文件并写入数据
      • 矢量数据投影转换
    • Fiona矢量数据处理
      • Fiona简介及Shapefile数据读取
      • 使用Fiona创建Shapefile矢量数据
    • Rasterio栅格数据处理
      • 使用Rasterio读取栅格数据
      • 使用Rasterio创建栅格数据
      • 使用Rasterio做投影变换
Powered by GitBook
On this page
  • 思路分析
  • 代码实现
  1. GDAL空间数据处理
  2. Rasterio栅格数据处理

使用Rasterio做投影变换

Previous使用Rasterio创建栅格数据

Last updated 6 years ago

作者:阿振

邮箱:tanzhenyugis@163.com

博客:

修改时间:2018-06-11

声明:本文为博主原创文章,转载请注明原文出处

思路分析

在之前GDAL系列文章中的《》提到过,做投影转换最重要的是计算数据在目标空间参考系统中的放射变换参数(GeoTransform)和图像的尺寸(行数和列数)。而且我们使用GDAL基本库自己写代码进行了计算。

在rasterio中提供了calculate_default_transform,可以直接计算目标系统中的放射变换参数和图像尺寸。

这样我们直接根据计算的结果更新目标文件的元信息即可。

代码实现

import numpy as np
import rasterio
from rasterio.warp import calculate_default_transform, reproject, Resampling
from rasterio import crs

src_img = 'example.tif'
dst_img = 'reproject.tif'

# 转为地理坐标系WGS84
dst_crs = crs.CRS.from_epsg('4326')


with rasterio.open(src_img) as src_ds:
    profile = src_ds.profile

    # 计算在新空间参考系下的仿射变换参数,图像尺寸
    dst_transform, dst_width, dst_height = calculate_default_transform(
        src_ds.crs, dst_crs, src_ds.width, src_ds.height, *src_ds.bounds)

    # 更新数据集的元数据信息
    profile.update({
        'crs': dst_crs,
        'transform': dst_transform,
        'width': dst_width,
        'height': dst_height,
        'nodata': 0
    })

    # 重投影并写入数据
    with rasterio.open(dst_img, 'w', **profile) as dst_ds:
        for i in range(1, src_ds.count + 1):
            src_array = src_ds.read(i)
            dst_array = np.empty((dst_height, dst_width), dtype=profile['dtype'])

            reproject(
                # 源文件参数
                source=src_array,
                src_crs=src_ds.crs,
                src_transform=src_ds.transform,
                # 目标文件参数
                destination=dst_array,
                dst_transform=dst_transform,
                dst_crs=dst_crs,
                # 其它配置
                resampling=Resampling.cubic,
                num_threads=2)

            dst_ds.write(dst_array, i)
https://blog.csdn.net/theonegis/article/details/80089375
栅格数据投影转换