Cartopy 中的地图投影
??經典地圖制圖中使用的投影面有圓柱面、圓錐面或平面等。根據所用投影面,地圖投影相對應地可分為圓柱投影、圓錐投影和方位投影。后來又發展出了很多現代地圖投影,如偽圓柱、多圓錐等投影辦法。在制圖時選擇合適的地圖投影是一件重要的工作。
??本文將對 Cartopy 中支持的地圖投影進行逐一進行簡要介紹,這些投影都是 cartopy.crs 中的類。若要繪制某一類投影的地圖,只需將其實例化之后傳入 plt.axes() 方法的 projection 參數即可。本文不涉及投影的原理,旨在展示每種地圖投影的效果和用法,以便在選擇時參考。
圓柱投影
PlateCarree
PlateCarree(可利)投影將地物投影到圓柱面上再展開,常用來繪制世界地圖。該類的定義為:
class cartopy.crs.PlateCarree(central_longitude=0.0, globe=None)參數說明:
- central_longitude:中央經線,默認為 0;
- globe:橢球定義,默認為 WGS84。
示例:
LambertCylindrical
Lambert cylindrical projection(蘭伯特等積投影)也是繪制世界地圖的一種常用方案。該類的定義為:
class cartopy.crs.LambertCylindrical(central_longitude=0.0)參數說明:
- central_longitude:中央經線,默認為 0。
示例:
Mercator
Mercator(墨卡托)投影,屬于正軸等角割圓柱投影。經緯線為相互垂直的平行直線,圖上無角度變形,但面積變形較大。該投影常用于制作航海圖或赤道附近區域的地圖。其類定義為:
class cartopy.crs.Mercator(central_longitude=0.0, min_latitude=-80.0, max_latitude=84.0,latitude_true_scale=0.0, globe=None)參數說明:
- central_longitude:中央經線,默認為 0;
- min_latitude:顯示的最小緯線(最南端),默認為 -80;
- max_latitude:顯示的最大緯線(最北端),默認為 84;
- latitude_true_scale:長度不變形的緯線,默認為 0;
- globe:橢球定義,默認為 WGS84。
示例:
Miller
Miller(米勒)投影。其類定位為:
class cartopy.crs.Miller(central_longitude=0.0)參數說明:
- central_longitude:中央經線,默認為 0。
示例:
TransverseMercator
TransverseMercator(橫軸墨卡托)投影是對標準墨卡托投影的一種變換。其類定義為:
class cartopy.crs.TransverseMercator(central_longitude=0.0, central_latitude=0.0,false_easting=0.0, false_northing=0.0,scale_factor=1.0, globe=None)參數說明:
- central_longitude:中央經線,默認為 0;
- central_latitude:中央緯線,默認為 0;
- false_easting:平面上 X 軸坐標(東方向)的偏移量,以米為單位;
- false_northing:平面上 Y 軸坐標(北方向)的偏移量,以米為單位;
- scale_factor:中央經線處的長度變形因子,默認為 1;
- globe:橢球定義,默認為 WGS84。
示例:
UTM
UTM(通用橫軸墨卡托投影),制圖中最常用的一種投影方法之一。在 UTM 中,地球上的主要陸地被劃分為一個個的網格區間。對于緯度,從南緯 80° 開始,每 8° 被劃分為一個區間,自南向北由從 “C” 至 “X” 的字母表示(為包含北極附近的陸地,最北的區間包含 12°);對于經度,從零度子午線開始每隔 6° 向東編排,其帶好以數字 01-60 表示。該類的定義為:
class cartopy.crs.UTM(zone, southern_hemisphere=False, globe=None)參數說明:
- zone:所繪地區的 6° 經度區間帶號;
- southern_hemisphere:投影帶是否在南半球;
- globe:橢球定義,默認為 WGS84。
示例:
RotatedPole
RotatedPole(旋轉極)投影,常被用于天氣預測模型中。該類的定義為:
class cartopy.crs.RotatedPole(pole_longitude=0.0, pole_latitude=90.0,central_rotated_longitude=0.0, globe=None)參數說明:
- pole_longitude:旋轉極的經度;
- pole_latitude:旋轉極的緯度;
- central_rotated_longitude:旋轉的經度;
- globe:橢球定義,默認為 WGS84。
示例:
OSGB
OSGB(Ordnance Survey of Great Britain),英國軍用測量大地網,用于測量大不列顛島的一種區域等距圓錐投影。
示例:
EuroPP
EuroPP,用于繪制歐洲地圖的一種等距圓錐投影。
示例:
OSNI
OSNI(Ordnance Survey of Northern Ireland),一種區域性質的等距圓錐投影,用于測繪北愛爾蘭島。
示例:
圓錐投影
AlbersEqualArea
AlbersEqualArea(阿爾伯斯等面積)投影。其類定義為:
class cartopy.crs.AlbersEqualArea(central_longitude=0.0, central_latitude=0.0,false_easting=0.0, false_northing=0.0,standard_parallels=(20.0, 50.0), globe=None)參數說明:
- central_longitude:中央經線,默認為 0;
- central_latitude:中央緯線,默認為 0;
- false_easting:平面上 X 軸坐標(東方向)的偏移量,以米為單位;
- false_northing:平面上 Y 軸坐標(北方向)的偏移量,以米為單位
- standard_parallels:長度不變形的緯線,默認為 (20, 50);
- globe:橢球定義,默認為 WGS84。
示例:
LambertConformal
LambertConformal(蘭伯特正形)投影。其類定義為:
class cartopy.crs.LambertConformal(central_longitude=-96.0, central_latitude=39.0,false_easting=0.0, false_northing=0.0,secant_latitudes=None, standard_parallels=None,globe=None, cutoff=-30)參數說明:
- central_longitude:中央經線,默認為 -96;
- central_latitude:中央緯線,默認為 39;
- false_easting:平面上 X 軸坐標(東方向)的偏移量,以米為單位;
- false_northing:平面上 Y 軸坐標(北方向)的偏移量,以米為單位
- secant_latitudes:割線的緯度;
- standard_parallels:長度不變形的緯線,默認為 (33, 45);
- cutoff:顯示的緯度邊界,默認為 -30;
- globe:橢球定義,默認為 WGS84。
示例:
方位投影
Orthographic
Orthographic(正射)投影,視點在無窮遠處,常用于表現某個半球。該類的定義為:
class cartopy.crs.Orthographic(central_longitude=0.0, central_latitude=0.0, globe=None)參數說明:
- central_longitude:中央經線,默認為 0;
- central_latitude:中央緯線,默認為 0;
- globe:橢球定義,默認為 WGS84。
示例:
AzimuthalEquidistant
AzimuthalEquidistant(正方位等距)投影,在切點輻射的方向上沒有長度變形,有角度和面積變形。該類的定義為:
class cartopy.crs.AzimuthalEquidistant(central_longitude=0.0, central_latitude=0.0,false_easting=0.0, false_northing=0.0, globe=None)參數說明:
- central_longitude:中央經線,默認為 0;
- central_latitude:中央緯線,默認為 0;
- false_easting:平面上 X 軸坐標(東方向)的偏移量,以米為單位;
- false_northing:平面上 Y 軸坐標(北方向)的偏移量,以米為單位
- globe:橢球定義,默認為 WGS84。
示例:
Stereographic
Stereographic(球極平面)投影,這也是一種等角投影,其視點在球面上。但這種投影會造成較大的長度和面積變形,且離切點愈遠,其變形幅度愈大。其類定義為:
class cartopy.crs.Stereographic(central_latitude=0.0, central_longitude=0.0,false_easting=0.0, false_northing=0.0,true_scale_latitude=None, globe=None)參數說明:
- central_longitude:中央經線,默認為 0;
- central_latitude:中央緯線,默認為 0;
- false_easting:平面上 X 軸坐標(東方向)的偏移量,以米為單位;
- false_northing:平面上 Y 軸坐標(北方向)的偏移量,以米為單位
- true_scale_latitude:長度不變形的緯線;
- globe:橢球定義,默認為 WGS84。
示例:
Geostationary
Geostationary(地球同步衛星)視角,視點在赤道上空某一點處。這種投影好像在地球同步(GEO)衛星上觀察到的地球。其類定義為:
class cartopy.crs.Geostationary(central_longitude=0.0, satellite_height=35785831,false_easting=0, false_northing=0, globe=None)參數說明:
- central_longitude:中央經線,默認為 0;
- satellite_height:衛星高度,默認為 35785831 米,這是 GEO 衛星的高度;
- false_easting:平面上 X 軸坐標(東方向)的偏移量,以米為單位;
- false_northing:平面上 Y 軸坐標(北方向)的偏移量,以米為單位
- globe:橢球定義,默認為 WGS84。
示例:
NearsidePerspective
NearsidePerspective(駕駛員)視角,視點在地球外某一點處。這種投影好像在高空中某處宇宙飛船駕駛員的視角。其類定義為:
class cartopy.crs.NearsidePerspective(central_longitude=0.0, central_latitude=0.0,satellite_height=35785831, false_easting=0,false_northing=0, globe=None)參數說明:
- central_longitude:中央經線,默認為 0;
- central_latitude:中央緯線,默認為 0;
- satellite_height:衛星高度,默認為 35785831 米,即 GEO 衛星的高度;
- false_easting:平面上 X 軸坐標(東方向)的偏移量,以米為單位;
- false_northing:平面上 Y 軸坐標(北方向)的偏移量,以米為單位
- globe:橢球定義,默認為 WGS84。
示例:
LambertAzimuthalEqualArea
LambertAzimuthalEqualArea(蘭伯特方位等積)投影,具有等積性質,但在靠近邊緣的地方長度和角度變形較大。其類定義為:
class cartopy.crs.LambertAzimuthalEqualArea(central_longitude=0.0, central_latitude=0.0,false_easting=0.0, false_northing=0.0, globe=None)參數說明:
- central_longitude:中央經線,默認為 0;
- central_latitude:中央緯線,默認為 0;
- satellite_height:衛星高度,默認為 35785831 米,即 GEO 衛星的高度;
- false_easting:平面上 X 軸坐標(東方向)的偏移量,以米為單位;
- false_northing:平面上 Y 軸坐標(北方向)的偏移量,以米為單位
- globe:橢球定義,默認為 WGS84。
示例:
Gnomonic
Gnomonic(球心)投影,將地球想象為一個水面透明的玻璃球,這種投影好像從地心光源將陸地的影子投射到墻上的景象。該類定義為:
class cartopy.crs.Gnomonic(central_longitude=0.0, central_latitude=0.0, globe=None)參數說明:
- central_longitude:中央經線,默認為 0;
- central_latitude:中央緯線,默認為 0;
- globe:橢球定義,默認為 WGS84。
示例:
NorthPolarStereo
NorthPolarStereo(北極極射)投影。該類的定義為:
class cartopy.crs.NorthPolarStereo(central_longitude=0.0, globe=None)參數說明:
- central_longitude:中央經線,默認為 0;
- globe:橢球定義,默認為 WGS84。
示例:
SouthPolarStereo
SouthPolarStereo(南極極射)投影。該類的定義為:
class cartopy.crs.SouthPolarStereo(central_longitude=0.0, globe=None)參數說明:
- central_longitude:中央經線,默認為 0;
- globe:橢球定義,默認為 WGS84。
示例:
其他投影方式
Mollweide
Mollweide(摩爾威特)投影,一種正軸等積性質的偽圓柱投影,由德國人摩爾威特(K.B.Mollweide)所創,常用于繪制世界地圖或東西半球圖。中央經線為直線,距離中央經線東西相差 90° 的經線構成一個大圓,其面積等于地球表面積的1/2,其余經線為橢圓。Cartopy 中對應的類為:
class cartopy.crs.Mollweide(central_longitude=0, globe=None)參數說明:
- central_longitude:中央經線,默認為 0;
- globe:橢球定義,默認為 WGS84。
示例:
Robinson
Robinson(羅賓遜)投影也是一種偽圓柱投影,主要為了克服圓柱投影形狀拉伸過大,希望獲得角度和面積變形均最小的世界地圖投影。Cartopy 中對應的類為:
class cartopy.crs.Robinson(central_longitude=0, globe=None)參數說明:
- central_longitude:中央經線,默認為 0;
- globe:橢球定義,默認為 WGS84。
示例:
Sinusoidal
Sinusoidal(正弦)投影是一種偽圓柱等積投影,由法國人桑遜(N.Sanson)所創,有時候也被稱為桑遜投影或墨卡托等積投影。這是一種等積性質的偽圓柱投影,緯線為間隔相等的平行直線,經線為對稱于中央經線的正弦曲線。Cartopy 中對應的類為:
class cartopy.crs.Sinusoidal(central_longitude=0.0, false_easting=0.0,false_northing=0.0, globe=None)參數說明:
- central_longitude:中央經線,默認為 0;
- globe:橢球定義,默認為 WGS84。
示例:
InterruptedGoodeHomolosine
InterruptedGoodeHomolosine(分瓣正弦古德)投影,一種偽圓柱、等積投影。該投影中,全圖被分為幾瓣,各瓣之間通過赤道連接,這樣可使得各大洲陸地部分表現得更完好。其缺點也顯而易見:地圖的連續性被破壞殆盡。Cartopy 中對應的類為:
class cartopy.crs.InterruptedGoodeHomolosine(central_longitude=0, globe=None)參數說明:
- central_longitude:中央經線,默認為 0;
- globe:橢球定義,默認為 WGS84。
示例:
總結
對于上文提到的 false_easting 和 false_northing 兩個變量的含義與用途,有些讀者可能會有困惑。這里說一下我的理解。在某些局部地區的坐標系中,為了避免坐標值出現負數,通常會在可能出現負數的坐標上加上一個較大的常數。例如,我國普遍采用高斯投影的平面直角坐標系,以赤道和中央子午線作為坐標軸,由于我國位于北半球,因此南北方向不會出現負數,但是東西方向上會出現負數(中央子午線以西的點)。此時通常的解決辦法就是為所有的東西方向的坐標加上 500 km。這里的 500 km 就是 false_easting 的值。
當制圖范圍較小時,無論什么投影方式都無太大變形;對于范圍廣大的世界地圖、半球地圖、大洲地圖、大國地圖等,則需要慎重考慮。對表現大塊區域常用的投影方式可總結為:
- 世界地圖:正圓柱、偽圓柱和多圓錐投影;
- 東、西半球:常選用橫軸方位投影;
- 南、北半球:常采用正軸方位投影;
- 水、陸半球:一般選用斜軸方位投影;
- 極地——正軸方位投影;
- 赤道附近——橫軸方位投影或正軸圓柱投影;
- 中緯地區——正軸圓錐投影或斜軸方位投影。
總結
以上是生活随笔為你收集整理的Cartopy 中的地图投影的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言 strcpy原型,浅谈C语言中s
- 下一篇: 20 年后,我们怎么看电影?