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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM