目录

上一个主题

8.1. 简介

下一个主题

8.3. 使用plot绘图

关注公众号


常见问题

  1. Windows下的安装说明
  2. Jupyter免费在线实验环境
  3. 勘误与补充


>>> from helper import info; info()
页面更新时间: 2019-10-28 20:22:44
操作系统/OS: Linux-4.19.0-6-amd64-x86_64-with-debian-10.1
Python: 3.7.3

8.2. 绘制地图背景

Basemap包括GSSH海岸线数据集,以及来自GMT的河流、州和国家边界的数据集。这些数据集可用于在地图上以几种不同的分辨率绘制海岸线,河流和政治边界。相关的底图方法是:

  • drawcoastlines():绘制海岸线。

  • fillcontinents():为大陆内部着色(通过填充海岸线多边形)。不幸的是,fillcontinents方法并不总是做正确的。因为Matplotlib总是尝试填充多边形的内部。在某些情况下,海岸线多边形的内部可以是模糊的,并且有时需要填充外部而不是内部。在这些情况下,建议的解决方法是使用drawlsmask()方法覆盖具有为陆地和水域指定的不同颜色的图像。

  • drawcountries():绘制国家边界。

  • drawstates():绘制北美的州界。

  • drawrivers():绘制河流。

绘制地图并不只包括绘制海岸线和政治边界,也包括地图背景的绘制。Basemap提供了绘制地图背景的几个方法:

  • drawlsmask():绘制高分辨率海陆掩码作为图像,指定土地和海洋颜色。陆地海面掩模源自GSHHS海岸线数据,并且有多个海岸线选项和像素大小可供选择。

  • bluemarble():绘制一张NASA蓝色大理石图像作为地图背景。

  • shadedrelief():绘制一个阴影浮雕图像作为地图背景。

  • etopo():绘制etopo浮雕图像作为地图背景。

  • warpimage():使用abitrary图像作为地图背景。图像必须是全球的,从国际数据线向东,南极向北,以纬度/经度坐标覆盖世界。

8.2.1. 1、使用arcgis REST API服务下载并绘制图像。

>>> %matplotlib inline
>>> import warnings
>>> warnings.filterwarnings('ignore')
>>>
>>> from mpl_toolkits.basemap import Basemap
>>> import matplotlib.pyplot as plt
>>>
>>> map = Basemap(llcrnrlon=3.75,llcrnrlat=39.75,urcrnrlon=4.35,urcrnrlat=40.15, epsg=5520)
>>> # http://server.arcgisonline.com/arcgis/rest/services
>>>
>>> map.arcgisimage(service='ESRI_Imagery_World_2D', xpixels = 1500, verbose= True)
>>> plt.show()
http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_Imagery_World_2D/MapServer/export?bbox=1564270.9620172717,4401598.726056214,1615017.0560380095,4446612.184939825&bboxSR=5520&imageSR=5520&size=1500,1330&dpi=96&format=png32&transparent=true&f=image
_images/basemap-background_2_1.png

下面使用了另外一种底图:

>>> map.arcgisimage(service='World_Shaded_Relief', xpixels = 1500, verbose= True)
>>> plt.show()
http://server.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer/export?bbox=1564270.9620172717,4401598.726056214,1615017.0560380095,4446612.184939825&bboxSR=5520&imageSR=5520&size=1500,1330&dpi=96&format=png32&transparent=true&f=image
_images/basemap-background_4_1.png
arcgisimage(server='http://server.arcgisonline.com/ArcGIS', service='ESRI_Imagery_World_2D',
    xpixels=400, ypixels=None, dpi=96, verbose=False, **kwargs)
  • 服务器可以使用相同的REST API连接到另一个服务器。

  • 服务器显示的是绘制的层。要获取可用图层的完整列表,请检查API网。

  • xpixels实际上是用来设置图像的缩放。数字越大将会要求图像更大,所以图像将有更多的细节。因此,当缩放更大时,xsize必须更大以保持分辨率 。

  • y像素可以用于强制图像在y方向上具有与以宽高比定义的像素不同数量的像素。默认情况下,宽高比保持不变,这似乎是一个很好的价值。

  • dpi是输出的图像分辨率。更改其值将更改像素数,但不会更改缩放级别。

  • verbose打印用于获取远程图像的URL。

  • 使用这种方法的一个重要的点是,投影必须使用epsg参数设置,除非使用底图表示法中的4326或cyl。

8.2.2. 2、bluemarble

在地图上绘制bluemarble图像。

bluemarble(ax=None, scale=None, **kwargs)
  • 该比例对于降低原始图像分辨率以加速处理是有用的。将图像的大小除以4值为0.5。

  • 图像的最终投影被扭曲,所以所有投影方法均正常工作。

>>> map = Basemap(llcrnrlon=-10.5,llcrnrlat=33,urcrnrlon=10.,urcrnrlat=46.,
>>>              resolution='i', projection='cass', lat_0 = 39.5, lon_0 = 0.)
>>>
>>> map.bluemarble()
>>>
>>> map.drawcoastlines()
>>>
>>> plt.show()
_images/basemap-background_6_0.png

8.2.3. 3、drawcoastlines

绘制海岸线。

drawcoastlines(linewidth=1.0, linestyle=’solid’, color=’k’, antialiased=1, ax=None, zorder=None)
  • 线宽集。线宽以像素为单位。

  • linestyle设置线型。默认情况下是固体,但可以是虚线,或任何matplotlib选项。

  • 颜色默认为k(black)。遵循matplotlib约定。

  • 抗锯齿默认为true

  • zorder设置图层位置。默认情况下,顺序由Basemap设置。

>>> map = Basemap()
>>>
>>> map.drawcoastlines()
>>>
>>> plt.show()
_images/basemap-background_8_0.png

8.2.4. 4、drawcounties

从库包括的图层绘制国家边界。

drawcounties(linewidth=0.1, linestyle=’solid’, color=’k’, antialiased=1, facecolor=’none’, ax=None, zorder=None, drawbounds=False)
  • 线宽集。线宽以像素为单位。

  • linestyle设置线型。默认情况下是固体,但可以是虚线,或任何matplotlib其他选项。

  • 颜色默认为k(black)。遵循matplotlib约定。

  • 抗锯齿默认为true。

  • zorder设置图层位置。默认情况下,顺序由Basemap设置。

注:facecolor参数,它应该是县的颜色,但在一些Basemap版本不能运行。

注意:

  • 分辨率是固定的,不依赖于传递给类构造函数的分辨率。

  • 海岸线是另一个功能,而乡镇海岸线不被认为是海岸线,因此有必要把这个方法和其他的方法结合起来以获得好的地图。

8.2.5. 5、drawcountries

从库中包含的图层绘制国家/地区边界。

drawcountries(linewidth=1.0, linestyle=’solid’, color=’k’, antialiased=1, ax=None, zorder=None)
  • 线宽集。线宽以像素为单位。

  • linestyle设置线型。默认情况下是固体,但可以是虚线,或任何matplotlib选项。

  • 颜色默认为k(black)。遵循matplotlib约定。

  • 抗锯齿默认为true zorder设置图层位置。默认情况下,顺序由Basemap设置。

注意:

  • 创建Basemap实例时会产生具有更好或粗糙分辨率的图层。

  • 海岸线是另一个功能,乡镇海岸线不是通常的海岸线,因此要结合其它函数来绘制地图。

>>> map = Basemap(projection='ortho',
>>>               lat_0=0, lon_0=0)
>>>
>>> map.drawmapboundary(fill_color='aqua')
>>> map.fillcontinents(color='coral',lake_color='aqua')
>>>
>>> map.drawcountries()
>>>
>>> plt.show()
_images/basemap-background_11_0.png

没有绘制海岸线,结果有些奇怪:

>>> map = Basemap(projection='ortho',
>>>               lat_0=0, lon_0=0)
>>>
>>> map.drawcountries()
>>>
>>> plt.show()
_images/basemap-background_13_0.png

8.2.6. 6、Drawlsmask

Drawlsmask是绘制湖泊,陆地和海洋的方法。尽量避免使用fillcontinents和drawmapboundary方法。此外,Drawlsmask可以将数据源更改为自定义点阵列。 与其他方法的不同之处在于,在此方法中无法设置zorder。

drawlsmask(land_color=‘0.8’, ocean_color=’w’, lsmask=None, lsmask_lons=None, lsmask_lats=None, lakes=True, resolution=’l’, grid=5, **kwargs)
  • land_color设置给土地的颜色(默认为灰色)

  • ocean_color设置海洋的颜色(默认为白色)

  • lsmask具有备用数据的阵列。如果为“无”,则将采用库中的默认数据。该数组必须包含海洋的0和土地的1

  • lsmask_lons替换陆地海面掩码的经度

  • lsmask_lats替代陆地海面的纬度

  • 分辨率可以更改由Basemap实例定义的数据的分辨率

  • grid栅格数组栅格分辨率,单位为弧度。默认值为5分钟

8.2.7. 7、drawmapboundary

在地图上绘制地球边界,可选择填充。

drawmapboundary(color=’k’, linewidth=1.0,     fill_color=None, zorder=None, ax=None)
  • 线宽集。线宽以像素为单位

  • 颜色设置边缘颜色,默认为k(black)。遵循matplotlib约定

  • fill_color设置填充球体颜色,默认情况下为None。还遵循matplotlib约定

  • zorder设置图层位置。默认情况下,顺序由Basemap设置

>>> plt.figure(121)
>>> map = Basemap(projection='ortho',lon_0=0,lat_0=0,resolution='c')
>>> map.drawmapboundary()
>>>
>>> plt.figure(122)
>>> map = Basemap(projection='sinu',lon_0=0,resolution='c')
>>> map.drawmapboundary(fill_color='aqua')
>>>
>>> plt.show()
_images/basemap-background_16_0.png _images/basemap-background_16_1.png

8.2.8. 8、Drawmeridians

在地图上绘制经线。

drawmeridians(meridians, color=’k’, linewidth=1.0, zorder=None, dashes=[1, 1], labels=[0, 0, 0, 0], labelstyle=None, fmt=’%g’, xoffset=None, yoffset=None, ax=None, latmax=None, **kwargs)
  • 经线是一个有经度的列表。如果值是整数,则可以使用range()创建。如果你需要浮点数,np.arange()是一个不错的选择

  • color设置线的颜色。

  • 线宽集。线宽以像素为单位

  • zorder可以设置线的位置,土地覆盖经线,或相反。

  • dashing可以设置dash样式。第一个元素是要绘制的像素数,第二个是要跳过的像素数

  • 更改绘制标签的位置。将值设置为1使得标签在地图的所选边上绘制。四个位置是[左,右,上,下]

>>> map = Basemap(projection='aeqd',
>>>               lon_0=0.0, lat_0=0,
>>>               width=25000000, height=25000000)
>>>
>>> map.drawmeridians(range(0, 360, 20))
>>>
>>> plt.show()
_images/basemap-background_18_0.png

8.2.9. 9、parallels

在地图上绘制纬线。

drawparallels(circles, color=’k’, linewidth=1.0, zorder=None, dashes=[1, 1], labels=[0, 0, 0, 0], labelstyle=None, fmt=’%g’, xoffset=None, yoffset=None, ax=None, latmax=None, **kwargs)
  • rallels是要绘制的纬度的列表。如果值是整数,则可以使用range()创建。如果你需要浮点数,np.arange()是一个不错的选择。

  • color设置线的颜色。

  • 线宽集,当然,线宽以像素为单位

  • order可以设置线的位置,以便能够例如使得平面覆盖纬线或相反。

  • 设置dashing样式。第一个元素是要绘制的像素数,第二个是要跳过的像素数。

  • 标签更改绘制标签的位置。将值设置为1使得标签在地图的所选边上绘制。四个位置是[左,右,上,下]。

>>> map = Basemap(projection='poly',
>>>               lon_0=0.0, lat_0=0,
>>>               llcrnrlon=-80.,llcrnrlat=-40,urcrnrlon=80.,urcrnrlat=40.)
>>>
>>> map.drawmapboundary(fill_color='aqua')
>>> map.fillcontinents(color='coral',lake_color='aqua')
>>> map.drawcoastlines()
>>>
>>> map.drawparallels(range(-90, 100, 10), linewidth=2, dashes=[4, 2], labels=[1,0,0,1], color='r', zorder=0 )
>>> plt.show()
_images/basemap-background_20_0.png

8.2.10. 10、Drawrivers

