更改已包含在SpatialPointsDataFrame格式中的对象的坐标值

时间:2014-05-14 06:50:13

标签: r geospatial spatial

我必须沿着一个蜿蜒曲折的特征来克服价值。因此,我必须将正常的笛卡尔坐标(x,y)转换为曲线坐标系(s,n)。曲线坐标允许我krig和krig之后,我可以将坐标反转为笛卡尔x,y,因此表示原始几何。有关可重现的示例,请使用meuse数据集和sp包。

data(meuse)
meuse$s<-meuse$x           # Assuming that s is the curvilinear transformed coordinate from the orginal x cartessian coordinate
meuse$n<-meuse$y           # Assuming that n is the curvilinear transformed coordinate from the orginal y cartessian coordinate
coordinates(meuse) <- ~s+n # Using the curvilinear coordinates to do the krigging
proj4string(meuse) <- nl.rd # projection not defined, so just used a random example

## load grid:

data(meuse.grid)
meuse.grid$XX<-meuse.grid$x+105  # Fake transformation value to give original X
meuse.grid$YY<-meuse.grid$y-77  # Fake transformation value to give original Y
meuse.grid$s <-meuse.grid$x     # Assuming that s is the curvilinear transformed coordinate from the orginal x cartessian coordinate
meuse.grid$n <-meuse.grid$y # Assuming that n is the curvilinear transformed coordinate from the orginal y cartessian coordinate
coordinates(meuse.grid) <- ~s+n
gridded(meuse.grid) <- TRUE

## A simple inverse distance krig
zinc.id <- krige(zinc~1, meuse, meuse.grid)
meuse.grid$zinc.id <- zinc.id$var1.pred
str(meuse.grid)

鉴于期望的krig存储在meuse.grid但是有s,n坐标,我想使用x,y卡特尔坐标来查看最终结果(将s,n转换为x,y被假定为完全等于x,y到s,n)。如果meuse.grid已经是SpatialPointsDataFrame,我可以,如果是这样,我怎么能够将网格中的(s,n)值替换为(XX,YY)。

1 个答案:

答案 0 :(得分:3)

要访问SpatialPointsDataFrame中的原始数字,只需使用as.data.frame将其投放到data.frame

> head(as.data.frame(meuse.grid))
       x      y part.a part.b      dist soil ffreq     XX     YY  zinc.id
1 181180 333740      1      0 0.0000000    1     1 181285 333663 633.6864
2 181140 333700      1      0 0.0000000    1     1 181245 333623 712.5450
3 181180 333700      1      0 0.0122243    1     1 181285 333623 654.1617
4 181220 333700      1      0 0.0434678    1     1 181325 333623 604.4422
5 181100 333660      1      0 0.0000000    1     1 181205 333583 857.2558
6 181140 333660      1      0 0.0122243    1     1 181245 333583 755.5061
       s      n
1 181180 333740
2 181140 333700
3 181180 333700
4 181220 333700
5 181100 333660
6 181140 333660

现在您可以将坐标更改为正确的值。之后,您可以再次使用coordinates将对象更改回SpatialPointDataFrame进行绘图。