文章目录

  • 背景
  • 实战

背景

在测绘领域中提到的坐标系有两种,一种是地理坐标系,用经纬度高程来表达;另一种是投影坐标系,即经过投影变换后的平面坐标系,通常是xy表达。

坐标系转换有四种情况:

  1. 地理坐标系转投影坐标系(也叫大地坐标正算)
  2. 投影坐标系转地理坐标系(也叫大地坐标反算)
  3. 一种地理坐标系转另一种地理坐标系
  4. 一种投影坐标系转另一种投影坐标系

本文的坐标系转换理论上涵盖以上四种情况。

实战

import numpy as np
import rasterio
from rasterio.warp import calculate_default_transform, reproject
from rasterio import crsdataset = rasterio.open('D:/A_2021寒假/城市群相关/Data/ESACCI土地覆盖数据1992-2015/final/mask_proj_con_mask_ESACCI-LC-L4-LCCS-Map-300m-P1Y-1992-v2.0.7.tif')
src_img = 'input.tif' # 输入图像
dst_img = 'output.tif' # 输出图像
dst_crs = crs.CRS.from_proj4('+proj=lcc +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs') # 输出图像坐标系with rasterio.open(src_img) as src_ds:# 计算在新空间参考系下的仿射变换参数,图像尺寸dst_transform, dst_width, dst_height = calculate_default_transform(src_ds.crs, # 输入坐标系dst_crs, # 输出坐标系src_ds.width, # 输入图像宽src_ds.height, # 输入图像高*src_ds.bounds) # 输入数据源的图像范围# 更新数据集的元数据信息
profile = src_ds.meta.copy()
profile.update({'crs': dst_crs,'transform': dst_transform,'width': dst_width,'height': dst_height})# 重投影并写入数据
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.average,num_threads=2)# 写入图像dst_ds.write(dst_array, i)

如果你看过我上一篇博文重采样,你会发现代码基本一致。是的,实际上重采样和坐标系转换有个共同点,就是需要计算目标图像在新的坐标系下的仿射变换参数和空间范围。这一步都是通过calculate_default_transform函数来实现的。

坐标系转换的核心在于要写对输出图像的坐标系,即代码中的dst_crs,我这里采用的是crs.CRS.from_proj4(…),实际上还有一些方法,例如from_wkt、from_epsg等,具体参考官网

如果你想获取正确的proj4 string,这里提供一个正规方法:

  1. 打开spatial reference官网
  2. 搜索你需要的坐标系,例如wgs84
  3. 点击进入参考页面,如图
  4. 点击Proj4,结果就出来了
  5. 之后在from_proj4(…)函数中黏贴该字符串即可

rasterio实用教程(4)——坐标系转换相关推荐

  1. rasterio实用教程(3)——图像掩膜提取

    文章目录 背景 实战 背景 掩膜提取是指基于矢量面范围内的栅格像素值,并输出为新图像的操作. 因为涉及矢量面数据获取,所以需要引入fiona包,未安装的读者请自行安装. 实战 import fiona ...

  2. GIS坐标系转换工具CoordSystemTransform使用教程

    CoordSystemTransform CoordSystemTransform这款工具由" 阿拉灯Aladeng"编写,项目上传至Github分享,所有源码都可以下载和修改.C ...

  3. map 长度_Python实用教程系列——高阶函数Map、Filter、Reduce

    点击上方蓝色文字关注我们吧 有你想要的精彩 作者 | 那个百分十先生出品 | Python知识学堂 上次推文我们介绍了python中的<Logging日志模块>的相关知识,这次推文我们将学 ...

  4. python教材目录_Python实用教程/高等院校信息技术规划教材简介,目录书摘

    编辑推荐: 本书简洁.凝练地介绍目前十分流行的跨平台粘性语言--Python的核心内容.既可以帮助初学者快速上手编程,也可作为想了解Python语言特点的专业人士的参考书. 每个知识点后都有大量实用的 ...

  5. 学习笔记之Java程序设计实用教程

    Java程序设计实用教程 by 朱战立 & 沈伟 学习笔记之JAVA多线程(http://www.cnblogs.com/pegasus923/p/3995855.html) 国庆休假前学习了 ...

  6. 工业机器人入门实用教程_机器学习实用入门

    工业机器人入门实用教程 Following on from my earlier post on Data Science, here I will try to summarize and comp ...

  7. 计算机英语 传输介质,计算机英语实用教程unit7

    计算机英语实用教程unit7 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 Unit 7 Network[教学目的]o Learn a ...

  8. 按120分计算成绩 mysql_Mysql实用教程试卷B.doc

    . 上 装 订 线 系名: 班级: 姓名: 学号: 考试日期: 下 住 装 订 线 河南教育学院2014-2015学年第二学期期末考试 软件学院2014级计算机信息管理专业普通专科班 <MySQ ...

  9. 微机计算机硬件技术实用教程知识点,微机接口技术实用教程1.ppt

    微机接口技术实用教程1 微机接口技术实用教程 第1章 微型计算机接口技术基础 第1章 微型计算机接口技术基础 1.1 接口技术概述 输入/输出(Input/Output,I/O)是计算机与外部世界交换 ...

最新文章

  1. 对c语言这门课程的认识,一路走来,浅谈c语言的学习感想
  2. navicat连接云数据库报错2003,2005
  3. C++虚函数---我的理解
  4. P3914-染色计数【树形dp】
  5. LeetCode--171--Excel表列序号
  6. Google首席决策师告诉你,AI和数据科学团队需要哪10种角色
  7. 在Linux下编写C++程序,使用gcc编译c++出错
  8. redis 集群的密码设置
  9. CRM【第三篇】: crm业务
  10. pro*c添加SQLCHECK后编译报错PLS-S-00201
  11. CC学iOS杂记 001_Device
  12. 在centos7中安装flutter,执行flutter --version时显示flutter的版本为v0.0.0 unknown
  13. 软件设计师:12-下午题历年真题
  14. 《BJBR虚拟仿真解决方案(描述精选)》(Yanlz+SteamVR+5G+AI+VR+AR+MR+HR+BR+CR+DR+ER+FR+GR+人工智能+人机交互+立钻哥哥+==)
  15. 计算机教室科学名言,描写计算机教室的优美句子23条
  16. PMOS类型 LDO基本原理
  17. 计算机考研一志愿不满,【建议收藏】40所不歧视本科 保护一志愿院校 内含大量985/211!...
  18. macbook的 safari浏览器退出后又自动启动,强制退出以后也重启,重启电脑也重启
  19. 微信支付-当前页面的URL未注册
  20. abaqus6.13+vs2012+ivf2013用户子程序关联步骤

热门文章

  1. 不同波特率传输时间计算
  2. 错误: 找不到符号 符号: 方法 getResources() 位置: 类型为String的变量 dataSex
  3. Django Rest Framework框架
  4. PARALYSIS AS “SPIRITUAL LIBERATION” IN JOYCE’S DUBLINERS Iven Lucas Heister, B.A.【翻译】
  5. 到底什么是语义分割?
  6. 【CS231n assignment 2022】Assignment 3 - Part 3,Transformer
  7. 自注意力机制与注意力机制
  8. 第六章.决策树(Decision Tree)—CART算法
  9. 分层结构的生活例子_分层作业设计案例
  10. matplotlib 绘图 中文乱码 0.5