1

我有一个数据框,其中包含韩国首尔(首都)空气中 PM10 的浓度。请看一下。我想从这个数据集中绘制半变异函数。由于这里的 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 值转换为某个较大的值!这些值的含义是什么?米/公里或类似的东西?在上面的代码中,北意味着什么?北半球?

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

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

4

1 回答 1

0

(仅供参考:在单个 SO 帖子中 3 个问题通常是不好的形式)

Q1:你实际上并没有在第一个操作块中“投射”任何东西。您从普通数据框中创建了一个“空间”对象,并“说明”了它所在的坐标参考系 (CRS)。您也准确地做到了这一点,因为您只有纬度/经度值。做一个str(seoul3112)看看SpatialPointsDataFrame你最终创建的结构。

Q2:您实际上确实将坐标“投影”到了通用横轴墨卡托 (UTM) CRS。UTM 网格坐标表示为以米为单位的向东距离,称为“东距”,以及以米为单位的距离,称为“北距”。

Q3:您应该查看建议的“官方”政府投影建议,但您可能会摆脱类似韩国的方位角等距的东西(并且它支持 inmapproject因此很容易使用 in 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 包可以帮助半变异函数模型的开发和计算(和绘图)。

于 2015-07-27T11:41:13.483 回答