BaseMap入门

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)
posted @ 2021-06-01 08:33  染指未来  阅读(1238)  评论(0编辑  收藏  举报