已有氣象接口,能夠請求放回氣象數據,例如降水數據。因爲氣象接口返回的是格點數據(1KM*1KM),而我請求的經緯度之間面積很大,返回的數據格點數據很大,致使直接使用前端動態渲染到地圖(leaflet)中很慢,想後端執行請求數據渲染爲圖片,地圖在請求渲染後的圖片。前端
python對數據處理,圖像生成很是友好,而且能夠把格點數據(矩陣)直接渲染成圖片,而且把相關數據保存在數據庫中。渲染後的圖片直接能夠存放在網址的指定目錄下,前端就能夠直接訪問了。具體步驟以下: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的問題!!!
複製代碼