个人整理的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文件相关推荐

  1. python读写压缩文件使用gzip和bz2

    python读写压缩文件使用gzip和bz2 #读取压缩文件 # gzip compression import gzip with gzip.open('somefile.gz', 'rt') as ...

  2. python读取csv文件的方法-python读写csv文件的方法

    1.爬取豆瓣top250书籍 import requests import json import csv from bs4 import BeautifulSoup books = [] def b ...

  3. python处理excel教程实例-python 读写excel文件操作示例【附源码下载】

    本文实例讲述了python 读写excel文件操作.分享给大家供大家参考,具体如下: 对excel文件的操作,python有第三方的工具包支持,xlutils,在这个工具包中包含了xlrd,xlwt等 ...

  4. csv 字符串_爬虫|python读写csv文件的方法完成生涯规划表

    前面用PrettyTable制作了生涯规划表,今天突然想到其实可以用Python读写Excel文件,还可以制作Excel表格,相对而言,感觉csv的读写更简单,所以决定用csv改写生涯规划案例,以后教 ...

  5. Python读写docx文件(三十五)

    Python读写docx文件 Python读写word文档有现成的库可以处理 pip install python-docx安装一下. https://python-docx.readthedocs. ...

  6. 三十一、Python读写docx文件

    @Author:Runsen 文章目录 Python读写docx文件 Python读写docx文件 Python读写word文档有现成的库可以处理 pip install python-docx安装一 ...

  7. python读csv最快方法_使用Python读写csv文件的三种方法

    Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是 ...

  8. python读写ini文件的库支持unicode_Python读写unicode文件的方法

    本文实例讲述了Python读写unicode文件的方法.分享给大家供大家参考.具体实现方法如下: #coding=utf-8 import os import codecs def writefile ...

  9. python更新excel内容_[原创]使用 Python 读写 Excel 文件(一)更新

    项目要求 如果说是 Office 办公软件使得 Windows 成为主流的操作系统,那么 Excel 就是使得微软硬起来的法宝! Word 和 PowerPoint 都有不相上下的对手,但 Excel ...

最新文章

  1. [转] 字符集、字符编码
  2. [转]MySQL 5.6 my.cnf配置优化
  3. Python(2)-- 运算符
  4. php theexcerpt,wordpress的excerpt()函数的用法示例
  5. iOS 52个技巧学习心得笔记 第一章 熟悉OC
  6. Aggregate 为字符串数组元素添加单引号 可用于SQL数据查询 in
  7. Day14 - Ruby比一比:#each #map和#collect method
  8. Atitit 手机号码规范 数字化管理 靓号 吉祥号码 洋马儿 规范 attilax总结
  9. 【Linux】自主实现my_sleep【转】
  10. Python【map、reduce、filter】内置函数使用说明(转载)
  11. Java常用框架有哪些?
  12. 【自监督】何凯明新作MAE略读
  13. 集线器、交换机和网桥三者有什么区别
  14. 怀旧服服务器一般什么时候维护,魔兽世界怀旧服9月16日重启维护结束时间 9.16怀旧服登录不了游戏解决方法_蚕豆网新闻...
  15. 40个非常有创意的网页设计作品欣赏
  16. php过气了吗,她怎么就过气了?
  17. 无线充电动牙刷PCBA单片机方案牙刷无线充底座IC芯片
  18. 草图变真人脸?AI:可以,多草都行
  19. 世界卫生组织0-10岁儿童体格心智发育评价标准(女)
  20. Linux自动切割及删除日志脚本

热门文章

  1. C#Winform中窗体的美化
  2. 大数据总结【第四章:Hbase】
  3. 如何安装pypi下载的包
  4. 小晴天老师系列——竖式乘法(暴力)
  5. 一个离开大厂的产品经理,和她为数百万小微企业创造的“神器”
  6. java常用设计模式应用案例
  7. 提交 Merge Request 申请进行code review
  8. DRC(Data Replicate Center)
  9. 中文颜色名称与RGB颜色对照表
  10. 【英语】--动起来的英语进度