[Python] Basemap入坑手册

2018 同时被 3 个专栏收录
2 篇文章 0 订阅
13 篇文章 0 订阅
6 篇文章 0 订阅

Basemap入坑手册

2021-07-19
换了电脑装basemap报错后一直没更新,今天本来想怎么着也给他装上,才发现这个项目从2016年就换主了,basemap被维护到2020年。
但是现在都2021了,所以这篇不会再更新了,可能会开个cartopy的学习笔记。
在这里插入图片描述


前面的废话

本来只是想画个热点图,然后一路 百度地图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
这里写图片描述
一丢丢进阶的图代码如下:

# 导入包
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
这里写图片描述
如果遇到error请点这里看看。

3. 地图投影专题

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

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

3.1 地图投影基础

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

选项描述解释
cylCylindrical Equidistant默认,圆柱投影
mercMercator墨卡托投影,是正轴等角圆柱投影
tmercTransverse Mercator横轴墨卡托投影
omercOblique Mercator斜轴墨卡托投影
millMiller Cylindrical米勒圆柱投影
gallGall Stereographic高尔立体投影
ceaCylindrical Equal-Area圆柱等面积投影
lccLambert Conformal兰勃特等角投影
laeaLambert Azimuthal Equal Area兰勃特等积投影
nplaeaNorth-Polar Lambert北极兰勃特投影?
splaeaSouth-Polar Lambert南极兰勃特投影?
eqdcEquidistant Conic等距圆锥投影
aeqdAzimuthal Equidistant等距方位投影
npaeqdNorth-Polar Azimuthal北极方位投影
spaeqdSouth-Polar Azimuthal南极方位投影
aeaAlbers Equal阿尔伯斯等积投影
stereStereographic立体投影
npstereNorth-Polar Stereographic北极立体投影
spstereSouth-Polar Stereographic南极立体投影
cassCassini-Soldner卡西尼-斯洛德投影
polyPolyconic多圆锥投影
orthoOrthographic正射投影
geosGeostationary对地静止投影
nsperNear-Sided Perspective近端透视投影?
sinuSinusoidal正弦投影
mollMollweide摩尔威德投影
hammerHammer哈默投影
robinRobinson罗宾森投影
kav7Kavrayskiy VII
eck4Eckert IV
vandgvan der
mbtfpqMcBryde-Thomas Flat-Polar
gnomGnomonic
rotpoleRotated Pole

解释部分的参考:

3.1.1 用EPSG进行设置

没太整明白

3.2 地图投影拓展

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

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

参数解释
llcrnrlonlongitude of lower left hand corner of the desired map domain (degrees).
地图左边经度
llcrnrlatlatitude of lower left hand corner of the desired map domain (degrees).
地图下方纬度
urcrnrlonlongitude of upper right hand corner of the desired map domain (degrees).
地图右边经度
urcrnrlatlatitude of upper right hand corner of the desired map domain (degrees).
地图上方纬度

方法二:设置边界的坐标

参数解释
llcrnrxx value of lower left hand corner of the selected map domain in map projection coordinates.
地图左下角的x值
llcrnryy value of lower left hand corner of the selected map domain in map projection coordinates.
地图左下角的y值
urcrnrxx value of upper right hand corner of the selected map domain in map projection coordinates.
地图右上角的x值
urcrnryy value of upper right hand corner of the selected map domain in map projection coordinates.
地图右上角的y值

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

参数解释
widthwidth of desired map domain in projection coordinates (meters).
heightheight of desired map domain in projection coordinates (meters).
lon_0center of desired map domain (in degrees).
中心点的经度
lat_0center of desired map domain (in degrees).
中心点的纬度

#其他相关参数:

4. 基本功能

4.1 在图上画点

  • 画一个点

  • 画多个点

©️2021 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值