r-将UTM转换为纬度和经度



我有以下数据:

EASTING NORTHING
1   535234  7528392
2   538091  7533652
3   540850  7549211
4   543208  7561915
5   552494  7579475
6   553310  7571159

我想将其从UTM坐标转换为Latitude和Longitude,并将它们存储在数据帧中。

扩展Grzegorz Sapijaszko答案。正如他所指出的,有60个UTM区域。它们有6度宽,你的数据所在的区域可以像这样估计经度:

lon <- 5
ceiling((lon + 180) / 6)
#[1] 31

如果这是你的区域(看看这里,它比上面的公式复杂一点(,你的坐标参考系将是"+proj=utm +zone=31",你可以将其设置为你的数据(这里是terra(

library(terra)
crs <- "+proj=utm +zone=31"
p1 <- vect(df, geom=c("EASTING", "NORTHING"), crs=crs)
p1
# class       : SpatVector 
# geometry    : points 
# dimensions  : 6, 0  (geometries, attributes)
# extent      : 535234, 553310, 7528392, 7579475  (xmin, xmax, ymin, ymax)
# coord. ref. : +proj=utm +zone=31 +datum=WGS84 +units=m +no_defs 

然后投影到lon/lat,并在该区域的数据上绘图,看看它是否正确

p2 <- project(p1, "+proj=longlat")
#plot(x)
#points(p2)

关于数据,您必须了解的是当前坐标系。请注意,有60个UTM区域。还有很多其他的系统,都是公制(你的数据表明公制(。

Ad-rem:要从一个转换到另一个,你可以使用几种方法。您可以使用terrargdalsf软件包。请注意,我为您的数据选择了EPSG:3857,这可能是不正确的。

Lines <- 
"EASTING NORTHING
535234 7528392
538091 7533652
540850 7549211
543208 7561915
552494 7579475
553310 7571159"
df <- read.csv(textConnection(Lines), as.is = TRUE, header = TRUE, sep = " ")
library(sf)
#> Linking to GEOS 3.9.0, GDAL 3.2.2, PROJ 7.2.1; sf_use_s2() is TRUE
p1 <- st_as_sf(df, coords = c("EASTING", "NORTHING"), crs = "EPSG:3857")
p2 <- st_transform(p1, crs= "EPSG:4326")
p2
#> Simple feature collection with 6 features and 0 fields
#> Geometry type: POINT
#> Dimension:     XY
#> Bounding box:  xmin: 4.808089 ymin: 55.84889 xmax: 4.970468 ymax: 56.10564
#> Geodetic CRS:  WGS 84
#>                    geometry
#> 1 POINT (4.808089 55.84889)
#> 2  POINT (4.833754 55.8754)
#> 3 POINT (4.858538 55.95373)
#> 4  POINT (4.87972 56.01757)
#> 5 POINT (4.963138 56.10564)
#> 6 POINT (4.970468 56.06396)

创建于2022-01-24由reprex包(v2.0.1(

最新更新