当前位置: 首页 > news >正文

利用Shp裁剪nc数据

保证:

1、nc数据为等经纬度投影(不是等经纬度先转换为等经纬度)

2、Shp文件必须只有最外围(如果要剪裁京津冀,需要先得到该地区最外围的shp,不能包含内部的区域的shp),且shp必须为polygon,不能是polyline

剪裁法1:

import xarray as xr
import geopandas as gpd
from shapely.geometry import mapping
import rioxarray# 1. 创建插值后的 DataArray,使用纬度和经度作为坐标
da_interp = xr.DataArray(z_target_grid,dims=("lat", "lon"),coords={"lat": our_lats[:, 0], "lon": our_lons[0, :]},name="SWDOWN2"
)# 2. 设置空间维度和坐标参考系
da_interp.rio.set_spatial_dims(x_dim="lon", y_dim="lat", inplace=True)
da_interp.rio.write_crs("EPSG:4326", inplace=True)# 3. 强制 shapefile 转为 EPSG:4326
shp = gpd.read_file(r'D:\ZZZZorder_jobs\250508\AAA\shp_Nor_China\test6.shp')
shp = shp.to_crs("EPSG:4326")
clipped = da_interp.rio.clip(shp.geometry.apply(mapping), shp.crs, drop=True)

绘图看看

import matplotlib.pyplot as plt# 创建子图
fig, axs = plt.subplots(1, 2, figsize=(14, 6))# 剪裁前的数据绘图
da_interp.plot(ax=axs[0], cmap='viridis')
axs[0].set_title("Before Clipping")# 剪裁后的数据绘图
clipped.plot(ax=axs[1], cmap='viridis')
axs[1].set_title("After Clipping")plt.suptitle("Comparison of Data Before and After Clipping")
plt.tight_layout()
plt.show()

如下图:

剪裁法2

import rasterio.features
import numpy as np
import matplotlib.pyplot as plt
import geopandas as gpd
from shapely.geometry import mapping# 读取 shapefile 并确认投影
shp = gpd.read_file(r'D:\ZZZZorder_jobs\250508\AAA\shp_Nor_China\test6.shp',crs="EPSG:4326")# 构建掩膜
mask = rasterio.features.geometry_mask([mapping(geom) for geom in shp.geometry],transform=da_interp.rio.transform(),out_shape=(da_interp.sizes['lat'], da_interp.sizes['lon']),invert=True  # 保留 geometry 内的区域为 True
)# 应用掩膜
masked = da_interp.where(mask)

绘图看看:

fig, axs = plt.subplots(1, 2, figsize=(18, 6))# 原始图
da_interp.plot(ax=axs[0], cmap='viridis')
axs[0].set_title('Before Masking')# 掩膜后图
masked.plot(ax=axs[1], cmap='viridis')
axs[1].set_title('After Masking by Shape')plt.suptitle('Comparison of Data Before and After Masking', fontsize=16)
plt.tight_layout()
plt.show()

相关文章:

  • 十一、STM32入门学习之FREERTOS移植
  • 最新缺陷检测模型:EPSC-YOLO(YOLOV9改进)
  • RabbitMQ 工作模式(上)
  • LabVIEW汽车CAN总线检测系统开发
  • SpringBoot(一)--- Maven基础
  • [人月神话_6] 另外一面 | 一页流程图 | 没有银弹
  • 游戏引擎学习第292天:实现蛇
  • Java文件读写程序
  • 提示工程 - 系统提示(System Prompts)
  • 健康生活:养生实用指南
  • AM32电调学习解读六:main.c文件的函数介绍
  • 在 Vue 中插入 B 站视频
  • 关于 Web 漏洞原理与利用:1. SQL 注入(SQLi)
  • 并发编程(4)
  • Python面试总结
  • STK手动建链+matlab联调
  • 【回眸】发财日记(二)
  • 中科院:LLM工具调用框架TUMS
  • C++笔记-红黑树
  • 【图书管理系统】用户注册系统实现详解
  • 广东进入“倒水模式”,珠江防总、珠江委已启动Ⅳ级应急响应
  • 上海小学生暑(寒)托班会增设开办期数、延长办班时间吗?团市委回应
  • 法律顾问被控配合他人诈骗酒店资产一审判8年,二审辩称无罪
  • 时隔3年,持续近2小时,俄乌在土耳其谈成了什么?
  • 博物馆日|为一个展奔赴一座城!上海171家博物馆等你来
  • 马上评|重病老人取款身亡,如何避免类似悲剧?