簡體   English   中英

使用pyproj協調轉換

[英]coordinates conversion with pyproj

我沒有進行gis坐標轉換的經驗,但是可以使用以下頁面進行管理: http ://all-geo.org/volcan01010/2012/11/change-coordinates-with-pyproj/將shapefile坐標從EPSG:28992轉換為EPSG: 4326使用python模塊pyproj使用以下語句:

wgs84=pyproj.Proj("+init=EPSG:4326")
epsg28992=pyproj.Proj("+init=EPSG:28992")
pyproj.transform(epsg28992, wgs84,x,y)

當我反轉並在Google地圖中輸入這些坐標時,它們會為我提供正確的位置。 所以這很好。

現在,我有了另一個shapefile,然后查看shapefile.prj文件來確定使用了哪種投影。 ESRI WKT與我在這里找到的ESRI:102686相對應: http ://epsg.io/102686由於pyproj不知道ESRI:102686代碼(給出錯誤),因此我必須使用從同一個獲得的proj4表示法網站( http://epsg.io/102686 ):

wgs84=pyproj.Proj("+init=EPSG:4326") 
esri102686=pyproj.Proj("+proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000.0000000001 +datum=NAD83 +units=us-ft +no_defs")
pyproj.transform(esri102686, wgs84,x,y)

我得到例如坐標,並在谷歌地圖中使用它們:60.275122729462495,-61.873986125999316在海洋中的某個地方...

但是我的結果應該是在美國馬薩諸塞州的劍橋市,所以大約是:41.00000,-71,5000000

我究竟做錯了什么?

已解決,添加了preserve_units = True ,如下所示:

esri102686 = pyproj.Proj("+proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333                +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000.0000000001 +datum=NAD83 +units=us-ft     +no_defs",preserve_units= True)

現在工作正常。 如果可選關鍵字'preserve_units'為True,則不會強制地圖投影坐標中的單位為米。 這里

推薦使用pyproj 2.x的方法:

>>> import pyproj
>>> pyproj.__version__
'2.2.0'
>>> from pyproj import Transformer
>>> transformer = Transformer.from_crs("ESRI:102686", "EPSG:4326")
>>> transformer
<Concatenated Operation Transformer: pipeline>
Inverse of NAD_1983_StatePlane_Massachusetts_Mainland_FIPS_2001_Feet + NAD83 to WGS 84 (1)
>>> transformer.transform(794207.7467209417, 2461029.5953208264)
(40.999999999999844, -71.0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM