用Python做地圖投影 - 多面孔的世界

(如需轉(zhuǎn)載圈膏,請在顯著位置注明個人微信公眾號stdrei)

為什么要做地圖投影

簡而言之狈癞,地球表面是一個三維的曲面洁灵,在曲面上進行測量是非常困難的暮屡。不信你拿個地球儀量一下兩點的距離或者計算個夾角試試。將三維的曲面投影到二維平面温眉,這樣我們學的平面幾何才有用武之地缸匪。

youtube - Adventures with GIS: an introduction to IPython and the joy of play

什么是投影

如果要了解地圖投影,首先需要知道地理坐標系投影坐標系类溢。簡單的說凌蔬,地理坐標系是參考平面為橢球面的球面坐標,最常見的是以經(jīng)緯度來量算的球面坐標系統(tǒng)闯冷。投影坐標系是定義在一個二維平面的坐標系統(tǒng)砂心,其地圖單位通常為米。將球面坐標轉(zhuǎn)化為平面坐標的過程便稱為投影蛇耀。 因此辩诞,投影坐標系總是基于地理坐標系的(連坐標系都要講出身的)。

因為地球是一個赤道略寬兩極略扁的不規(guī)則的梨形球體纺涤,其表面是一個不可展平的曲面译暂,所以運用任何數(shù)學方法進行這種投影轉(zhuǎn)換都會產(chǎn)生誤差和變形,為按照不同的需求縮小誤差撩炊,就產(chǎn)生了各種投影方法外永。比如這篇很有意思的文章你所不知的有趣投影方法。也可以看文末的幾幅地球不同投影的圖拧咳。

EPSG Code

如果經(jīng)常跟地圖打交道伯顶,你一定會被各種花式投影變換弄的眼花繚亂。EPSGEuropean Petroleum Survey Group (EPSG)成立于1986年骆膝,并在2005年重組為OGP(Internation Association of Oil & Gas Producers)祭衩,它負責維護并發(fā)布坐標參照系統(tǒng)的數(shù)據(jù)集參數(shù),以及坐標轉(zhuǎn)換描述谭网,該數(shù)據(jù)集被廣泛接受并使用汪厨,通過一個Web發(fā)布平臺進行分發(fā),同時提供了微軟Acess數(shù)據(jù)庫的存儲文件愉择,通過SQL 腳本文件劫乱,MySQL, Oracle 和PostgreSQL等數(shù)據(jù)庫也可使用织中。目前已有的橢球體,投影坐標系等不同組合都對應著不同的ID號衷戈,這個號在EPSG中被稱為EPSG code狭吼,它代表特定的橢球體、單位殖妇、地理坐標系或投影坐標系等信息刁笙。

開源的QGIS軟件中就直接采用了EPSG。

The CRSs available in QGIS are based on those defined by the European Petroleum Search Group (EPSG) and the Institut Geographique National de France (IGNF) and are largely abstracted from the spatial reference tables used in GDAL. EPSG identifiers are present in the database and can be used to specify a CRS in QGIS.

一個查詢EPSG code的網(wǎng)站 epsg.io

pyproj小試牛刀

pyproj是PROJ4的python接口封裝谦趣,直接看一個官網(wǎng)的例子吧疲吸。直接利用epsg code來定義投影參數(shù)。

from pyproj import Proj,transform

# The Proj class can convert from geographic (longitude,latitude)
# to native map projection (x,y) coordinates and vice versa, 
# or from one map projection coordinate system directly to another.

p1 = Proj(init='epsg:26915')
p2 = Proj(init='epsg:26715')
x1, y1 = p1(-92.199881,38.56694)
x2, y2 = transform(p1,p2,x1,y1)
print '%9.3f %11.3f' % (x1,y1)
print '%9.3f %11.3f' % (x2,y2)

輸出為

569704.566 4269024.671
569722.342 4268814.027

基于geopandas的矢量地圖投影

import shapely, geopandas, fiona
import seaborn as sns
from fiona.crs import from_epsg,from_string

# Data
shp = 'E:\NationalGISdata\Province.shp'

shp_df = geopandas.GeoDataFrame.from_file(shp)
# #IndexError報錯的話前鹅,用arcgis將shapefile文件重新導出一遍試試
shp_df.head()
# 根據(jù)當前的蘭伯特投影繪制
shp_df.plot(column="GDP_1994",colormap='Set1')
# 轉(zhuǎn)換到經(jīng)緯度坐標
shp_df_wgs84 = shp_df.to_crs(from_epsg(4326))
shp_df_wgs84.plot(column="GDP_1994",colormap='Set1')
# 國家2000坐標系
# EPSG:4508  CGCS2000 / Gauss-Kruger CM 111E
shp_df_4508 = shp_df.to_crs(from_epsg(4508))
shp_df_4508.plot(column="GDP_1994",colormap='Set1')
# 除了直接用ESPG code摘悴,也可以自己定義投影參數(shù)

ESRI_54024 = """
+proj=bonne +lon_0=0 +lat_1=60 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs 

shp_df_3408 = shp_df.to_crs(from_string(ESRI_54024))
shp_df_3408.plot(column="GDP_1994",colormap='Set1')

代碼和矢量地圖數(shù)據(jù)下載

百度網(wǎng)盤下載地址: http://pan.baidu.com/s/1c1BExH2
密碼請在關注微信公眾號stdrei后,輸入projection直接獲取舰绘。

拓展:同一個世界蹂喻,不同的面孔

鏈接 http://www.viewsoftheworld.net/?p=752
在不同投影下的這個世界。捂寿。口四。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市秦陋,隨后出現(xiàn)的幾起案子蔓彩,更是在濱河造成了極大的恐慌,老刑警劉巖踱侣,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粪小,死亡現(xiàn)場離奇詭異大磺,居然都是意外死亡抡句,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門杠愧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來待榔,“玉大人,你說我怎么就攤上這事流济∪衤啵” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵绳瘟,是天一觀的道長雕憔。 經(jīng)常有香客問我,道長糖声,這世上最難降的妖魔是什么斤彼? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任分瘦,我火速辦了婚禮,結(jié)果婚禮上琉苇,老公的妹妹穿的比我還像新娘嘲玫。我一直安慰自己,他們只是感情好并扇,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布去团。 她就那樣靜靜地躺著,像睡著了一般穷蛹。 火紅的嫁衣襯著肌膚如雪土陪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天肴熏,我揣著相機與錄音旺坠,去河邊找鬼。 笑死扮超,一個胖子當著我的面吹牛取刃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播出刷,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼璧疗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了馁龟?” 一聲冷哼從身側(cè)響起崩侠,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坷檩,沒想到半個月后却音,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酷愧,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡瓷们,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年芜赌,在試婚紗的時候發(fā)現(xiàn)自己被綠了袄简。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漾狼。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡柬焕,死狀恐怖竞慢,靈堂內(nèi)的尸體忽然破棺而出汤纸,到底是詐尸還是另有隱情胰锌,我是刑警寧澤骗绕,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站资昧,受9級特大地震影響酬土,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜格带,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一撤缴、第九天 我趴在偏房一處隱蔽的房頂上張望东揣。 院中可真熱鬧,春花似錦腹泌、人聲如沸嘶卧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芥吟。三九已至,卻和暖如春专甩,著一層夾襖步出監(jiān)牢的瞬間钟鸵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工涤躲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留棺耍,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓种樱,卻偏偏與公主長得像蒙袍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嫩挤,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容