|
9 S+ H+ C: I6 T7 t3 D
作者:潮汐 8 ]. C7 `% c& L# H$ u# I9 o
来源:Python 技术 7 H1 J1 Q# z! X. {5 {, b3 I7 k# T
今天咱们讲解一个画地图神器-BaseMap,看看这个神器讲给我们带来怎样的使用体验。 $ e- k5 ~. K9 y8 i/ |7 e
BaseMap 简介
. g. [. q7 q) z g+ q" R 在之前的文章中,我们有讲解过关于画图神器-Matplotlib 的文章,其实 Basemap 工具包就是 Matplotlib 包的子包,一个用于在 Python 绘制 2D 数据至地图的库,它提供了将坐标转化为 25 种不同地图投影的功能,然后调用 Matplotlib 扩展包绘制轮廓、图像和坐标点等。
3 Y [. V) ~# G5 G1 u! t 该扩展包提供了海岸线、河流、政治边界数据集以及绘制方法。其中 GEOS 库在内部用于将海岸线和边界特征剪切到所需的地图投影区域。下面给出官网的翻译示例,源地址: & z, p+ i( \4 s8 R0 X
https://matplotlib.org/basemap/users/geography.html
" V0 W2 w) \/ N2 ^ Basemap 包括 GSSH(现在是GSHHG)海岸线数据集以及 GMT 格式的河流、州和国家边界的数据集。这些数据集可以用来以不同的分辨率绘制海岸线、河流和政治边界地图。相关方法如下: drawcoastlines(): 绘制海岸线。fillcontinents(): 通过填充海岸线多边形为地图着色。drawcountries(): 绘制国家边界。drawstates(): 在北美绘制状态边界。drawrivers(): 绘制河流。( x& \5 X) l( c/ X0 Q) u. t* s) Y
此外,可以将图像用作地图背景,而不是绘制海岸线和政治边界。Basemap提供了以下几个选项: drawlsmask(): 绘制高分辨率的海陆图像,指定陆地和海洋的颜色,数据源于 GSHHS 海岸线。bluemarble(): 绘制 NASA 蓝色大理石图像作为地图背景。shadedrelief(): 绘制阴影浮雕图像作为地图背景。etopo(): 绘制一张 etopo 浮雕图像作为地图背景。warpimage(): 使用 abitrary 图像作为地图背景,必须是全球的,从国际日东线向东和南极以北覆盖世界。+ ?% N+ X8 z& k
Basemap 安装7 l1 i2 U# H6 F& b- _! n! _5 p
Basemap 安装我们从非官网网站下载下面两个扩展包,安装包名称中的 cp37 表示 Python3.7 版本,这个根据 Python 版本安装对应的包即可,Windows下 64 位环境加 amd64,你需要找到适合自己环境的文件。 $ m% ]5 w1 h* I0 F5 k \/ O
basemap-1.2.2-cp37-cp37m-win_amd64.whl pyproj-3.0.1-cp37-cp37m-win_amd64.whl 4 h# n' Q, M: @+ m+ E4 j M1 A+ @
下载地址为:
, q+ U' D/ V' s- R9 x0 w( D https://www.lfd.uci.edu/~gohlke/pythonlibs/ / g0 y" j: I( w! t O. q
下载图片如下: " `8 V: ^% A3 q' F5 J1 T' K
, ]* F$ R5 I5 y; x
% T% L0 P$ w* L6 [1 R% j3 u 下载好后将下载的whl文件放入Python安装的 Script 文件夹下,如下图所示:
/ h2 y' v' D% V 2 R7 T W& F9 ^. b1 ~9 v7 O; B
安装语句如下: pip install basemap-1.2.2-cp37-cp37m-win_amd64.whl
7 I7 r( _9 H/ |1 i# [ 如下图即为安装成功。 9 _0 z; b9 `. l3 q3 `: X" ~0 H" _7 Y
# H9 R# ?* W6 i
Basemap实例
1 L/ x# @5 g( I0 x+ [ 绘制海岸线、填充海洋和陆地区域from mpl_toolkits.basemap import Basemap* C# c. o) T4 n7 z- Y3 L
import matplotlib.pyplot as plt$ U& \* K# V9 `6 [: ^. ^6 p
! G: k3 O3 T/ d4 j! l" U7 A0 `
# 设置basemap-Lambert Conformal / Z. g [( \) E$ u
m = Basemap(width=12000000,height=9000000,projection=lcc,
- A& U: `( W2 ?2 A: m. V resolution=c,lat_1=45.,lat_2=55,lat_0=50,lon_0=-107.)1 s: W5 I) D3 g9 y7 }2 h- z
# 绘制海岸线
7 |0 O, |% H% Z' r3 ~! j( S: L& B2 s' N8 {: } w8 j: |7 N; k
m.drawcoastlines()
9 j2 C4 }& ~: Y r# c, a& @$ H4 F4 l! S$ E# i% ^; u
# 在地图周围绘制边界并填充背景aqua(这个背景最终成为海洋的颜色)
$ ^3 J; B. \- k9 D6 ~, R- ?4 i$ @ # 将大洲绘制在最上面* ^* w8 ]: q6 n! ^$ M
m.drawmapboundary(fill_color=aqua)
; ]8 Y8 w# o w ?: w
/ N$ b% P! n/ x' ]4 D+ D8 D # 填充大陆coral颜色,并设置湖泊颜色为 aqua0 u `0 w0 P0 W" [# L; e
m.fillcontinents(color=coral,lake_color=aqua)
8 }! T. Q$ n; n \4 [ plt.show(): h; `7 q4 B& f, y& W2 h! i+ k& j0 [
# U6 }8 }% g7 {1 l; [# i
运行结果如下图: ! ]2 w$ ~8 \6 O
& ]$ n% h/ T- \9 h' t
总结
( V# O, C S6 S 今天的文章就到这里啦,有机会大家可以一起一探此款神器的神秘。
, P; ~, x4 }8 q& t3 [- `% f
, F" y: _# u/ ]0 j: K, K: ?/ s& ~( o7 K- e; H2 K# w
; M9 P/ E: }' \: ~1 S
. N5 s) V2 S C) |0 z. ` |