我没有使用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)
当我反转并在Google map 中输入这些坐标时,它们会为我提供正确的位置。所以这很好。
现在,我有了另一个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)
我得到例如协调并在Google map 中使用它们:
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,则不会强制 map 投影坐标中的单位为米。参见here。
关于python - 协调与pyproj的转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26452972/