Python 氣象數據渲染成圖片

Python 氣象數據渲染成圖片

需求

已有氣象接口,能夠請求放回氣象數據,例如降水數據。因爲氣象接口返回的是格點數據(1KM*1KM),而我請求的經緯度之間面積很大,返回的數據格點數據很大,致使直接使用前端動態渲染到地圖(leaflet)中很慢,想後端執行請求數據渲染爲圖片,地圖在請求渲染後的圖片。前端

分析

python對數據處理,圖像生成很是友好,而且能夠把格點數據(矩陣)直接渲染成圖片,而且把相關數據保存在數據庫中。渲染後的圖片直接能夠存放在網址的指定目錄下,前端就能夠直接訪問了。具體步驟以下:python

  1. 後端定時執行請求接口
  2. 把接口格點數據渲染成圖片
  3. 前端地圖(leaflet)能夠請求加載圖片

Python生成圖片

本文就重點講一下python根據氣象生成圖片,其餘2個步驟不描述了。mysql

  • 氣象數據格式(事例)sql

    {   
        "code": 200,    
        "msg": "success",   
        "rows": 4,   
        "cols": 10,   
        "values": [        
            [0, 0, 0.1, 0.5, 0.9, 0.7, 0, 0.6, 0, 1],        
            [1, 2, 3, 4, 5, 6, 0, 0, 0, 0],        
            [1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 0, 0, 0, 0],       
            [3.7, 5.7, 6.4, 5.2, 7.3, 0, 0, 0, 0, 0]    
        ]
    }
    複製代碼
  • 詳細代碼數據庫

    import matplotlib as mpl
    import matplotlib.pyplot as plt
    # 氣象數據
    datas = {
        "code": 200,
        "msg": "success",
        "rows": 4,
        "cols": 10,
        "values": [
            [0, 0, 0.1, 0.5, 0.9, 0.7, 0, 0.6, 0, 1],
            [1, 2, 3, 4, 5, 6, 0, 0, 0, 0],
            [1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 0, 0, 0, 0],
            [3.7, 5.7, 6.4, 5.2, 7.3, 0, 0, 0, 0, 0]
        ]
    }
    # 顏色
    colors = ['none', '#39AA00', '#62BAFF', '#0001FB']
    # 邊界0-1:none(沒有顏色)、1-2:'#39AA00'、2-3:'#62BAFF'、3-...:'#0001FB'
    bounds = [0, 1, 2, 3]
    #行數
    rows = datas["rows"]
    #列數
    cols = datas["cols"]
    # 格點矩陣數據
    values = datas["values"]
    
    cmap = mpl.colors.ListedColormap(colors)
    norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
    
    im = plt.imshow(values, interpolation='none', cmap=cmap, norm=norm, alpha=0.8)
    
    
    ax = plt.gca()
    # x軸方向調整:
    ax.xaxis.set_ticks_position('top')  # 將x軸的位置設置在頂部
    # ax.invert_xaxis() # x軸反向
    # y軸方向調整:
    ax.yaxis.set_ticks_position('left')  # 將y軸的位置設置在右邊
    # ax.invert_yaxis() # y軸反向
    
    plt.axis('off')  # 去掉座標軸
    
    fig = plt.gcf()
    # 設置圖片大小
    fig.set_size_inches(rows, cols)
    # dpi分辨率、transparent透明、alpha 透明度
    plt.savefig("test7.png", dpi=100, transparent=True, alpha=0.8, pad_inches=0, bbox_inches='tight')
    plt.show()
    
    複製代碼

注意點

  • Python版本爲3.7json

  • 鏈接MySQL時報錯:RuntimeError: implement_array_function method already has a docstring後端

    緣由:import pymysql 安裝的影響spa

    pip uninstall scikit-learn
    pip uninstall matplotlib
    pip uninstall pandas
    pip uninstall scipy
    pip uninstall numpy
    
    pip install numpy
    pip install scipy
    pip install pandas
    pip install matplotlib
    pip install scikit-learn
    
    Pycharm的問題!!!
    複製代碼
相關文章
相關標籤/搜索