亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python中rasterio庫的實現(xiàn)

 更新時間:2025年04月10日 11:06:21   作者:Python與遙感  
Rasterio是一個用于讀寫光柵數(shù)據(jù)的Python庫,它專注于快速和可靠地處理大規(guī)模地理空間柵格數(shù)據(jù),本文主要介紹了Python中rasterio庫的實現(xiàn),感興趣的可以了解一下

前言

遙感數(shù)據(jù)是通過衛(wèi)星、無人機等設(shè)備獲取的地球表面信息,廣泛應(yīng)用于農(nóng)業(yè)、環(huán)境監(jiān)測、城市規(guī)劃等領(lǐng)域。處理這些數(shù)據(jù)常常需要對柵格圖像進行分析,而Python的rasterio庫正是解決這一需求的利器。本篇文章將帶你深入了解rasterio庫,幫助你掌握遙感數(shù)據(jù)處理的技巧與最佳實踐。

rasterio官方文檔:https://rasterio.readthedocs.io/en/latest/index.html

一、rasterio庫簡介

rasterio是基于GDAL的Python接口封裝,相比直接使用GDAL,rasterio具有以下優(yōu)勢:

? 更簡潔的API設(shè)計
? 原生支持NumPy數(shù)組操作
? 完美集成Python科學計算生態(tài)
? 支持多線程讀寫加速

典型應(yīng)用場景

  • 衛(wèi)星影像讀寫與格式轉(zhuǎn)換
  • 遙感指數(shù)計算(如NDVI等)
  • 影像裁剪與鑲嵌
  • 地理坐標系統(tǒng)轉(zhuǎn)換

二、環(huán)境安裝

你可以通過以下命令安裝rasterio庫:

pip install rasterio

對于地理空間數(shù)據(jù)處理,推薦使用conda環(huán)境來管理依賴包:

conda install -c conda-forge rasterio

注意事項

  • Windows用戶:建議先安裝預(yù)編譯的GDAL庫,避免出現(xiàn)安裝錯誤??梢詮膆ttps://www.lfd.uci.edu/~gohlke/pythonlibs/下載對應(yīng)版本的whl文件。
  • Linux/MacOS用戶:通常直接通過pipconda安裝即可,但請確保GDAL等依賴項已正確配置。

安裝可參考:http://chabaoo.cn/python/3393730z5.htm

三、核心功能詳解

1. 數(shù)據(jù)讀取與元數(shù)據(jù)解析

import rasterio

with rasterio.open('sentinel2.tif') as src:
    # 獲取數(shù)據(jù)矩陣(NumPy數(shù)組)
    data = src.read()
    
    # 查看元數(shù)據(jù)
    print(f"數(shù)據(jù)集信息:\n{src.meta}")
    print(f"坐標系:{src.crs}")
    print(f"影像尺寸:{src.width}x{src.height}")
    print(f"空間分辨率:{src.res}")
    print(f"地理范圍:{src.bounds}")

2. 數(shù)據(jù)寫入與格式轉(zhuǎn)換

# 創(chuàng)建新柵格文件
profile = src.profile
profile.update(
    dtype=rasterio.float32,
    count=3,
    compress='lzw'
)

with rasterio.open('output.tif', 'w', **profile) as dst:
    dst.write(data.astype(rasterio.float32))

支持格式:GeoTIFF、JPEG2000、ENVI、HDF等30+種格式

3. 數(shù)據(jù)操作技巧

? 影像裁剪

from rasterio.mask import mask
import geojson

# 按像素范圍裁剪
window = Window(100, 200, 800, 600)
clip_data = src.read(window=window)

# 按地理范圍裁剪,GeoJSON格式
geometry = {
    "type": "Polygon",
    "coordinates": [
        [
            [116.0, 39.5],
            [116.5, 39.5],
            [116.5, 40.0],
            [116.0, 40.0],
            [116.0, 39.5]
        ]
    ]
}

clip_data, clip_transform = rasterio.mask.mask(src, [geometry], crop=True)

? 重采樣

from rasterio.enums import Resampling

