Python遙感可視化 — Basemap對遙感數據可視化

歡迎關注博主的微信公衆號:“智能遙感”。

該公衆號將爲您奉上Python地學分析、爬蟲、數據分析、Web開發、機器學習、深度學習等熱門源代碼。

本人的GitHub代碼資料主頁(持續更新中,多給Star,多Fork):

https://github.com/xbr2017

CSDN也在同步更新:

https://blog.csdn.net/XBR_2014


“小夥伴們,好久不見!本節接着上一節的內容繼續分享遙感可視化功能,主要通過對歐洲再分析資料柵格數據進行可視化。”

今天的遙感之美 — 羅平縣,中國的“黃金土地”。羅平縣隸屬於雲南省曲靖市,地處東經103°57′~104°43′、北緯24°31′~25°25′之間,除南部八大河一帶屬南亞熱帶氣候外,其餘爲高原季風氣候。每到春天來臨之時,正是油菜花綻放的最佳時期。

每年的2月中旬,衛星圖像中的黃色區域在我國南方羅平縣的山谷中蔓延,這便是那可愛的油菜花短暫的綻放。

使用中分辨率成像光譜儀(MODIS)的粗分辨率(每個像元爲250米),效果是油菜花綻放的山谷比它們周圍的森林山丘和山脊的深綠色稍微淡了些。

憑藉Landsat 8上的Operational Land Imager(OLI)更精細的分辨率(每像元爲30米),效果更加清晰。廣闊的黃色田野和牙齒形狀的喀斯特山丘的綠色之間的界限是顯而易見的。

Landsat 8於2017年2月19日獲得了上圖,通常這是油菜花處於一年中的高峯期。到了三月中旬,花朵逐漸消失,綠色重新凸起。


在上一次的Basemap可視化分享中,主要將地面站點以及空間插值後的數據進行可視化。這一節,主要對柵格數據直接可視化。在日常遙感數據可視化中,遙感柵格、在分析資料等都是常見的數據,下面以歐洲中期天氣預報中心(ECMWF)的再分析資料爲例,來實現Basemap柵格可視化功能。

ECMWF下載地址:https://apps.ecmwf.int/datasets/,關於如何運用Python對再分析資料批量下載,網上博客已有相關介紹,這個在後面數據爬蟲部分,我也會詳細介紹,就請大家耐心等待,後面還有很多幹貨!

ECMWF再分析資料包含溫、壓、溼、風、流場、數值預報產品等,一般主要看他的數值預報,如流場、溫度、氣壓場、降水等。除了這些常見氣象數據,還有云、氣溶膠、痕量氣體、輻射、地表徑流等。

代碼實現:

# _*_ coding: utf-8 _*_
__author__ = 'xbr'
__date__ = '2019/3/10 21:22'

from netCDF4 import Dataset
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import cmaps

meteo_file = r'D:\data\ECMWF.nc'
ds = Dataset(meteo_file, mode='r')

# 獲取每個變量的值
lons = ds.variables['longitude'][:]
lats = ds.variables['latitude'][:]

# surface_air_pressure
sp = ds.variables['sp'][:]
sp_units = ds.variables['sp'].units
scale_factor = ds.variables['sp'].scale_factor
add_offset = ds.variables['sp'].add_offset
sp = scale_factor * sp + add_offset
# 2 metre temperature
t2m = ds.variables['t2m'][:]
t2m_units = ds.variables['t2m'].units
scale_factor = ds.variables['t2m'].scale_factor
add_offset = ds.variables['t2m'].add_offset
t2m = scale_factor * t2m + add_offset
# Total column ozone
tco3 = ds.variables['tco3'][:]
tco3_units = ds.variables['tco3'].units
scale_factor = ds.variables['tco3'].scale_factor
add_offset = ds.variables['tco3'].add_offset
tco3 = scale_factor * tco3 + add_offset

# 經緯度平均值
lon_0 = lons.mean()
lat_0 = lats.mean()

# 畫圖大小設置
fig = plt.figure(figsize=(16, 9))
plt.rc('font', size=15, weight='bold')
ax = fig.add_subplot(111)

m = Basemap(lat_0=lat_0, lon_0=lon_0)
lon, lat = np.meshgrid(lons, lats)
xi, yi = m(lon, lat)


# 這裏數據時間是UTC 00:00,2018年1月的日平均數據,只展示1月1號的數據
sp_01 = sp[0:1, :, :]
t2m_01 = t2m[0:1, :, :]
tco3_01 = tco3[0:1, :, :]

levels = m.pcolor(xi, yi, np.squeeze(tco3_01), cmap=cmaps.GMT_panoply)

# 添加格網與繪製經緯線
m.drawparallels(np.arange(-90., 91., 20.), labels=[1, 0, 0, 0], fontsize=15)
m.drawmeridians(np.arange(-180., 181., 40.), labels=[0, 0, 0, 1], fontsize=15)

# 添加海岸線,省州邊界以及國家行政邊界
m.drawcoastlines()
m.drawstates()
m.drawcountries()

# 添加colorbar
cbar = m.colorbar(levels, location='bottom', pad="10%")
cbar.set_label(tco3_units, fontsize=15, weight='bold')

# 添加圖的標題
plt.title('Total column ozone')
plt.show()

ds.close()

結果圖:

2018年01月01日近地面大氣壓強(單位:Pa,分辨率:1°×1°)

2018年01月01日近2米處溫度(單位:K,分辨率:1°×1°)

2018年01月01日臭氧總柱狀濃度(單位:kg/m-2,分辨率:1°×1°)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章