rasterio实用教程(4)——坐标系转换
文章目录
- 背景
- 实战
背景
在测绘领域中提到的坐标系有两种,一种是地理坐标系,用经纬度高程来表达;另一种是投影坐标系,即经过投影变换后的平面坐标系,通常是xy表达。
坐标系转换有四种情况:
- 地理坐标系转投影坐标系(也叫大地坐标正算)
- 投影坐标系转地理坐标系(也叫大地坐标反算)
- 一种地理坐标系转另一种地理坐标系
- 一种投影坐标系转另一种投影坐标系
本文的坐标系转换理论上涵盖以上四种情况。
实战
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,这里提供一个正规方法:
- 打开spatial reference官网
- 搜索你需要的坐标系,例如wgs84
- 点击进入参考页面,如图
- 点击Proj4,结果就出来了
- 之后在from_proj4(…)函数中黏贴该字符串即可
rasterio实用教程(4)——坐标系转换相关推荐
- rasterio实用教程(3)——图像掩膜提取
文章目录 背景 实战 背景 掩膜提取是指基于矢量面范围内的栅格像素值,并输出为新图像的操作. 因为涉及矢量面数据获取,所以需要引入fiona包,未安装的读者请自行安装. 实战 import fiona ...
- GIS坐标系转换工具CoordSystemTransform使用教程
CoordSystemTransform CoordSystemTransform这款工具由" 阿拉灯Aladeng"编写,项目上传至Github分享,所有源码都可以下载和修改.C ...
- map 长度_Python实用教程系列——高阶函数Map、Filter、Reduce
点击上方蓝色文字关注我们吧 有你想要的精彩 作者 | 那个百分十先生出品 | Python知识学堂 上次推文我们介绍了python中的<Logging日志模块>的相关知识,这次推文我们将学 ...
- python教材目录_Python实用教程/高等院校信息技术规划教材简介,目录书摘
编辑推荐: 本书简洁.凝练地介绍目前十分流行的跨平台粘性语言--Python的核心内容.既可以帮助初学者快速上手编程,也可作为想了解Python语言特点的专业人士的参考书. 每个知识点后都有大量实用的 ...
- 学习笔记之Java程序设计实用教程
Java程序设计实用教程 by 朱战立 & 沈伟 学习笔记之JAVA多线程(http://www.cnblogs.com/pegasus923/p/3995855.html) 国庆休假前学习了 ...
- 工业机器人入门实用教程_机器学习实用入门
工业机器人入门实用教程 Following on from my earlier post on Data Science, here I will try to summarize and comp ...
- 计算机英语 传输介质,计算机英语实用教程unit7
计算机英语实用教程unit7 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 Unit 7 Network[教学目的]o Learn a ...
- 按120分计算成绩 mysql_Mysql实用教程试卷B.doc
. 上 装 订 线 系名: 班级: 姓名: 学号: 考试日期: 下 住 装 订 线 河南教育学院2014-2015学年第二学期期末考试 软件学院2014级计算机信息管理专业普通专科班 <MySQ ...
- 微机计算机硬件技术实用教程知识点,微机接口技术实用教程1.ppt
微机接口技术实用教程1 微机接口技术实用教程 第1章 微型计算机接口技术基础 第1章 微型计算机接口技术基础 1.1 接口技术概述 输入/输出(Input/Output,I/O)是计算机与外部世界交换 ...
最新文章
- 对c语言这门课程的认识,一路走来,浅谈c语言的学习感想
- navicat连接云数据库报错2003,2005
- C++虚函数---我的理解
- P3914-染色计数【树形dp】
- LeetCode--171--Excel表列序号
- Google首席决策师告诉你,AI和数据科学团队需要哪10种角色
- 在Linux下编写C++程序,使用gcc编译c++出错
- redis 集群的密码设置
- CRM【第三篇】: crm业务
- pro*c添加SQLCHECK后编译报错PLS-S-00201
- CC学iOS杂记 001_Device
- 在centos7中安装flutter,执行flutter --version时显示flutter的版本为v0.0.0 unknown
- 软件设计师:12-下午题历年真题
- 《BJBR虚拟仿真解决方案(描述精选)》(Yanlz+SteamVR+5G+AI+VR+AR+MR+HR+BR+CR+DR+ER+FR+GR+人工智能+人机交互+立钻哥哥+==)
- 计算机教室科学名言,描写计算机教室的优美句子23条
- PMOS类型 LDO基本原理
- 计算机考研一志愿不满,【建议收藏】40所不歧视本科 保护一志愿院校 内含大量985/211!...
- macbook的 safari浏览器退出后又自动启动,强制退出以后也重启,重启电脑也重启
- 微信支付-当前页面的URL未注册
- abaqus6.13+vs2012+ivf2013用户子程序关联步骤
热门文章
- 不同波特率传输时间计算
- 错误: 找不到符号 符号: 方法 getResources() 位置: 类型为String的变量 dataSex
- Django Rest Framework框架
- PARALYSIS AS “SPIRITUAL LIBERATION” IN JOYCE’S DUBLINERS Iven Lucas Heister, B.A.【翻译】
- 到底什么是语义分割?
- 【CS231n assignment 2022】Assignment 3 - Part 3,Transformer
- 自注意力机制与注意力机制
- 第六章.决策树(Decision Tree)—CART算法
- 分层结构的生活例子_分层作业设计案例
- matplotlib 绘图 中文乱码 0.5