Python 用pyproj进行坐标转换

Python 用pyproj进行坐标转换,python,gis,shapefile,Python,Gis,Shapefile,我在gis坐标转换方面没有经验,但使用以下页面进行管理: 要使用python模块pyproj使用以下语句将形状文件坐标从EPSG:28992转换为EPSG:4326: wgs84=pyproj.Proj("+init=EPSG:4326") epsg28992=pyproj.Proj("+init=EPSG:28992") pyproj.transform(epsg28992, wgs84,x,y) 当我反转并在谷歌地图中输入这些坐标时,它们会给出正确的位置。所以这很有效 现在我有了另一个sh

我在gis坐标转换方面没有经验,但使用以下页面进行管理: 要使用python模块pyproj使用以下语句将形状文件坐标从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相对应,我在这里找到: 由于pyproj不知道ESRI:102686代码(给出错误),因此我必须使用从同一站点()获得的proj4表示法:

我获取坐标,并在谷歌地图中使用这些坐标: 60.275122729462495, -61.873986125999316 在海洋的某个地方

但我的研究结果应该在美国马萨诸塞州剑桥,所以更多的是: 41.00000,-715000000


我做错了什么?

解决了,添加了
preserve\u 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的推荐方法:

导入pyproj >>>pyproj.\uuuu版本__ '2.2.0' >>>从pyproj导入转换器 >>>变压器=来自crs的变压器(“ESRI:102686”,“EPSG:4326”) >>>变压器 NAD_1983_国家平面_马萨诸塞州_大陆_FIPS_2001_英尺+NAD83与WGS 84(1)的倒数 >>>变压器变换(794207.74672094172461029.5953208264) (40.999999999999844, -71.0)
万岁,这解决了我的问题!你知道为什么吗?我是从EPSG 2230转换过来的。如果可选关键字“preserve_units”为真,则地图投影坐标中的单位不必强制为米。发件人:
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)