从库中包含的图层绘制河流。

drawrivers(linewidth=0.5, linestyle=’solid’, color=’k’, antialiased=1, ax=None, zorder=None)
  • 线宽集。线宽以像素为单位

  • linestyle设置线型。默认情况下是固体,也可以是虚线,或任何matplotlib选项

  • 颜色默认为k(黑色)。还遵循matplotlib约定

  • 抗锯齿默认为true

  • zorder设置图层位置。默认情况下,顺序由Basemap设置

注意:

分辨率是固定的,不依赖于传递给类构造函数的分辨率参数。

>>> map = Basemap(llcrnrlon=-93.,llcrnrlat=40.,urcrnrlon=-75.,urcrnrlat=50.,
>>>              resolution='i', projection='tmerc', lat_0 = 40., lon_0 = -80)
>>>
>>> map.drawmapboundary(fill_color='aqua')
>>> map.fillcontinents(color='#ddaa66', lake_color='#0000ff')
>>>
>>> map.drawcountries()
>>> map.drawrivers(color='#0000ff')
>>>
>>> plt.show()
_images/basemap-background_22_0.png

8.2.11. 11、drawstates

从库包括的图层中绘制北美州界。也可以绘制澳大利亚州的边界。

drawstates(linewidth=0.5, linestyle=’solid’, color=’k’, antialiased=1, ax=None, zorder=None)
  • 线宽集,当然,线宽以像素为单位

  • linestyle设置线型。默认情况下是固体,也可以是虚线,或任何matplotlib选项

  • 颜色默认为k(black)。还遵循matplotlib约定

  • 抗锯齿默认为true

  • zorder设置图层位置。默认情况下,顺序由Basemap设置

注意:

  • 分辨率是固定的,不依赖于传递给类构造函数的分辨率参数

  • 国家边框未绘制,如果方法不与绘图帐户一起使用,将创建一个奇怪的效果

>>> map = Basemap(width=12000000,height=9000000,
>>>             rsphere=(6378137.00,6356752.3142),\
>>>             resolution='l',area_thresh=1000.,projection='lcc',\
>>>             lat_1=45.,lat_2=55,lat_0=50,lon_0=-107.)
>>>
>>> map.drawmapboundary(fill_color='aqua')
>>> map.fillcontinents(color='#ddaa66', lake_color='aqua')
>>>
>>> map.drawcountries()
>>> map.drawstates(color='0.5')
>>>
>>> plt.show()
_images/basemap-background_24_0.png

8.2.12. 12、etopo

从NOAA取得etopo来绘制一个浮雕图像。图像具有1英寸的弧度分辨率,因此在放大时,结果相当差。

etopo(ax=None, scale=None, **kwargs)
  • 该比例对于降低原始图像分辨率以加速处理是有用的。值为0.5将图像的大小除以4

  • 图像被扭曲到最终投影,所以所有projectinos使用此方法正常工作

>>> map = Basemap(llcrnrlon=-10.5,llcrnrlat=33,urcrnrlon=10.,urcrnrlat=46.,
>>>              resolution='i', projection='cass', lat_0 = 39.5, lon_0 = 0.)
>>>
>>> map.etopo()
>>>
>>> map.drawcoastlines()
>>>
>>> plt.show()
Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).
_images/basemap-background_26_1.png

8.2.13. 13、Fillcontinents

用大陆绘制填充多边形。

fillcontinents(color=‘0.8’, lake_color=None, ax=None, zorder=None, alpha=None)
  • 颜色设置成大陆颜色。默认情况下是gry颜色。

  • 湖色设置湖的颜色。默认情况下不绘制湖的颜色,但您可以设置其值为aqua,进而将其绘制为蓝色。

  • alpha是从0到1的值以设置透明度

  • zorder设置层的位置。它可以用于隐藏(或显示)contourf图层,应该只在海上,例如

>>> map = Basemap(projection='ortho',
>>>               lat_0=0, lon_0=0)
>>>
>>> # Fill the globe with a blue color
>>> map.drawmapboundary(fill_color='aqua')
>>> #Fill the continents with the land color
>>> map.fillcontinents(color='coral',lake_color='aqua')
>>>
>>> map.drawcoastlines()
>>>
>>> plt.show()
_images/basemap-background_28_0.png