繁体   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