柵格裁剪(Python)

在地理數據處理中,矢量裁剪柵格是一個非常重要的操作,它可以幫助我們提取感興趣的區域并獲得更精確的分析結果。其重要性包括:

  1. 區域限定:地球科學研究通常需要關注特定的地理區域。通過矢量裁剪柵格,我們可以將柵格數據限定在特定的研究區域內,去除不相關的數據,從而減少計算量和提高分析效率。
  2. 空間一致性:柵格數據通常具有均勻的空間分辨率,但我們可能只對特定區域感興趣。通過矢量裁剪柵格,我們可以將柵格數據限定在感興趣的區域內,確保分析結果在這個區域內具有更高的精度和一致性。
  3. 數據匹配:在地球科學研究中,我們通常需要將不同來源的數據進行比較和分析。通過矢量裁剪柵格,我們可以將不同數據源的柵格數據裁剪為相同的區域,使它們具有相同的空間范圍和分辨率,從而方便進行數據匹配和比較。
  4. 空間分析:地球科學研究中常常需要進行各種空間分析,如土地利用變化、水文模擬、地質建模等。通過矢量裁剪柵格,我們可以將柵格數據限定在特定區域內,以便更準確地進行空間分析,并獲得與實際情況更符合的結果。

簡單來說,制作數據的人要盡可能的考慮到多個用戶的需求,所以往往數據的范圍比較大,比如全國范圍、全球范圍,但是使用數據的人往往有自己聚焦的研究區,所以其 “研究區” 更明確。所以,在進行科研或者實際工作時,我們一般會裁剪出自己的目標區域數據,減少數據量,也方便分析和挖掘數據。

🌰?假設你獲取到了全中國多年的氣溫柵格數據,而你的研究區是北京市,老板讓你求北京市的平均溫度序列,后續還要用北京市的數據進行其他分析。這時候我們第一步自然是先把我們需要的數據裁剪出來,既方便處理,也方便出圖。

裁剪柵格數據一般有兩種情況:

  1. 依據范圍裁剪:有大概的范圍,比如有研究區的經緯度范圍,需要根據相應的經緯度范圍來進行裁剪
  2. 基于矢量數據裁剪:有研究區的矢量數據,那么我們可以使用矢量數據來進行裁剪

可能用到的包

import rasterio as rio
from rasterio.plot import show
from rasterio.windows import Window
from rasterio.transform import from_origin
import geopandas as gpd
from rasterio.mask import mask

讀取柵格數據并簡單可視化:

dataset = rio.open('/home/mw/input/GeoPy17233/GeoPy1/temp_grid_84/tem2015_84.tif')
show(dataset)

我們讀取的數據是整個中國范圍的,可以通過下面的代碼查看數據的范圍:

dataset.bounds
BoundingBox(left=65.45935893761649, bottom=13.120243022441713, right=137.45935893761649, top=56.01024302244171)

依據經緯度范圍裁剪

假設我們的研究區是湖南省,借助搜索引擎,發現其經緯度范圍為東經 108.786106 ~ 114.256514,北緯 24.643089 ~ 30.1287。

我們用下面的代碼對上面的數據進行裁剪并且保存:

# 定義經緯度范圍,湖南省范圍
min_lon = 108
max_lon = 115
min_lat = 24
max_lat = 31# 打開柵格數據
with rio.open('/home/mw/input/GeoPy17233/GeoPy1/temp_grid_84/tem2015_84.tif') as src:# 獲取柵格數據的元數據和變換信息profile = src.profiletransform = src.transform# 計算裁剪后的柵格數據的行列范圍col_start, row_start = ~transform * \(min_lon, max_lat)  # ~transform表示坐標轉換的操作符號col_end, row_end = ~transform * (max_lon, min_lat)# 計算裁剪后的柵格數據的寬度和高度width = int(col_end - col_start)height = int(row_end - row_start)# 創建裁剪后的柵格數據數組cropped_data = src.read(window=Window(col_start, row_start, width, height))# 更新元數據profile.update(width=width, height=height, transform=from_origin(min_lon, max_lat, profile['transform'][0], -profile['transform'][4]))# 創建新的柵格數據文件并寫入裁剪后的數據with rio.open('/home/mw/temp/tem2015_84_hunan.tif', 'w', **profile) as dst:dst.write(cropped_data)# 可視化裁剪后的數據
dataset = rio.open('/home/mw/temp/tem2015_84_hunan.tif')
show(dataset)

從上面結果可以看出我們已經成功裁剪出了我們需要范圍的數據。

# 定義經緯度范圍,湖南省范圍
min_lon = 108
max_lon = 115
min_lat = 24
max_lat = 31# 打開柵格數據
with rio.open('/home/mw/input/GeoPy17233/GeoPy1/temp_grid_84/tem2015_84.tif') as src:# 獲取柵格數據的元數據和變換信息profile = src.profiletransform = src.transform# 計算裁剪后的柵格數據的行列范圍col_start, row_start = ~transform * \(min_lon, max_lat)  # ~transform表示坐標轉換的操作符號col_end, row_end = ~transform * (max_lon, min_lat)# 計算裁剪后的柵格數據的寬度和高度width = int(col_end - col_start)height = int(row_end - row_start)# 創建裁剪后的柵格數據數組cropped_data = src.read(window=Window(col_start, row_start, width, height))# 更新元數據profile.update(width=width,height=height,transform=from_origin(min_lon,max_lat,profile['transform'][0],profile['transform'][4]))  # 提示:仔細觀察這一行~# 創建新的柵格數據文件并寫入裁剪后的數據with rio.open('/home/mw/temp/tem2015_84_hunan_wrong.tif', 'w', **profile) as dst:dst.write(cropped_data)# 可視化裁剪后的數據
dataset = rio.open('/home/mw/temp/tem2015_84_hunan_wrong.tif')
show(dataset)

用矢量數據來裁剪

下面我們再來學習如何用矢量文件來進行裁剪。

以北京市為例:

# 打開柵格數據
with rio.open('/home/mw/input/GeoPy17233/GeoPy1/temp_grid_84/tem2015_84.tif') as src:# 打開矢量文件beijing = gpd.read_file('/home/mw/input/GeoPy17233/GeoPy1/beijing.shp')# 對柵格數據進行矢量裁剪clipped_data, clipped_transform = mask(src, beijing.geometry, crop=True)# 獲取裁剪后的元數據clipped_profile = src.profileclipped_profile.update(transform=clipped_transform,width=clipped_data.shape[2],height=clipped_data.shape[1])# 創建新的柵格數據文件并寫入裁剪后的數據with rio.open('/home/mw/temp/tem2015_84_beijing.tif', 'w', **clipped_profile) as dst:dst.write(clipped_data)# 可視化結果
dataset = rio.open('/home/mw/temp/tem2015_84_beijing.tif')
show(dataset)

?可以看出我們已經成功的用北京市的矢量裁剪出了我們想要的結果。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897437.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897437.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897437.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【無人機路徑規劃】基于麻雀搜索算法(SSA)的無人機路徑規劃(Matlab)

效果一覽 代碼獲取私信博主基于麻雀搜索算法(SSA)的無人機路徑規劃(Matlab) 一、算法背景與核心思想 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一種受麻雀群體覓食行為啟發的元啟發式算法&#xff0…

MySQL數據庫安裝及基礎用法

安裝數據庫 第一步:下載并解壓mysql-8.4.3-winx64文件夾 鏈接: https://pan.baidu.com/s/1lD6XNNSMhPF29I2_HBAvXw?pwd8888 提取碼: 8888 第二步:打開文件中的my.ini文件 [mysqld]# 設置3306端口port3306# 自定義設置mysql的安裝目錄,即解…

軟件工程:軟件開發之需求分析

物有本末,事有終始。知所先后,則近道矣。對軟件開發而言,軟件需求乃重中之重。必先之事重千鈞,不可或缺如日辰。 汽車行業由于有方法論和各種標準約束,對軟件開發有嚴苛的要求。ASPICE指導如何審核軟件開發&#xff0…

正則表達式,idea,插件anyrule

