前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 绘制山体阴影+雷达图

Python 绘制山体阴影+雷达图

作者头像
用户11172986
发布2024-06-20 18:08:03
730
发布2024-06-20 18:08:03
举报
文章被收录于专栏:气python风雨气python风雨

前言

本文旨在利用Python编程语言,将山体阴影与雷达速度产品相结合,以探索其可视化效果 环境:python 3.9

导入库

代码语言:javascript
复制
代码语言:javascript
复制
import netCDF4 as nc
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from matplotlib.colors import LightSource
import cmaps
from cnmaps import get_adm_maps, draw_map
from cartopy.mpl.gridliner import LATITUDE_FORMATTER, LONGITUDE_FORMATTER
import cinrad
from cinrad.io import CinradReader, StandardData
代码语言:javascript
复制

数据处理

代码语言:javascript
复制
代码语言:javascript
复制
def load_dem_data(file_path):
    """加载地形高程数据"""
    ds = nc.Dataset(file_path)
    _lon = ds.variables['LON'][:]
    _lat = ds.variables['LAT'][:]
    _dem = ds.variables['elevation'][:]
    return _lon, _lat, _dem

def process_dem_data(_lon, _lat, _dem, lon_range, lat_range):
    """处理地形高程数据"""
    lon = _lon[lon_range[0]:lon_range[1]]
    lat = _lat[lat_range[0]:lat_range[1]]
    dem = _dem[lat_range[0]:lat_range[1], lon_range[0]:lon_range[1]]
    return lon, lat, dem
代码语言:javascript
复制

In [3]:

代码语言:javascript
复制
代码语言:javascript
复制
file_path = '/home/mw/input/china_dem3276/cldasgrid_dem.nc'
f = CinradReader("/home/mw/input/data5692/Z_RADR_I_Z9250_20200612054800_O_DOR_SA_CAP.bin")
V = f.get_data(5, 230, 'VEL')

lon, lat, dem = load_dem_data(file_path)
lon_range = (4500 ,5500)
lat_range = (1500, 2100)
lon, lat, dem = process_dem_data(lon, lat, dem, lon_range, lat_range)
代码语言:javascript
复制

绘图一:不加阴影

代码语言:javascript
复制
代码语言:javascript
复制
plt.figure(figsize=(10, 10))
ax = plt.subplot(111, projection=ccrs.PlateCarree())
plt.imshow(dem,extent=(lon.min(), lon.max(), lat.min(), lat.max()), transform=ccrs.PlateCarree(),
           cmap=cmaps.MPL_terrain, origin='lower')
plt.contourf(V.longitude, V.latitude,V.VEL , levels=np.arange(0, 50, 5), cmap=cmaps.radar,
                 transform=ccrs.PlateCarree())  
draw_map(get_adm_maps(province='江苏省', only_polygon=True, record='first'), color='w', linewidth=2)
plt.show()
代码语言:javascript
复制

绘图二:加阴影

代码语言:javascript
复制
代码语言:javascript
复制
plt.figure(figsize=(10, 10))
ax = plt.subplot(111, projection=ccrs.PlateCarree())
x, y = np.gradient(dem)

slope = np.pi/2. - np.arctan(np.sqrt(x*x + y*y))

# -x here because of pixel orders in the SRTM tile
aspect = np.arctan2(-x, y)

altitude = np.pi / 4.
azimuth = np.pi / 2.

shaded = np.sin(altitude) * np.sin(slope)\
    + np.cos(altitude) * np.cos(slope)\
    * np.cos((azimuth - np.pi/2.) - aspect)


plt.imshow(shaded,extent=(lon.min(), lon.max(), lat.min(), lat.max()), transform=ccrs.PlateCarree(),
           cmap='Greys', origin='lower')
plt.contourf(V.longitude, V.latitude,V.VEL , levels=np.arange(0, 50, 5), cmap=cmaps.radar,
                 transform=ccrs.PlateCarree())  
draw_map(get_adm_maps(province='江苏省', only_polygon=True, record='first'), color='w', linewidth=2)
plt.show()
代码语言:javascript
复制

完整代码与文件在这里

*封面图由ai生成

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-02-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气python风雨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 导入库
  • 数据处理
  • 绘图一:不加阴影
  • 绘图二:加阴影
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档