| 
 
	积分788贡献 精华在线时间 小时注册时间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")
 
 
 | 
 |