使用pyproj和Proj.4将X,Y坐标转换为纬度/经度会返回错误的坐标


10

我正在编写一个python脚本,该脚本读取包含x和y坐标的多个XML文件,并将它们全部合并为一个csv文件。纬度和经度是csv中的必填字段,但我很难将俄亥俄州北州飞机usFt中的x,y坐标转换为WGS84。

>>> p = Proj(r'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs') #Nad83 State Plane Ohio North US Feet Proj object using parameters
>>> p(739400.91,2339327.3,inverse=True)
(-80.138057868777224, 60.278230707978487)
>>> p1 = Proj(init="epsg:3734") #Nad83 State Plane Ohio North US Feet Proj object using EPSG code
>>> p1(739400.91,2339327.3,inverse=True)
(-80.138057868777224, 60.278230707978487)

上面的两种方法都返回相同的结果,但是这很长一段时间都位于哈德逊湾中。当我在ArcMap中绘制坐标时,正确的纬度为:-81.142311,41.688205。

*请注意,所有纬度均以经纬度提供,因为这是Proj使用的顺序

有谁知道为什么我会从Proj.4和pyproj中得到错误的坐标?

Answers:


8

当我运行gdaltransformproj.4工具时,得到的结果与@geographika相同cs2cs

$ gdaltransform -s_srs EPSG:3734 -t_srs EPSG:4326
739400.9 2339327.3             
-87.3195485720169 45.9860670658218 0

cs2cs +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs +to +proj=lonlat +datum=WGS84
739400.9 2339327.3
87d19'10.375"W 45d59'9.841"N 0.000

但是,反转点的x和y坐标会得到在ArcMap中看到的结果:

gdaltransform -s_srs EPSG:3734 -t_srs EPSG:4326
2339327.3 739400.9
-81.1423086719059 41.6882035384526 0

因此,您需要进行视觉检查,以确保您的x和y坐标正确。这是我过去遇到的一个问题,当您得到两个非常相似的结果时,会将其归结为舍入错误或其他原因。


19

PyProj假定您的坐标以米为单位。我猜可能是与英尺/米有关的问题。

使用参数lon调用Proj类实例lat会将lon / lat(以度为单位)转换为x / y本机地图投影坐标(以米为单位)

如果可选关键字'preserve_units'为True,则不会强制地图投影坐标中的单位为米。

http://pyproj.googlecode.com/svn/trunk/docs/pyproj.Proj-class.html

您的初始坐标是英尺吗?将数据加载到ArcMap时,地图使用什么单位?

这使坐标更接近:

p1 = Proj(init="epsg:3734")
#1 foot = 0.3048 meters
conv = 0.3048
print p1(739400.91 * conv,2339327.3 * conv,inverse=True)
(-87.3195533069909, 45.98605408134072)

在这里可以找到类似的问题。


非常感谢你。尽管save_units参数确实可以解决问题,但坐标仍然不正确。@MerseyViking这个答案给了我正确的坐标。我希望我可以将两个答案都标记为答案,因为它们都有帮助。
布莱恩(Brian)

好吧,如果人们对@geographika的回答的支持超过我的回答,那么一切都会成功:)很高兴所有这些都奏效了。
MerseyViking,2011年

由于链接已断开,因此可能可以帮助您显示以下内容:p1 = Proj( init="epsg:3734", preserve_units=True )
BenjaminGolder 2014年

4

我实际上是在尝试做同样的事情,除了使用OH南州平面网格外,我遇到了您的问题。3735我得到了错误的结果,现在3729我得到了正确的结果。我希望如果您将3734更改为3728,您将得到正确的结果。

EPSG:3728:NAD83(NSRS2007)/俄亥俄州北(ftUS)EPSG:3729:NAD83(NSRS2007)/俄亥俄州南(ftUS)EPSG:3734:NAD83 /俄亥俄州北(ftUS)EPSG:3735:NAD83 /俄亥俄州南(ftUS)

我用了您提供的纬度,很长,距离不到一英尺。

p2 = pyproj.Proj(init =“ epsg:3728”,serve_units = True)

p2(-81.142311,41.688205)

(2339326.6558868014,739401.4226131936)

vs 2339327.3,739400.91

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.