用meteva画一定经纬度范围内的格点实况产品的图

先放meteva的官网
然后,因为meteva的格点数据是采用的xarray的dataset的数据格式,所以,这里也放一下xarray的用户文档

%matplotlib inline
%load_ext autoreload
%autoreload 2
import meteva.base as meb
import numpy as np
import matplotlib.pyplot as plt
from meteva.base.tool.plot_tools import add_china_map_2basemap
import xarray as xr
import cfgrib
#读grib2格式的文件
data = xr.open_dataset('./Z_SURF_C_BABJ_20220927132300_P_CMPA_RT_BEHK_0P01_HOR-PRE-2022092713.GRB2',engine = 'cfgrib')
#把xarray格式的文件转化为meteva中的griddata类型
grd1 =meb.xarray_to_griddata(data,lat_dim = "latitude",lon_dim = "longitude")
#选择合适的经纬度
lat = [i for i in grd1['lat'].data.tolist() if i >18 and i <21]
lon = [i for i in grd1['lon'].data.tolist() if i >108 and i <112]
#选取该经纬度范围内的数据
grd2 = grd1.loc[dict(lon = lon,lat=lat)]
#定义色标和间隔
cmap,clev = meb.def_cmap_clevs(meb.cmaps.rain_1h)
#画填色图
meb.tool.plot_tools.contourf_2d_grid(grd2,add_county_line=True,dpi = 450,show=True,cmap=cmap,clevs=clev,save_path = './图1.png') 
#画马赛克图
meb.tool.plot_tools.pcolormesh_2d_grid(grd2,add_county_line=True,dpi = 450,show=True,cmap=cmap,clevs=clev,save_path = './图2.png')

最后得到的图

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要获取一定经纬度范围内所有像素的属性,您需要使用Cesium的ImageryLayer类和WebMapTileServiceImageryProvider类。以下是一个示例代码,可以加载WMTS层并获取给定范围内的像素属性: ```javascript // 创建Cesium Viewer对象 var viewer = new Cesium.Viewer('cesiumContainer'); // 定义WMTS层的URL和ID var wmtsUrl = 'http://your_wmts_service_url'; var wmtsLayer = 'your_wmts_layer_id'; // 创建WMTS层 var wmtsImageryProvider = new Cesium.WebMapTileServiceImageryProvider({ url: wmtsUrl, layer: wmtsLayer, tileMatrixSetID: 'GoogleMapsCompatible', format: 'image/png', maximumLevel: 18, credit: 'Map Data © OpenStreetMap contributors' }); // 添加WMTS层到Viewer对象中 viewer.imageryLayers.addImageryProvider(wmtsImageryProvider); // 定义经纬度范围 var west = Cesium.Math.toRadians(90.0); var south = Cesium.Math.toRadians(20.0); var east = Cesium.Math.toRadians(120.0); var north = Cesium.Math.toRadians(40.0); // 获取经纬度范围内的所有像素属性 var rect = new Cesium.Rectangle(west, south, east, north); var pixelData = viewer.canvas.getContext('2d').getImageData(0, 0, viewer.canvas.width, viewer.canvas.height); var attributes = []; for (var y = 0; y < pixelData.height; y++) { for (var x = 0; x < pixelData.width; x++) { var lonlat = viewer.scene.camera.pickEllipsoid(new Cesium.Cartesian2(x, y), viewer.scene.globe.ellipsoid); if (lonlat && Cesium.Rectangle.contains(rect, lonlat)) { var index = (y * pixelData.width + x) * 4; var r = pixelData.data[index]; var g = pixelData.data[index + 1]; var b = pixelData.data[index + 2]; var a = pixelData.data[index + 3]; attributes.push({ lon: lonlat.longitude, lat: lonlat.latitude, r: r, g: g, b: b, a: a }); } } } console.log(attributes); ``` 这段代码首先创建了一个Viewer对象,然后定义了WMTS层的URL和ID,并使用WebMapTileServiceImageryProvider类创建了WMTS层。接着,定义了经纬度范围,并使用Canvas的getImageData方法获取所有像素的rgba值,然后遍历每个像素,使用Camera的pickEllipsoid方法获得像素所在的经纬度位置,判断这个位置是否在给定的经纬度范围内,如果是,则将像素的属性添加到attributes数组中。最后,将attributes数组打印到控制台中。 请注意,此方法只适用于小范围的像素属性获取,如果需要获取大范围内的像素属性,可能需要采用其他方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值