利用pyproj將經(jīng)緯度投影為平面坐標(biāo)以及地理坐標(biāo)系背景知識(shí)解讀
代碼示例
import pyproj #定義投影坐標(biāo)系 proj = pyproj.Proj(proj='tmerc', lon_0=120, lat_0=15, preserve_units=False) #將經(jīng)緯度投影為平面坐標(biāo) print(proj(120, 15))#結(jié)果為(0.0, 0.0) #將平面坐標(biāo)反投影為經(jīng)緯度坐標(biāo) print(proj(0, 0, inverse=True))#結(jié)果為(119.99999999999999, 14.999999999999998)
背景知識(shí)
地球的三級(jí)逼近
地球的自然表面有高山也有洼地,是崎嶇不平的,我們要使用數(shù)學(xué)法則來(lái)描述他,就必須找到一個(gè)相對(duì)規(guī)則的數(shù)學(xué)面。
為此,通過(guò)大地水準(zhǔn)面 (geoid),參考橢球體(Reference ellipsoid),大地基準(zhǔn)面(Geodetic datum)實(shí)現(xiàn)對(duì)地球表面的三級(jí)逼近。
一級(jí)逼近:大地水準(zhǔn)面
大地水準(zhǔn)面是地球表面的第一級(jí)逼近。
假設(shè)當(dāng)海水處于完全靜止的平衡狀態(tài)時(shí),從海平面延伸到所有大陸下部,而與地球重力方向處處正交的一個(gè)連續(xù)、閉合的曲面,這就是大地水準(zhǔn)面。
二級(jí)逼近:參考橢球體
大地水準(zhǔn)面表面仍然是“高低起伏”的,但可以近似成一個(gè)規(guī)則橢球體,其形狀接近一個(gè)扁率極小的橢圓繞短軸旋轉(zhuǎn)所形成的規(guī)則橢球體,這個(gè)橢球體稱(chēng)為地球橢球體。
它是地球的第二級(jí)逼近。

參考橢球體(Reference ellipsoid)是一個(gè)數(shù)學(xué)上定義的地球表面,因?yàn)槭菐缀文P?,可以?strong>長(zhǎng)半軸、短半軸和扁率來(lái)確定。
一方面,我們對(duì)地球形狀的測(cè)量隨著時(shí)間遷移而不斷精確,另一方面,因?yàn)榇蟮厮疁?zhǔn)面并不規(guī)則,地球上不同地區(qū)往往需要使用不同的參考橢球體,來(lái)盡可能適合當(dāng)?shù)氐拇蟮厮疁?zhǔn)面。
比較有名的參考橢球體包括克拉索夫斯基(Krasovsky)參考橢球,WGS-84參考橢球等。
三級(jí)逼近:大地基準(zhǔn)面
由于參考橢球體是對(duì)地球的抽象,因此其并不能與地球表面完全重合,在設(shè)置參考橢球體的時(shí)候必然會(huì)出現(xiàn)有的地方貼近的好(參考橢球體與地球表面位置接近),有地地方貼近的不好的問(wèn)題,因此這里還需要一個(gè)大地基準(zhǔn)面來(lái)控制參考橢球和地球的相對(duì)位置。
這是地球表面的第三級(jí)逼近。

