将英国网格坐标(X,Y)转换为纬度和经度

4
我有一份用英国地理参考格式(X,Y)给出的位置坐标列表,我想把它们转换为纬度和经度。我正在使用OSGridConverter(Python库),但它没有正确地进行转换。例如,一个位置的输入是X=517393.6563和Y=194035.5469。
from OSGridConverter import grid2latlong
l=grid2latlong('TG 517393.6563 194035.5469')

上面的内容提示了一个错误:OSGridConverter 错误:无效的网格参考。

因此,我尝试修正它,但是还是有问题:

>>>l=grid2latlong('TG 517393 194035')
>>>(l.latitude,l.longitude)
(52.71367793063314, 1.7297510074170983)

最终位置在英国,这是不正确的。可能是由于数据格式问题,但我不确定如何解决。

2个回答

4

您可能需要使用类似于pyproj的工具:

import pyproj

crs_british = pyproj.Proj(init='EPSG:27700')
crs_wgs84 = pyproj.Proj(init='EPSG:4326')

long, lat = pyproj.transform(crs_british, crs_wgs84, 517393.6563, 194035.5469)
print(lat, long)

在您的情况下,这将给出:51.63289090467179,-0.3052119183057834。

1
这个程序可行,但ChatGPT错了,建议使用了错误的crs。 - A Rob4
@ARob4 很棒! ChatGPT还有很多需要学习的;) - Jop Knoppers

0
首先,一个定义: OS Grid Grid references (OSGGRs) 是指以两个字母的网格标识符为前缀的网格参考。详细解释可以在这里找到。
正如你所发现的,OSGGRs 不是浮点数。请参见上面的链接。
接下来,OSGGRs 的数字起点位于网格的西南角,这与 OSGB BNG 投影的起点非常不同(坐标为东向和北向)。请参见上面的链接以获得更好的解释。
你似乎将 BGGRs 数字部分视为东向/北向,这是不正确的。
因此,有了这些知识,我们可以使用 OSGridConverter 将 OSGGRs 转换为东向和北向,使用经纬度作为中介进行转换。但请注意 PyPI 包页面底部作者关于错误的评论。
import OSGridConverter
cvt_wgs84 =  OSGridConverter.grid2latlong('SN5117013189')
print(cvt_wgs84.latitude, cvt_wgs84.longitude)
51.79749210128498 -4.160451113839529

cvt_EN = OSGridConverter.latlong2grid(cvt_wgs84.latitude, cvt_wgs84.longitude)
print(cvt_EN.E,cvt_EN.N)
251116 213191

# Back to OSGGR, however, note the error of tens of meters.
str(cvt_EN)
'SN 51116 13191'

我对OSGGR坐标和纬度/经度之间的协议进行了快速的“肉眼”检查,并且误差以米为单位。这可能对某些人是可以接受的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接