# 選擇重采樣方法:最近鄰、雙線性、立方卷積等
resampled_data = src.read(
    out_shape=(src.height//2, src.width//2),
    resampling=Resampling.bilinear  # 雙線性插值法
)

4. 坐標轉(zhuǎn)換

# 地理坐標 ? 像素坐標
row, col = src.index(116.3974, 39.9093)  # 天安門坐標轉(zhuǎn)像素位置
lon, lat = src.xy(500, 500)  # 中心點坐標

# 坐標系統(tǒng)轉(zhuǎn)換
from rasterio.warp import transform
dst_crs = 'EPSG:3857'  # Web墨卡托
transformed = transform(src.crs, dst_crs, [lon], [lat])

5. 多波段處理

# 波段合并
with rasterio.open('RGB.tif', 'w', **profile) as dst:
    for i in range(3):
        dst.write(data[i], i+1)

# 計算NDVI
red = src.read(3).astype(float)
nir = src.read(4).astype(float)
ndvi = (nir - red) / (nir + red + 1e-8)

四、可視化實踐

# 可視化NDVI
import matplotlib.pyplot as plt

plt.figure(figsize=(12, 8))
plt.imshow(ndvi, cmap='RdYlGn', vmin=-1, vmax=1)
plt.colorbar(label='NDVI')
plt.title('植被指數(shù)分布', fontsize=16)
plt.axis('off')
plt.savefig('ndvi_map.png', dpi=300, bbox_inches='tight')

五、實際應(yīng)用案例

任務(wù):批量處理Landsat8數(shù)據(jù)提取水體信息

# 示例:批量處理Landsat8數(shù)據(jù)提取水體信息

# 1. 讀取熱紅外波段
with rasterio.open('landsat8_b10.tif') as src:
    thermal_band = src.read(1)

# 2. 計算地表溫度(簡單的示例,實際需要進行輻射校正)
temperature = (thermal_band - 273.15)  # 假設(shè)熱紅外波段已經(jīng)是開爾文溫度

# 3. 應(yīng)用閾值分割提取水體(基于溫度或植被指數(shù))
water_mask = temperature < 20  # 假設(shè)溫度低于20°C為水體

# 4. 輸出二值化結(jié)果
with rasterio.open('water_mask.tif', 'w', **src.profile) as dst:
    dst.write(water_mask.astype(rasterio.uint8), 1)

# 5. 生成統(tǒng)計報告
import numpy as np
water_area = np.sum(water_mask) * src.res[0] * src.res[1]  # 計算水體面積
print(f'水體面積: {water_area} 平方米')

六、高級功能

  • 多線程處理:通過rasterio.Env()配置GDAL線程數(shù)
from rasterio import Env

with Env(GDAL_NUM_THREADS=4):
    with rasterio.open('large_image.tif') as src:
        data = src.read()
  • 內(nèi)存文件操作:使用MemoryFile處理臨時數(shù)據(jù)
  • 數(shù)據(jù)集拼接:利用rasterio.merge.merge()實現(xiàn)影像鑲嵌
  • 分塊處理:支持大數(shù)據(jù)分塊讀?。╟hunked reading)

結(jié)語

rasterio憑借其簡潔的API和強大的功能,已成為遙感數(shù)據(jù)處理的必備工具。

到此這篇關(guān)于Python中rasterio庫的實現(xiàn)的文章就介紹到這了,更多相關(guān)Python rasterio庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python向excel中寫入數(shù)據(jù)的方法

    Python向excel中寫入數(shù)據(jù)的方法

    這篇文章主要介紹了Python向excel中寫入數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • Python利用代理ip實現(xiàn)自動化爬蟲任務(wù)管理

    Python利用代理ip實現(xiàn)自動化爬蟲任務(wù)管理

    本文主要介紹了Python利用代理ip實現(xiàn)自動化爬蟲任務(wù)管理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • 關(guān)于TensorFlow新舊版本函數(shù)接口變化詳解

    關(guān)于TensorFlow新舊版本函數(shù)接口變化詳解

    今天小編就為大家分享一篇關(guān)于TensorFlow新舊版本函數(shù)接口變化詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Pandas技巧分享之讀取多個文件

    Pandas技巧分享之讀取多個文件

    日常分析數(shù)據(jù)時,只有單一數(shù)據(jù)文件的情況其實很少見,更多的情況是,從同一個數(shù)據(jù)來源定期或不定期的采集了很多數(shù)據(jù)文件,那么如何讀取多個文件呢,下面就和大家簡單講講
    2023-07-07
  • Python 尋找局部最高點的實現(xiàn)

    Python 尋找局部最高點的實現(xiàn)

    今天小編就為大家分享一篇Python 尋找局部最高點的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python2和Python3中print的用法示例總結(jié)

    Python2和Python3中print的用法示例總結(jié)

    在Python 3中接觸的第一個很大的差異就是縮進是作為語法的一部分,這和C++等其他語言確實很不一樣,所以要小心,其中python3和python2中print的用法有很多不同,這篇文章主要給大家介紹了關(guān)于Python2和Python3中print用法的相關(guān)資料,需要的朋友可以參考下。
    2017-10-10
  • python實現(xiàn)簡單銀行管理系統(tǒng)

    python實現(xiàn)簡單銀行管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)簡單銀行管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • python中turtle庫的簡單使用教程

    python中turtle庫的簡單使用教程

    這篇文章主要給大家介紹了關(guān)于python中turtle庫的簡單使用教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Python使用read_csv讀數(shù)據(jù)遇到分隔符問題的2種解決方式

    Python使用read_csv讀數(shù)據(jù)遇到分隔符問題的2種解決方式

    read.csv()可以從帶分隔符的文本文件中導(dǎo)入數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Python使用read_csv讀數(shù)據(jù)遇到分隔符問題的2種解決方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • python pygame實現(xiàn)滾動橫版射擊游戲城市之戰(zhàn)

    python pygame實現(xiàn)滾動橫版射擊游戲城市之戰(zhàn)

    這篇文章主要為大家詳細介紹了python pygame實現(xiàn)滾動橫版射擊游戲城市之戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11

最新評論