有以下兩類(lèi)基準(zhǔn)面:
- 地心基準(zhǔn)面:由衛(wèi)星數(shù)據(jù)得到,使用地球的質(zhì)心作為原點(diǎn),使用最廣泛的是 WGS1984基準(zhǔn)面。
- 區(qū)域基準(zhǔn)面(參心基準(zhǔn)面):特定區(qū)域內(nèi)與地球表面吻合,大地原點(diǎn)是參考橢球與大地水準(zhǔn)面相切的點(diǎn),例如Beijing54、Xian80。我們通常稱(chēng)謂的Beijing54、Xian80坐標(biāo)系實(shí)際上指的是我國(guó)的兩個(gè)大地基準(zhǔn)面。
不同基準(zhǔn)面通過(guò)該基準(zhǔn)面向WGS1984基準(zhǔn)面的7個(gè)轉(zhuǎn)換參數(shù)來(lái)定義,轉(zhuǎn)換通過(guò)相似變換方法實(shí)現(xiàn),具體算法可參考科學(xué)出版社1999年出版的《城市地理信息系統(tǒng)標(biāo)準(zhǔn)化指南》第76至86頁(yè)。
假設(shè)Xg、Yg、Zg表示W(wǎng)GS84地心坐標(biāo)系的三坐標(biāo)軸,Xt、Yt、Zt表示當(dāng)?shù)刈鴺?biāo)系的三坐標(biāo)軸,那么自定義基準(zhǔn)面的7參數(shù)分別為:三個(gè)平移參數(shù)ΔX、ΔY、ΔZ表示兩坐標(biāo)原點(diǎn)的平移值;三個(gè)旋轉(zhuǎn)參數(shù)εx、εy、εz表示當(dāng)?shù)刈鴺?biāo)系旋轉(zhuǎn)至與地心坐標(biāo)系平行時(shí),分別繞Xt、Yt、Zt的旋轉(zhuǎn)角;最后是比例校正因子,用于調(diào)整橢球大小。
地理坐標(biāo)系
地理坐標(biāo)系包括天文坐標(biāo)系和大地坐標(biāo)系。大地坐標(biāo)系是與地球固連在一起的,與地球同步運(yùn)動(dòng),因而又稱(chēng)地固坐標(biāo)系。天文坐標(biāo)系是空間固定的坐標(biāo)系,與地球自轉(zhuǎn)無(wú)關(guān),成為慣性坐標(biāo)系或天球坐標(biāo)系,主要用于描述衛(wèi)星和地球的運(yùn)動(dòng)位置和狀態(tài)。這兩種坐標(biāo)系都又可分為空間直角坐標(biāo)系和經(jīng)緯度坐標(biāo)系。下面重點(diǎn)介紹大地坐標(biāo)系。
大地坐標(biāo)系是建立在基于參考橢球的大地基準(zhǔn)面上的,因此又分為參心坐標(biāo)系(建立在參心基準(zhǔn)面上)和地心坐標(biāo)系(建立在地心基準(zhǔn)面上),其經(jīng)緯高定義如下:
- 大地經(jīng)度:參考橢球面上某點(diǎn)的大地子午面與本初子午面(與參考橢球無(wú)關(guān))間的兩面角。東正西負(fù)。
- 大地緯度 :參考橢球面上某點(diǎn)的法線(xiàn)與赤道平面(與參考橢球無(wú)關(guān))的夾角。北正南負(fù)。
- 大地高: 指某點(diǎn)沿法線(xiàn)方向到參考橢球面的距離。
投影坐標(biāo)系
在地球橢球面和平面之間建立點(diǎn)與點(diǎn)之間函數(shù)關(guān)系的數(shù)學(xué)方法,稱(chēng)為地圖投影。
地球橢球表面是一種不可能展開(kāi)的曲面,要把這樣一個(gè)曲面表現(xiàn)到平面上,就會(huì)發(fā)生裂隙或褶皺。
在投影面上,可運(yùn)用經(jīng)緯線(xiàn)的“拉伸”或“壓縮”(通過(guò)數(shù)學(xué)手段)來(lái)加以避免,以便形成一幅完整的地圖,但不可避免會(huì)產(chǎn)生變形。
地圖投影的變形通常有:長(zhǎng)度變形、面積變形和角度變形。具體分類(lèi)如下:
按變形性質(zhì)分類(lèi):
- 等角投影:角度變形為零(Mercator)
- 等積投影:面積變形為零(Albers)
- 任意投影:長(zhǎng)度、角度和面積都存在變形
其中,各種變形相互聯(lián)系相互影響:等積與等角互斥,等積投影角度變形大,等角投影面積變形大。
從投影面類(lèi)型劃分:
- 橫圓柱投影:投影面為橫圓柱
- 圓錐投影:投影面為圓錐
- 方位投影:投影面為平面- 從投影面與地球位置關(guān)系劃分為:
- 正軸投影:投影面中心軸與地軸相互重合
- 斜軸投影:投影面中心軸與地軸斜向相交
- 橫軸投影:投影面中心軸與地軸相互垂直
- 相切投影:投影面與橢球體相切 - 相割投影:投影面與橢球體相割
具體的不同的投影變換可參考Projections
既然投影是在地球橢球面和平面之間建立點(diǎn)與點(diǎn)之間函數(shù)關(guān)系的數(shù)學(xué)方法,因此描述一個(gè)投影坐標(biāo)系(Projected coordinate systems)須包括對(duì)應(yīng)的大地坐標(biāo)系(基于大地基準(zhǔn)面)和投影方式及相關(guān)投影參數(shù)。
投影坐標(biāo)系可以理解為是一個(gè)二維地圖平面坐標(biāo)系,在該坐標(biāo)系下每個(gè)點(diǎn)都有一個(gè)對(duì)應(yīng)的XY坐標(biāo)和經(jīng)緯度坐標(biāo)。
主要的投影參數(shù)如下(不同的投影方式,投影參數(shù)一般不同):
標(biāo)準(zhǔn)線(xiàn)
- 概念:投影面與參考橢球的切線(xiàn)或割線(xiàn)。分為標(biāo)準(zhǔn)緯線(xiàn)與標(biāo)準(zhǔn)經(jīng)線(xiàn)。
- 特點(diǎn):沒(méi)有變形,也稱(chēng)主比例尺。
中心線(xiàn)
- 概念:是指中央經(jīng)線(xiàn)(原點(diǎn)經(jīng)線(xiàn))與中央緯線(xiàn)(原點(diǎn)緯線(xiàn)),用來(lái)定義圖投影的中心或者原點(diǎn)。
- 特點(diǎn):一般會(huì)有變形。 pyproj中的投影變換
在pyproj中Proj類(lèi)負(fù)責(zé)地圖投影變換(經(jīng)緯度->XY坐標(biāo))和逆變換(XY坐標(biāo)->經(jīng)緯度)。Proj類(lèi)主要由不同投影坐標(biāo)系的相關(guān)參數(shù)來(lái)初始化。
打印示例代碼
proj = pyproj.Proj(proj='tmerc', lon_0=120, lat_0=15, preserve_units=False)
中的proj或proj.crs,有:
In [4]: proj = pyproj.Proj(proj='tmerc', lon_0=120, lat_0=15, preserve_units=False)
In [5]: proj
Out[5]:
Proj('+proj=tmerc +lat_0=15 +lon_0=120 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs', preserve_units=True)
In [16]: proj.crs
Out[16]:
<Projected CRS: +proj=tmerc +lon_0=120 +lat_0=15 +type=crs>
Name: unknown
Axis Info [cartesian]:
- E[east]: Easting (metre)
- N[north]: Northing (metre)
Area of Use:
- undefined
Coordinate Operation:
- name: unknown
- method: Transverse Mercator
Datum: World Geodetic System 1984
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich可知該投影坐標(biāo)系的大地基準(zhǔn)面是WGS84,投影變換方式是’tmerc’(橫軸魔卡托投影)及其它的一些參數(shù)。
Proj類(lèi)初始化的主要參數(shù)如下表所示:
| Parameter | Description |
|---|---|
| +a | Semimajor radius of the ellipsoid axis |
| +axis | Axis orientation |
| +b | Semiminor radius of the ellipsoid axis |
| +ellps | Ellipsoid name (see pyproj.pj_ellps) |
| +k | Scaling factor (deprecated) |
| +k_0 | Scaling factor |
| +lat_0 | Latitude of origin |
| +lon_0 | Central meridian |
| +lon_wrap | Center longitude to use for wrapping |
| +over | Allow longitude output outside -180 to 180 range, disables wrapping (see below) |
| +pm | Alternate prime meridian (typically a city name) |
| +proj | Projection name (see pyproj.pj_list) |
| +units | meters, US survey feet, etc. |
| +vunits | vertical units. |
| +x_0 | False easting |
| +y_0 | False northing |
詳細(xì)信息可參考Cartographic projection
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實(shí)現(xiàn)破解猜數(shù)游戲算法示例
這篇文章主要介紹了Python實(shí)現(xiàn)破解猜數(shù)游戲算法,簡(jiǎn)單描述了猜數(shù)游戲的原理,并結(jié)合具體實(shí)例形式分析了Python破解猜數(shù)游戲的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-09-09
Python標(biāo)準(zhǔn)庫(kù)之itertools庫(kù)的使用方法
Python提供了一個(gè)非常棒的模塊用于創(chuàng)建自定義的迭代器,這個(gè)模塊就是 itertools。itertools 提供的工具相當(dāng)高效且節(jié)省內(nèi)存,下面這篇文章主要給大家介紹了關(guān)于Python標(biāo)準(zhǔn)庫(kù)之itertools庫(kù)使用的相關(guān)資料,需要的朋友可以參考下。2017-09-09
對(duì)Python3 * 和 ** 運(yùn)算符詳解
今天小編就為大家分享一篇對(duì)Python3 * 和 ** 運(yùn)算符詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
Python實(shí)現(xiàn)對(duì)比兩張圖片并標(biāo)記差異
這篇文章主要為大家詳細(xì)介紹了使用Python對(duì)比兩張CAD圖并標(biāo)記差異的解決方案,文中的示例代碼簡(jiǎn)潔易懂,具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下2025-04-04
Visual Studio code 配置Python開(kāi)發(fā)環(huán)境
這篇文章主要介紹了Visual Studio code 配置Python開(kāi)發(fā)環(huán)境,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
ubuntu16.04升級(jí)Python3.5到Python3.7的方法步驟
這篇文章主要介紹了ubuntu16.04升級(jí)Python3.5到Python3.7的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
如何在Win10系統(tǒng)使用Python3連接Hive
這篇文章主要介紹了如何在Win10系統(tǒng)使用Python3連接Hive,幫助大家更好的利用python讀取數(shù)據(jù),進(jìn)行探索、分析和挖掘工作。感興趣的朋友可以了解下2020-10-10

