用basemap可视化地理数据
显示地球的蓝色弹珠投影:
plt.figure(figsize=(8, 8))
m = Basemap(projection='ortho', resolution=None, lat_0=30, lon_0=100)
m.bluemarble(scale=0.5)
Basemap()中的参数:lat_0=30, lon_0=100表示以北纬30,东经100为图像的中心,这样图像就以中国为中心显示地球。
fig = plt.figure(figsize=(8, 8))
m = Basemap(projection='lcc', resolution=None,
width=8E6, height=8E6,
lat_0=30, lon_0=110,)
#projection控制投影方式,width和height以米为单位,表示图像的宽高
m.etopo(scale=0.5, alpha=0.5)
# Map (long, lat) to (x, y) for plotting
x, y = m(106.33, 29.35) #将经纬坐标转换成可以显示的坐标
plt.plot(x, y, 'ok', markersize=5)
plt.text(x, y, 'Chongqing', fontsize=12) #显示重庆的地理位置
地图投影
当使用地图时,首要任务是确定投影类型。basemap内置了数十种投影类型,每种投影类型有不同的特点。
圆柱投影
首先编写画出经纬线的函数:
from itertools import chain
def draw_map(m, scale=0.2): # m是Basemap类
# 画地貌渲染背景图
m.shadedrelief(scale=scale)
# 确定要画的经纬线
lats = m.drawparallels(np.linspace(-90, 90, 13))
lons = m.drawmeridians(np.linspace(-180, 180, 13))
# chain将两个序列链接成一个序列
lat_lines = chain(*(tup[1][0] for tup in lats.items())) # *运算符解包元组