用pyproj协调转换

mus*_*ons 5 python gis shapefile

我没有经验的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)
Run Code Online (Sandbox Code Playgroud)

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

现在我有另一个shapefile,我查看shapefile.prj文件以确定使用了什么样的投影.ESRI WKT对应ESRI:102686,我在这里找到: http ://epsg.io/102686由于ESI:102686代码不知道pyproj(给出错误),我必须使用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)
Run Code Online (Sandbox Code Playgroud)

我得到了例如坐标并在谷歌地图中使用这些:60.275122729462495,-61.873986125999316这是在海洋的某个地方......

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

我究竟做错了什么?

mus*_*ons 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)
Run Code Online (Sandbox Code Playgroud)

现在它工作正常.如果可选关键字"preserve_units"为True,则地图投影坐标中的单位不会被强制为米.看到这里.