Basemap入门
# 需要导入
# -*- coding: utf-8 -*-
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
1. 基础地图
map = Basemap() # 实例化地图对象
map.drawcoastlines() # 调用惯性线层
plt.show() # 展示图片
plt.savefig('./test.png')
2. 添加投影参数 lat_0 , lon_0 地图构造器
# fillcontinents() color 大陆颜色 , lake_color湖泊颜色
# drawmapboundary() fill_color填充地图颜色
map = Basemap(projection='ortho',lat_0=0,lon_0=0)
map.drawmapboundary(fill_color='aqua')
# lake_color 是湖泊的变色
map.fillcontinents(color='coral',lake_color='#1f77b4')
map.drawcoastlines()
plt.show()
3 投影 Projection cyl 是默认的 方形投影 和 长方投影
map = Basemap(projection='cyl')
map.drawmapboundary(fill_color='aqua')
map.fillcontinents(color='coral',lake_color='aqua')
map.drawcoastlines()
plt.show()
4. lon_0 经度 , lat_0 纬度
map = Basemap(projection='aeqd',lon_0=10,lat_0=50)
map.drawmapboundary(fill_color='aqua')
map.fillcontinents(color='coral',lake_color='aqua')
map.drawcoastlines()
plt.show()
5. 使用 espg 设置投影
'''espg是数字命名的投影,'''
# 使用 UTM 投影 展示 梅诺卡岛
map = Basemap(llcrnrlon=3.75,llcrnrlat=39.75,urcrnrlon=4.35,urcrnrlat=40.15,resolution='h',epsg=5520)
map.drawmapboundary(fill_color='aqua')
map.fillcontinents(color='coral',lake_color='aqua')
map.drawcoastlines()
plt.show()
#### 笔记: cyl , merc, mill,cea,gall投影时, 假定角:为 -180,-90,180,90为全地球
6. 边界框
map = Basemap(llcrnrlon = -10.5,llcrnrlat=35,urcrnrlon=4,urcrnrlat=44,
resolution='i',projection='tmerc',lat_0=39.5,lon_0=-3.25)
map.drawmapboundary(fill_color='aqua')
map.fillcontinents(color='coral',lake_color='aqua')
map.drawcoastlines()
plt.show()
7. 使用sinu,moll,hammer,npstere,spstere,nplaea,splaea,npaeqd,spaeqd,robin,eck4,kav7或mbtfpq投影时,无法使用此方法。
# 要么是因为绘制了所有地球仪,要么是因为无法根据地理坐标计算出扩展名。
map = Basemap(resolution='l', satellite_height=3000000,
projection='nsper', lat_0=30, lon_0=-27,
llcrnrx=500000, llcrnry=500000, urcrnrx=2700000, urcrnry=2700000)
map.drawmapboundary(fill_color='aqua')
map.fillcontinents(color='coral', lake_color='aqua')
map.drawcoastlines()
plt.show()
8. 只有正射,geos和nsper投影可以使用此方法来设置地图扩展名
map = Basemap(projection='aeqd',lon_0 = 0,lat_0 =90,width=10000000,height=10000000)
map.drawmapboundary(fill_color='aqua')
map.fillcontinents(color='coral',lake_color='aqua')
map.drawcoastlines()# 标注点
for i in range(0,10000000,1000000):
map.plot(i,i,marker='o',color='y')
plt.show()
9. 地图上画点
map = Basemap(projection='ortho',lat_0=0,lon_0=0)
map.drawmapboundary(fill_color='aqua')
map.fillcontinents(color='coral',lake_color='aqua')
map.drawcoastlines()
x, y =map(0,0)# laction 关键字设置为True, x,y是经纬度(单位度)
map.plot(x,y,marker='D',color='m')
plt.show()
10. 散点
### 10. 散点map = Basemap(projection='ortho',lat_0=0,lon_0=0)
map.drawmapboundary(fill_color='aqua')
map.fillcontinents(color='coral',lake_color='aqua')
map.drawcoastlines()
lons =[0,10,-20,-20] # 经线
lats = [0,-10,40,-20] # 纬线
x,y = map(lons,lats)
# 经纬线 组合
scattermap.scatter(x,y,marker='D',color='m')plt.show()
11. 栅格数据读取
from osgeo import gdal
from numpy import linspace
meshgridmap = Basemap(projection='tmerc',lat_0=0,lon_0=3, llcrnrlon=1.819757266426611,llcrnrlat=41.583851612359275, urcrnrlon=1.841589961763497, urcrnrlat=41.598674173123)
ds = gdal.Open('./dem.tiff')
data = ds.ReadAsArray()
### 在绘制轮廓之前,必须创建两个矩阵,其中包含数据矩阵中每个点的x和y坐标位置# - linspace , 使用n个元素创建一个从初始值到最终值得数组# 地图坐标从0到 map.urcrnrx或者map.urcrnry.# 并且具有与数据数组data.shape[1] 和 data.shape[0]相同的大小
# - meshgrid , 接收两个数组并使用他们创建一个矩阵. x的坐标在每一列中重复,x在每一行中重复
x = linspace(0,map.urcrnrx,data.shape[1])
y = linspace(0,map.urcrnry,data.shape[0])
xx,yy = meshgrid(x,y)# contourf 方法 将采用x,y 和数据巨准. 并将他们绘制在默认的颜色表中(jet),自动绘制# 级别数据, 在数据组装之后定义 # - 指示级别数据是整数, 数据数组的极值将指示色标的极值 # - 包含每个级别的值得列表. 范围功能可用于设置他们 range(0,3000,100) ,每100个单位的级别
map.contourf(xx,yy,data)
plt.show()
12. contour 轮廓
map = Basemap(projection='tmerc', lat_0=0,lon_0=3, llcrnrlon=1.819757266426611, llcrnrlat=41.583851612359275, urcrnrlon=1.841589961763497, urcrnrlat=41.598674173123)ds = gdal.Open('dem.tiff')
data = ds.ReadAsArray()
x = linspace(0,map.urcrnrx,data.shape[1])
y = linspace(0,map.urcrnrx,data.shape[0])
xx,yy = meshgrid(x,y)# 使用 contour 来处理# 处理海拔高度 : 400m - 1400m , 每100m都会创建一条轮廓# 颜色不是默认喷射的 , 是通过cubehelix颜色图传递给cmap参数来完成# 可以将标签设置为轮廓线方法() # - 内联 使要删除的轮廓线,在该线下 # - fmt 格式化数字 # - fontsize 设置标签字体的大小
# - colors 设置标签而颜色. 默认情况下,与轮廓线相同
cs = map.contour(xx,yy,data,range(400,1500,100),cmap=plt.cm.cubehelix)plt.clabel(cs,inline=True,fmt='%1.0f',fontsize=12,colors='k')plt.show()
13 . pcolormesh 绘制分类
map = Basemap(projection='tmerc',lat_0=0,lon_0=3, llcrnrlon=1.819757266426611, llcrnrlat=41.583851612359275, urcrnrlon=1.841589961763497, urcrnrlat=41.598674173123 )
ds = gdal.Open('dem.tiff')
data = ds.ReadAsArray()
x = linspace(0,map.urcrnrx,data.shape[1])
y = linspace(0,map.urcrnrx,data.shape[0])
xx,yy = meshgrid(x,y)
map.pcolormesh(xx,yy,data)
plt.show()
14 . 计算点在地图上的位置
map = Basemap(projection='aeqd',lon_0=10,lat_0=50)print map(10,50)# inverse 为False 输出的经度和纬度,# inverse 为True 输出相反print map(20015077.3712, 20015077.3712, inverse=True)