[Python] Basemap入坑手册

Basemap入坑手册

文章目录

  • Basemap入坑手册
    • 0. 介绍
    • 1. 安装
    • 2. 画第一张图
    • 3. 地图投影专题
      • 3.1 地图投影基础
        • 3.1.1 用EPSG进行设置
      • 3.2 地图投影拓展
  • 4. 基本功能
    • 4.1 在图上画点

前面的废话

本来只是想画个热点图,然后一路 百度地图API —> folium —> Basemap,因为前两个要html的知识,而我并没有,所以最后入坑了Basemap。

然而网上的资源虽然很多,但是比较零散,不过找到英文版的tutorial,全英文的怕自己读不下去,决定边学边记笔记,以及有好用的教程和资源也在这里马克一下。


0. 介绍

Python里画地图的。


1. 安装

每逢非pip可以安装的包就有点头大

安装部分官方也有指南,大概的意思就是先装python (废话)、matplotlib、numpy、PROJ4、GEOS、Pillow(可选)再安装Basemap。
我是Mac的Anaconda,所以直接在下载了Source Code (tar.gz),解压后在终端安装。
具体过程:

  1. 解压后文件夹里会有setup.py的文件;

  2. 打开终端,输入cd ./desktop/..(Change Directory到setup.py的位置);

  3. 输入python setup.py install

  4. 在python里输入 from mpl_toolkits.basemap import Basemap,如果没有报错说明安装成功。

更详细的教程可以参考:

Mac:Mac Python+basemap安装
Linux:python番外(2)——Basemap安装
Windows:window下安装basemap


2. 画第一张图

最基础的图代码如下:

# 导入包
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt

# 新建地图
map = Basemap() #Basemap类有很多属性,这里全都使用默认参数

# 画图
map.drawcoastlines()

# 显示结果
plt.show()

# 存储结果
plt.savefig('test.png')

得到这样的图 ↓ \downarrow
[Python] Basemap入坑手册_第1张图片
一丢丢进阶的图代码如下:

# 导入包
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt

# 更改投影方式
map = Basemap(projection = 'ortho', lat_0 = 0, lon_0 = 0) #’ortho’指正射投影,具体参数后面再讨论;后面两个参数是设置中心点

# 给整个地图上蓝色
map.drawmapboundary(fill_color = 'aqua')

# 给陆地涂上珊瑚色,湖泊涂上蓝色
map.fillcontinents(color = 'coral', lake_color = 'aqua')

# 画图
map.drawcoastlines()

# 显示结果
plt.show()

得到这样的图 ↓ \downarrow
[Python] Basemap入坑手册_第2张图片
如果遇到error请点这里看看。

3. 地图投影专题

地图投影是利用一定数学法则把地球表面的经、纬线转换到平面上的理论和方法。——百度百科

tutorial指出Basemap里的投影方式跟其他库不太一样(如GDAL),所以要好好学一学。

3.1 地图投影基础

Basemap的投影方式是由Basemap类中projection这一属性控制的,默认为cyl,可选项如下,对应的具体效果见地图投影示例。:

选项 描述 解释
cyl Cylindrical Equidistant 默认,圆柱投影
merc Mercator 墨卡托投影,是正轴等角圆柱投影
tmerc Transverse Mercator 横轴墨卡托投影
omerc Oblique Mercator 斜轴墨卡托投影
mill Miller Cylindrical 米勒圆柱投影
gall Gall Stereographic 高尔立体投影
cea Cylindrical Equal-Area 圆柱等面积投影
lcc Lambert Conformal 兰勃特等角投影
laea Lambert Azimuthal Equal Area 兰勃特等积投影
nplaea North-Polar Lambert 北极兰勃特投影?
splaea South-Polar Lambert 南极兰勃特投影?
eqdc Equidistant Conic 等距圆锥投影
aeqd Azimuthal Equidistant 等距方位投影
npaeqd North-Polar Azimuthal 北极方位投影
spaeqd South-Polar Azimuthal 南极方位投影
aea Albers Equal 阿尔伯斯等积投影
stere Stereographic 立体投影
npstere North-Polar Stereographic 北极立体投影
spstere South-Polar Stereographic 南极立体投影
cass Cassini-Soldner 卡西尼-斯洛德投影
poly Polyconic 多圆锥投影
ortho Orthographic 正射投影
geos Geostationary 对地静止投影
nsper Near-Sided Perspective 近端透视投影?
sinu Sinusoidal 正弦投影
moll Mollweide 摩尔威德投影
hammer Hammer 哈默投影
robin Robinson 罗宾森投影
kav7 Kavrayskiy VII
eck4 Eckert IV
vandg van der
mbtfpq McBryde-Thomas Flat-Polar
gnom Gnomonic
rotpole Rotated Pole

解释部分的参考:

  • Matplotlib: Setting up the map
  • 地图投影种类-中英文对照
  • 地图投影的N种姿势
  • 以及百度百科

3.1.1 用EPSG进行设置

没太整明白

3.2 地图投影拓展

如果不想展示整个地图,可以通过修改地图边界或中心来展示部分区域。
除了cyl、merc、mill、cea和gall默认显示整个地球llcrnrlon = -180, llcrnrlat = -90, urcrnrlon = 180, urcrnrlat=90,其他投影方式都要手动设置Basemap类的参数来设置所展示的区域。
多数投影方式可以通过三种方法中的若干种进行设置:

方法一:设置边界的经纬度

参数 解释
llcrnrlon longitude of lower left hand corner of the desired map domain (degrees).
地图左边经度
llcrnrlat latitude of lower left hand corner of the desired map domain (degrees).
地图下方纬度
urcrnrlon longitude of upper right hand corner of the desired map domain (degrees).
地图右边经度
urcrnrlat latitude of upper right hand corner of the desired map domain (degrees).
地图上方纬度

方法二:设置边界的坐标

参数 解释
llcrnrx x value of lower left hand corner of the selected map domain in map projection coordinates.
地图左下角的x值
llcrnry y value of lower left hand corner of the selected map domain in map projection coordinates.
地图左下角的y值
urcrnrx x value of upper right hand corner of the selected map domain in map projection coordinates.
地图右上角的x值
urcrnry y value of upper right hand corner of the selected map domain in map projection coordinates.
地图右上角的y值

方法三:设置中心点和高与宽

参数 解释
width width of desired map domain in projection coordinates (meters).
height height of desired map domain in projection coordinates (meters).
lon_0 center of desired map domain (in degrees).
中心点的经度
lat_0 center of desired map domain (in degrees).
中心点的纬度

#其他相关参数:

4. 基本功能

4.1 在图上画点

  • 画一个点

  • 画多个点

你可能感兴趣的:(2018,学习笔记,2019)