- 积分
- 784
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2017-5-18
- 最后登录
- 1970-1-1
|
30金钱
本帖最后由 mrsoberli 于 2021-12-2 10:46 编辑
# 脚本功能:读取标准格式雷达基数据,生成透明png图片,并获取png图片的四个角的经纬度位置
# 可供WEBGIS调用显示,例如leaflet、高德地图等;
# 要求:透明图没有任何边框,确保经纬度位置完成正确。
自己乱写了个,但不知道经纬度位置到底正确不?图片有没有空白边框?请教大佬们帮忙看看。
- # -*- encoding: utf8 -*-
- # 脚本功能:读取标准格式雷达基数据,生成透明png图片,并获取png图片的四个角的经纬度位置
- # 可供WEBGIS调用显示,例如leaflet、高德地图等;
- # 要求:透明图没有任何边框,确保经纬度位置完成正确。
- import os
- import datetime
- import sys
- import time
- import cinrad
- import cartopy.crs as ccrs
- import matplotlib.pyplot as plt
- from cartopy.mpl.geoaxes import GeoAxes
- from cinrad.visualize.utils import *
- from cinrad.common import get_dtype, is_radial
- def plotTransparent(data,savePngFile,**kwargs):
- fig = plt.figure(figsize=(10,10),dpi=160)
- plt.axis("off")
- plt.gca().xaxis.set_major_locator(plt.NullLocator())
- plt.gca().yaxis.set_major_locator(plt.NullLocator())
- plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0)
- plt.margins(0,0)
- proj = ccrs.AzimuthalEquidistant(
- central_longitude=data.site_longitude,
- central_latitude=data.site_latitude,
- )
- ax = fig.add_axes([0,0,1,1], projection=proj)
- # ax.background_patch.set_visible(False)
- # ax.outline_patch.set_visible(False)
- ax.set_aspect("equal")
- lon = data["longitude"].values
- lat = data["latitude"].values
- extent= [lon.min(), lon.max(), lat.min(), lat.max()]
- ax.set_extent(extent, crs=ccrs.PlateCarree())
- geoax: GeoAxes = ax
- dtype = get_dtype(data)
- pnorm = norm_plot[dtype]
- pcmap = cmap_plot[dtype]
- var = data[dtype].values
- data_crs = ccrs.PlateCarree()
- geoax.pcolormesh(lon, lat, var, norm=pnorm, cmap=pcmap, transform=data_crs, **kwargs)
- autoscale(geoax)
- plt.savefig(savePngFile,transparent=True, pad_inches=0)
-
- def autoscale(geoax):
- llon, ulon, llat, ulat =geoax.get_extent()
- lon_delta = ulon - llon
- lat_delta = ulat - llat
- if lon_delta == lat_delta:
- return
- if lon_delta > lat_delta:
- # The long axis is x-axis
- lat_center = (ulat + llat) / 2
- lat_extend = lon_delta / 2
- llat = lat_center - lat_extend
- ulat = lat_center + lat_extend
- elif lon_delta < lat_delta:
- # The long axis is y-axis
- lon_center = (ulon + llon) / 2
- lon_extend = lat_delta / 2
- llon = lon_center - lon_extend
- ulon = lon_center + lon_extend
- # print([llon, ulon, llat, ulat])
- geoax.set_extent([llon, ulon, llat, ulat], geoax.projection)
- bz2file="Z_RADR_I_Z9999_20210911190300_O_DOR_CAD_CAP_FMT.bin.bz2"
- savePngFile="Z_RADR_I_Z9999_20210911190300_O_DOR_CAD_CAP_FMT.png"
- f = cinrad.io.StandardData(bz2file)
- rl = list(f.iter_tilt(230,'REF'))
- cr = cinrad.calc.quick_cr(rl)
- #获取png图片四个角的经纬度---start
- lon = cr["longitude"].values
- lat = cr["latitude"].values
- extent= [lon.min(), lon.max(), lat.min(), lat.max()]
- ex= [ str(x) for x in extent ]
- #获取png图片四个角的经纬度---end
- plotTransparent(cr,savePngFile)
- plt.close("all")
复制代码
|
|