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)