这是一个 Golang 包,用于在地形测量 (OS) 网格参考和纬度/经度之间进行转换。 OS 网格参考传统上用于英国导航,而纬度/经度则用于 GPS 系统和全球地图系统。
这个包是 Chris Veness 优秀的 Javascript 库的 Golang 部分翻译。
gridRef , err := ParseOsGridRef ( "SW 46760 28548" )
if err != nil {
panic ( err )
}
lat , lon := gridRef . ToLatLon ()
fmt . Printf ( "%.4f,%.4f n " , lat , lon ) // 50.1029,-5.5428
pkg.go.dev 上有更详细的示例,或者在 Go Playground 中尝试一下。
自 1791 年以来,英国地形测量局一直在制作英国地图。他们使用与纬度和经度不同的国家网格系统,其中网格参考包含两个字母和一系列数字,例如“SK127836”。
操作系统网格参考在户外活动中无处不在 - 指南书使用它们来告诉您在哪里停车,远足路线使用它们,如果您遇到麻烦,当地的山地救援团队会想知道作为操作系统网格参考的位置。然而,操作系统网格仅适用于英国;大多数电子和全球地图系统都使用纬度和经度,例如此 Google 地图 URL。
因此有时需要在操作系统网格参考和纬度/经度参考之间进行转换。该 Golang 库可用于执行转换。
正常的、人类可读的表示是两个字母后跟两组数字,例如SZ 644 874
。这 2 个字母定义了 100 公里 x 100 公里的正方形,如右图所示。第一组数字是eastings
,第二组数字是northings
;这些数字定义了 100 平方公里内的坐标。
另一种表示法是省略网格字母并仅提供以逗号分隔的easting
和northing
。在这种情况下,这些坐标是相对于整个网格原点的坐标,即相对于网格的西南角的坐标。
英国地形测量局创建了一份包含完整详细信息的友好指南。
该库可以解析并显示这两种类型的表示形式。
它很难。非常非常困难。此类内容的页面:
(摘自英国地形测量局参考指南第 50 页)
幸运的是,Chris Veness 已经在他的 Javascript 库中完成了实现这一点的艰苦工作(它的作用不仅仅是将网格引用转换为纬度/经度)。这个包是相当机械地将 Javascript 翻译成 Golang,而不了解它是如何工作的。
我很高兴地说我不明白这背后的数学原理。
这是故意的,以便更容易地根据原始 Javascript 实现来验证此实现。如果可能,上游代码的每一行都应与 Golang 代码中的等效行匹配。