用pyproj协调转换

时间:2014-10-19 16:56:05

标签: python gis shapefile

我对gis坐标转换没有经验,但使用此页面进行了管理: http://all-geo.org/volcan01010/2012/11/change-coordinates-with-pyproj/ 使用python模块pyproj将shapefile坐标从EPSG:28992转换为EPSG:4326:

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

当我反向并在谷歌地图中输入这些坐标时,它们会给我正确的位置。所以这很好。

现在我有另一个shapefile,我查看shapefile.prj文件以确定使用了哪个投影。 ESRI WKT对应ESRI:102686,我在这里找到: http://epsg.io/102686 由于pyproj不知道ESRI:102686代码(给出错误),我必须使用从同一站点(http://epsg.io/102686)得到的proj4表示法:

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 这是在海洋的某个地方...

但我的结果应该是在美国的剑桥,MA,所以更多的是: 41.00000,-71,5000000

我做错了什么?

2 个答案:

答案 0 :(得分:5)

已解决,添加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,则地图投影坐标中的单位不会被强制为米。见here

答案 1 :(得分:0)

推荐使用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)