python读写tif文件
个人整理的python地理信息库,本文代码也在其中,欢迎使用: https://github.com/Adam0429/geo-py
顺便帮公司打个广告,欢迎遥感类专家的加入~~
投简历戳这里,英视睿达欢迎您!
废话不多说,直接上代码
from tqdm import tqdm
from osgeo import gdal,ogr,osr
import numpy as np
from glob import globdef read_tif(tif_path):ds = gdal.Open(tiff_path)row = ds.RasterXSizecol = ds.RasterYSizeband = ds.RasterCountfor i in range(band):data = ds.GetRasterBand(i+1).ReadAsArray()data = np.expand_dims(data , 2)if i == 0:allarrays = dataelse:allarrays = np.concatenate((allarrays, data), axis=2)return {'data':allarrays,'transform':ds.GetGeoTransform(),'projection':ds.GetProjection(),'bands':band,'width':row,'height':col}# 左上角点坐标 GeoTransform[0],GeoTransform[3] Transform[1] is the pixel width, and Transform[5] is the pixel heightdef write_tif(fn_out, im_data, transform,proj=None):'''功能:----------将矩阵按某种投影写入tif,需指定仿射变换矩阵,可选渲染为rgba参数:----------fn_out:str输出tif图的绝对文件路径im_data: np.arraytif图对应的矩阵transform: list/tuple gdal-like仿射变换矩阵,若im_data矩阵起始点为左上角且投影为4326,则为(lon_x.min(), delta_x, 0, lat_y.max(), 0, delta_y)proj: str(wkt格式)投影,默认投影坐标为4326,可用osr包将epsg转化为wkt格式,如srs = osr.SpatialReference()# establish encodingsrs.ImportFromEPSG(4326) # WGS84 lat/lonproj = srs.ExportToWkt() # create wkt fromat of proj# 设置投影,proj为wkt formatif proj is None:proj = 'GEOGCS["WGS 84",\DATUM["WGS_1984",\SPHEROID["WGS 84",6378137,298.257223563, \AUTHORITY["EPSG","7030"]], \AUTHORITY["EPSG","6326"]], \PRIMEM["Greenwich",0, \AUTHORITY["EPSG","8901"]], \UNIT["degree",0.0174532925199433, \AUTHORITY["EPSG","9122"]],\AUTHORITY["EPSG","4326"]]'# 渲染为rgba矩阵# 设置数据类型if 'int8' in im_data.dtype.name:datatype = gdal.GDT_Byteelif 'int16' in im_data.dtype.name:datatype = gdal.GDT_UInt16else:datatype = gdal.GDT_Float32# 将(通道数、高、宽)顺序调整为(高、宽、通道数)# print('shape of im data:', im_data.shape)im_bands = min(im_data.shape)im_shape = list(im_data.shape)im_shape.remove(im_bands)im_height, im_width = im_shapeband_idx = im_data.shape.index(im_bands)# 找出波段是在第几个# 创建文件driver = gdal.GetDriverByName("GTiff")dataset = driver.Create(fn_out, im_width, im_height, im_bands, datatype)# if dataset is not None:dataset.SetGeoTransform(transform) # 写入仿射变换参数dataset.SetProjection(proj) # 写入投影if im_bands == 1:# print(im_data[:, 0,:].shape)if band_idx == 0:dataset.GetRasterBand(1).WriteArray(im_data[0, :, :])elif band_idx == 1:dataset.GetRasterBand(1).WriteArray(im_data[:, 0, :])elif band_idx == 2:dataset.GetRasterBand(1).WriteArray(im_data[:, :, 0])else:for i in range(im_bands):if band_idx == 0:dataset.GetRasterBand(i + 1).WriteArray(im_data[i, :, :])elif band_idx == 1:dataset.GetRasterBand(i + 1).WriteArray(im_data[:, i, :])elif band_idx == 2:dataset.GetRasterBand(i + 1).WriteArray(im_data[:, :, i])dataset.FlushCache()del datasetdriver = None
使用案例
>>> geo.read_tif('/Users/wangfeihong/Desktop/GF2_PMS2_E102.4_N26.3_20210420_L1A0005608668-MSS2_clip.tif')
{'data': array([[[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0],...,[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0]],[[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0],...,[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0]],[[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0],...,[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0]],...,[[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0],...,[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0]],[[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0],...,[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0]],[[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0],...,[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0]]], dtype=uint16), 'transform': (102.36514511007022, 7.796940285642904e-06, 0.0, 26.32195006415771, 0.0, -7.797041881219687e-06), 'projection': 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433],AUTHORITY["EPSG","4326"]]', 'bands': 4, 'width': 11577, 'height': 6836}
python读写tif文件相关推荐
- python读写压缩文件使用gzip和bz2
python读写压缩文件使用gzip和bz2 #读取压缩文件 # gzip compression import gzip with gzip.open('somefile.gz', 'rt') as ...
- python读取csv文件的方法-python读写csv文件的方法
1.爬取豆瓣top250书籍 import requests import json import csv from bs4 import BeautifulSoup books = [] def b ...
- python处理excel教程实例-python 读写excel文件操作示例【附源码下载】
本文实例讲述了python 读写excel文件操作.分享给大家供大家参考,具体如下: 对excel文件的操作,python有第三方的工具包支持,xlutils,在这个工具包中包含了xlrd,xlwt等 ...
- csv 字符串_爬虫|python读写csv文件的方法完成生涯规划表
前面用PrettyTable制作了生涯规划表,今天突然想到其实可以用Python读写Excel文件,还可以制作Excel表格,相对而言,感觉csv的读写更简单,所以决定用csv改写生涯规划案例,以后教 ...
- Python读写docx文件(三十五)
Python读写docx文件 Python读写word文档有现成的库可以处理 pip install python-docx安装一下. https://python-docx.readthedocs. ...
- 三十一、Python读写docx文件
@Author:Runsen 文章目录 Python读写docx文件 Python读写docx文件 Python读写word文档有现成的库可以处理 pip install python-docx安装一 ...
- python读csv最快方法_使用Python读写csv文件的三种方法
Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是 ...
- python读写ini文件的库支持unicode_Python读写unicode文件的方法
本文实例讲述了Python读写unicode文件的方法.分享给大家供大家参考.具体实现方法如下: #coding=utf-8 import os import codecs def writefile ...
- python更新excel内容_[原创]使用 Python 读写 Excel 文件(一)更新
项目要求 如果说是 Office 办公软件使得 Windows 成为主流的操作系统,那么 Excel 就是使得微软硬起来的法宝! Word 和 PowerPoint 都有不相上下的对手,但 Excel ...
最新文章
- [转] 字符集、字符编码
- [转]MySQL 5.6 my.cnf配置优化
- Python(2)-- 运算符
- php theexcerpt,wordpress的excerpt()函数的用法示例
- iOS 52个技巧学习心得笔记 第一章 熟悉OC
- Aggregate 为字符串数组元素添加单引号 可用于SQL数据查询 in
- Day14 - Ruby比一比:#each #map和#collect method
- Atitit 手机号码规范 数字化管理 靓号 吉祥号码 洋马儿 规范 attilax总结
- 【Linux】自主实现my_sleep【转】
- Python【map、reduce、filter】内置函数使用说明(转载)
- Java常用框架有哪些?
- 【自监督】何凯明新作MAE略读
- 集线器、交换机和网桥三者有什么区别
- 怀旧服服务器一般什么时候维护,魔兽世界怀旧服9月16日重启维护结束时间 9.16怀旧服登录不了游戏解决方法_蚕豆网新闻...
- 40个非常有创意的网页设计作品欣赏
- php过气了吗,她怎么就过气了?
- 无线充电动牙刷PCBA单片机方案牙刷无线充底座IC芯片
- 草图变真人脸?AI:可以,多草都行
- 世界卫生组织0-10岁儿童体格心智发育评价标准(女)
- Linux自动切割及删除日志脚本