WGS84坐标和HK80坐标之间的相互转换

HK80(Hong Kong 1980 Grid System)是香港的一种坐标系(EPSG:2326),一般用于地图绘制、工程勘测、树木调查等。不过,生态学研究中最常用的坐标系为WGS84(EPSG:4326),例如GPS一般就是直接给出WGS84的经纬度,Google Earth等也用WGS84坐标系。那么HK80坐标如何转换为WGS84坐标呢?

香港地政署测绘处给出了测量基准说明(https://www.geodetic.gov.hk/common/data/pdf/explanatorynotes_c.pdf), 其中有非常详细的转换公式。根据这些公式,本人曾于2014年编写了HK80 R程序包(https://cran.r-project.org/web/packages/HK80/index.html)。

近几年来,也有不少新工具诞生:例如,香港地政署测绘处的HK80坐标在线转换工具(https://www.geodetic.gov.hk/en/services/tform/tform.aspx )公开了API,该API可以根据用户在网址中传入的参数返回json数据。sf程序包也在proj程序包的基础上开发了st_transform函数,让不同坐标系之间的转换变得非常方便。也有人基于pyproj(https://pyproj4.github.io/pyproj/stable/#,https://proj.org/)开发了hk80 python程序包(https://pypi.org/project/hk80/)等。

本文给出在R中进行WGS84和HK80坐标相互转换的三种方法,其中首选为香港地政署的在线转换工具,但是由于服务器可能会有一定的限制,如果有大量数据需要准换,访问会较为频繁,用户IP可能受限。下载到本地的sf和HK80程序包就没有这些限制。sf和HK80的程序包的结果都是可靠的。相比之下,在sf中建立坐标点并进行转换批量转换更为方便。HK80程序包的结果可以作为参考。

地理坐标转换常涉及度、分、秒和十进制的转换,本文也给出两种方法,作为附录,以方便读者。

HK80GRID坐标转换为WGS84坐标

The HK80 R package

1
2
3
4
library(HK80)
HK1980GRID_TO_WGS84GEO(N = 820359.389, E = 832591.320)
## latitude longitude
## 1 22.32225 114.1412

The official online conversion tool

the Geodetic Survey Section, Lands Department, Hong Kong SAR Gov.

API example: http://www.geodetic.gov.hk/transform/v2/?inSys=hkgrid&e=832591.320&n=820359.389

1
2
3
4
5
6
7
8
library(jsonlite)data1 <- fromJSON(" 
names(data1)
## [1] "wgsLat" "wgsLong" "hkLat" "hkLong" "utmGridZone"
## [6] "utmGridE" "utmGridN" "utmRefZone" "utmRefE" "utmRefN"
data1$wgsLat
## [1] 22.32224
data1$wgsLong
## [1] 114.1412

The sf package

1
2
3
4
5
6
7
8
9
10
11
library(sf)
## Linking to GEOS 3.8.1, GDAL 3.1.1, PROJ 6.3.1
p1 = st_point(c(832591.320, 820359.389))
sfc = st_sfc(p1, crs = 2326)
(st_transform(sfc, 4326))
## Geometry set for 1 feature
## geometry type: POINT
## dimension: XY
## bbox: xmin: 114.1412 ymin: 22.32224 xmax: 114.1412 ymax: 22.32224
## geographic CRS: WGS 84
## POINT (114.1412 22.32224)

WGS84 坐标转换为HK80GRID坐标

The HK80 R package

1
2
3
4
library(HK80)
WGS84GEO_TO_HK1980GRID(latitude = 22.32224, longitude = 114.14118)
## N E
## 1 820358.7 832591.4

The official online conversion tool

from the Geodetic Survey Section, Lands Department, Hong Kong SAR Gov.

1
2
3
4
5
6
7
8
9
10
11
# Copy the following URL to browser
#
# {"hkN": 820358.910,"hkE": 832590.508,"hkpd": 26.009}
library(jsonlite)
data1 <- fromJSON("
names(data1)
## [1] "hkN" "hkE" "hkpd"
data1$hkN
## [1] 820358.9
data1$hkE
## [1] 832590.5

The sf package

1
2
3
4
5
6
7
8
9
10
library(sf)
p1 = st_point(c(114.14118, 22.32224))
sfc = st_sfc(p1, crs = 4326)
(ccc <- st_transform(sfc, 2326))
## Geometry set for 1 feature
## geometry type: POINT
## dimension: XY
## bbox: xmin: 832590.5 ymin: 820358.9 xmax: 832590.5 ymax: 820358.9
## projected CRS: Hong Kong 1980 Grid System
## POINT (832590.5 820358.9)

附录: 度、分、秒和十进制格式的相互转换

Using the sp package

1
2
3
4
5
6
7
8
9
10
11
library(sp)
dd2dms(114.14118)
# decimal to Degree, Minute, Second format
## [1] 114d8'28.248"E
as.numeric(dd2dms(114.14118))
#
## [1] 114.1412
char2dms("47d15'6.12\"E")
## [1] 47d15'6.12"E
as.numeric(char2dms("47d15'6.12\"E"))
## [1] 47.2517

Using the biogeo package

1
2
3
4
5
6
7
8
9
10
library(biogeo)
res <- dms2dd(47,15,6.12,"E") # ns letters (N,S,E,W)
print(res)
## [1] 47.2517
dd2dmslong(114.14118)
## xdeg xmin xsec EW
## 1 114 8 28.2 E
dd2dmslat(22.32224)
## ydeg ymin ysec NS
## 1 22 19 20.1 N

进一步阅读