????package lx;import java.util.regex.Pattern;public class lxx {public static void main(String[] args) {//正則表達式//寫一個電話號碼的正則表達式String regex "1[3-9]\\d{9}";//第一個數字是1,第二個數字是3-9,后面跟著9個數字…

RISC-V醫療芯片工程師復合型轉型的路徑與策略

從RISC-V到醫療芯片:工程師復合型轉型的路徑與策略 一、引言 1.1 研究背景 在科技快速發展的當下,芯片技術已然成為推動各行業進步的核心驅動力之一。其中,RISC-V 架構作為芯片領域的新興力量,正以其獨特的優勢迅速崛起,對整個芯片產業的格局產生著深遠影響。RISC-V 架…

【設計模式】掌握建造者模式:如何優雅地解決復雜對象創建難題?

概述 將一個復雜對象的構建與表示分離,使得同樣的構建過程可以創建不同的表示。 分離了部件的構造(由Builder來負責)和裝配(由Director負責)。 從而可以構造出復雜的對象。這個模式適用于:某個對象的構建過程復雜的情況。 由于實現了構建和裝配的解耦。…

量子計算對區塊鏈技術的影響:革新與挑戰

量子計算對區塊鏈技術的影響:革新與挑戰 大家好,我是你們的技術伙伴Echo_Wish。今天我們來探討一個頗具前沿性的話題——量子計算對區塊鏈技術的影響。量子計算作為新一代計算技術,其強大的計算能力為各個領域帶來了革新。然而,量…

【Java代碼審計 | 第八篇】文件操作漏洞成因及防范

未經許可,不得轉載。 文章目錄 文件操作漏洞文件讀取漏洞基于 InputStream 的讀取基于 FileReader 的讀取 文件下載漏洞文件刪除漏洞防范 文件操作漏洞 分為文件讀取漏洞、文件下載漏洞與文件刪除漏洞。 文件讀取漏洞 在Java中,文件讀取通常有兩種常見…

與rkipc通信

rkipc的通信方式 在ipcweb中,程序是通過/var/tmp/rkipc和rkipc進行通信,并且網絡和客戶端的函數封裝在luckfox-pico/project/app/ipcweb/ipcweb-backend/src/socket_client文件夾中, client.cpp是客戶端命令 socket.cpp是網絡命令 編寫rkip…

NLP常見任務專題介紹(2)-多項選擇任務(MultipleChoice)訓練與推理模板

一、 使用 BigBird 進行多項選擇任務訓練與推理 本示例展示如何使用 BigBirdForMultipleChoice 訓練一個多項選擇模型,適用于考試答題、閱讀理解、常識推理等任務。 1?? 任務描述 目標:給定一個問題和多個選項,模型預測正確答案。 數據格式:輸入包含 (問題, 選項1, 選項…

【論文解讀】MODEST 透明物體 單目深度估計和分割 ICRA 2025

MODEST是一種用于透明物體的單目深度估計和分割的方法,來自ICRA 2025。 它通過單張RGB圖像作為輸入,能夠同時預測透明物體的深度圖和分割掩碼。 由深度圖生成點云數據,然后采用GraspNet生成抓取位姿,開展透明物體抓取實驗。 論文…

【網絡安全工程】任務11:路由器配置與靜態路由配置

目錄 一、概念 二、路由器配置 三、配置靜態路由CSDN 原創主頁:不羈https://blog.csdn.net/2303_76492156?typeblog 一、概念 1、路由器的作用:通過路由表進行數據的轉發。 2、交換機的作用:通過學習和識別 MAC 地址,依據 M…

深入理解隱式類型轉換:從原理到應用

C?持內置類型隱式類型轉換為類類型對象,需要有相關內置類型為參數的構造函數。 構造函數前?加explicit就不再?持隱式類型轉換。 類類型的對象之間也可以隱式轉換,需要相應的構造函數?持。 內置類型隱式類型轉換為類類型對象 在 C 中,如果…

垃圾收集算法與收集器

在 JVM 中,垃圾收集(Garbage Collection, GC)算法的核心目標是自動回收無用對象的內存,同時盡量減少對應用性能的影響。以下是 JVM 中主要垃圾收集算法的原理、流程及實際應用場景的詳細介紹: 一、標記-清除算法&#…

如何為服務設置合理的線程數

1. 首先,要確定最大線程數的限制因素。通常,線程數量受限于內存、CPU和操作系統限制。比如,每個線程都需要一定的棧內存,默認情況下Java線程的棧大小是1MB(64位系統可能更大),所以如果內存不足&…

內容中臺:元數據驅動管理新范式

元數據驅動智能管理中樞 現代企業內容管理正經歷從碎片化存儲向結構化治理的范式轉變,元數據驅動機制在此過程中展現出核心樞紐價值。通過構建多維屬性標簽體系,Baklib等內容中臺解決方案實現了對文本、音視頻等數字資產的精準定義,其動態分…

在mac中設置環境變量

步驟一:打開終端 步驟二:輸入printenv,查看當前已有的環境變量; 步驟三:輸入:nano ~/.zshrc 打開環境變量編輯頁面; 步驟四:輸入新的變量:export DEEPSEEK_API_KEY&qu…

擴散模型的算法原理及其在圖像生成領域的優勢與創新

目錄 一、引言 二、擴散模型的加噪過程 (一)前向擴散過程 (二)噪聲調度策略 三、擴散模型的去噪過程 (一)反向擴散過程 (二)去噪網絡架構 四、擴散模型的訓練和推理機制 &am…

技術領域,有許多優秀的博客和網站

在技術領域,有許多優秀的博客和網站為開發者、工程師和技術愛好者提供了豐富的學習資源和行業動態。以下是一些常用的技術博客和網站,涵蓋了編程、軟件開發、數據科學、人工智能、網絡安全等多個領域: 1. 綜合技術博客 1.1 Medium 網址: ht…

mysql經典試題共34題

1、準備數據 -- drop drop table if exists dept; drop table if exists emp; drop table if exists salgrade;-- CREATE CREATE TABLE dept (deptno int NOT NULL COMMENT 部門編號,dname varchar(14) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMM…