问题是在 R 中投影 LON/LAT 数据

Problems is projecting LON/LAT data in R

我有一个数据框包含韩国首尔(首都)空气中的 PM10 浓度。 Please, take a look. 我想根据这个数据集绘制半变异函数。由于这里的 LAT/LON 数据是度数,所以我投影了这些数据。我以这种方式预测数据:

library(rgdal)

seoul3112 <- read.csv("seoul3112.csv", row.name=1)
seoul3112 <- na.omit(seoul3112)

coordinates(seoul3112) <- ~LON+LAT
proj4string(seoul3112) <- "+proj=longlat +datum=WGS84"

seoul3112

投射后得到seoul311如下图

        coordinates PM10
1    (126.976, 37.56464)   42
2    (127.005, 37.57203)   37
3   (127.0051, 37.54031)   46
4   (127.0957, 37.54464)   47
5   (127.0411, 37.54311)   46

Q1:我发现在投影后,LON/LAT 的值与之前的数据帧显示的值几乎相同。我的问题是这个 proj4string(seoul311) = "+proj=longlat +datum=WGS84" 命令的实际功能是什么。这里,LON/LAT(degree) 转成km/m之类的?

我尝试使用 rgdal 包编写另一个代码,如下所示:

proj4string(seoul3112) <- "+proj=longlat +datum=WGS84" 
seoul3112 <- spTransform(seoul3112, 
                         CRS("+proj=utm +north +zone=52 +datum=WGS84"))
seoul3112

投影后得到seoul3112如下图

       coordinates     ID       time PM10
12      (321241, 4159438) 111121 2012030112   68
173   (323824.6, 4160203) 111123 2012030112   64
334   (323754.6, 4156684) 111131 2012030112   67
495   (331771.9, 4156998) 111141 2012030112   65
656   (326946.2, 4156927) 111142 2012030112   69

Q2。在这里我可以看到 LON/LAT 值转换为一些大值!这些值的含义是什么? m/km 之类的?在上面的代码中,北方意味着什么?北半球?

Q3。正如我之前提到的,我想绘制韩国首尔(utm 52 区)的半变异函数。那么,我应该使用哪种投影规则?我应该考虑utm区吗?我什么时候应该考虑 utm 区?

我对投影数据有很多困惑。你能详细回答我的三个问题吗?

(仅供参考:在单个 SO 中包含 3 个问题通常是错误的形式 post)

Q1:您在第一个操作块中实际上没有 "project" 任何内容。您从一个普通数据框和 "stated" 它所在的坐标参考系统 (CRS) 创建了一个 "spatial" 对象。您也准确地做到了这一点,因为您只有 lat/lon 个值。执行 str(seoul3112) 查看您最终创建的 SpatialPointsDataFrame 的结构。

Q2:您实际上做了 "project" Universal Transverse Mercator (UTM) CRS 的坐标。 UTM 网格坐标表示为向东以米为单位的距离,称为 "easting",向北以米为单位的距离,称为 "northing"。

问题 3:您应该检查建议的 "official" 政府投影建议,但您可能可以摆脱诸如韩国等距方位角之类的东西(它在 mapproject 中得到支持,因此很容易在 ggplot):

中工作
library(ggplot2)
library(ggthemes)
library(mapdata)

seoul3112 <- read.csv("seoul3112.csv", row.name=1)
seoul3112 <- na.omit(seoul3112)

sk <- map_data("worldHires", "South Korea")

gg <- ggplot()
gg <- gg + geom_map(data=sk, map=sk,
                    aes(x=long, y=lat, map_id=region),
                    color="black", fill="white", size=0.25)
gg <- gg + geom_point(data=seoul3112, aes(x=LON, y=LAT))
gg <- gg + coord_map("azequidistant")
gg <- gg + theme_map()
gg

如您所见,根据投影(mapproject 仅支持 41)ggplot 可以减轻先投影点的需要。

但是,你正在计算半变异函数,所以如果你想以米为单位工作,你可以这样做:

coordinates(seoul3112) <- ~LON+LAT
proj4string(seoul3112) <- "+proj=longlat +datum=WGS84"
seoul3112_utm <- spTransform(seoul3112, 
                             CRS("+proj=utm +north +zone=52 +datum=WGS84"))

proj_3112 <- as.data.frame(coordinates(seoul3112_utm))
proj_3112 <- cbind.data.frame(proj_3112, seoul3112_utm@data)

然后计算距离(我在这里假设很多):

dists <- dist(proj_3112[,1:2])

然后完成你的模型。 nlmegeoR 和其他一些 R 包可以帮助开发和计算半变异函数模型(和绘图)。