更改或替换SpatialLinesDataFrame的坐标

时间:2015-03-27 22:15:08

标签: r

我有一些在ArcGIS中创建的shapefile,用于我在R中进行的一些映射工作。我使用readOGR将shapefile带入R但是遇到了一个与其他坐标不同的坐标有问题

我已将对象命名为" core"它是一个SpatialLinesDataFrame,结构为:

> str(core)
Formal class 'SpatialLinesDataFrame' [package "sp"] with 4 slots
..@ data       :'data.frame':   1 obs. of  3 variables:
.. ..$ Id      : int 0
.. ..$ CONTOUR : num 39282
.. ..$ ISOPLETH: num 0.5
..@ lines      :List of 1
.. ..$ :Formal class 'Lines' [package "sp"] with 2 slots
.. .. .. ..@ Lines:List of 1
.. .. .. .. ..$ :Formal class 'Line' [package "sp"] with 1 slot
.. .. .. .. .. .. ..@ coords: num [1:47, 1:2] 243 243 243 243 243 ...
.. .. .. ..@ ID   : chr "0"
..@ bbox       : num [1:2, 1:2] 239.3 31.4 243.4 34.8
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:2] "x" "y"
.. .. ..$ : chr [1:2] "min" "max"
..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slot
.. .. ..@ projargs: chr "+proj=longlat +ellps=WGS84 +datum=WGS84 +towgs84=0,0,0"

我的问题是这个对象的坐标格式与我的地图(和我的其他shapefile)的格式不同。我的地图的经度是,例如-125.1,-125.4等。而"核心"的坐标。是243.1,243.5等我已经成功地从" core"中取出了所有坐标。并从它们中减去360,这为它们提供了适当的值,使我的地图与此代码匹配:

negs <- as.matrix(coordinates(core[1,])[[1]][[1]])
negs[,1] <- (negs[,1])-360

但是,我似乎无法简单地覆盖&#34;核心&#34;的原始坐标。使用这样的东西:

coordinates(core) <- negs

还有其他方法可以改变&#34; core&#34;的坐标。这样它可以用我的其他shapefile绘制吗?

抱歉不包括可重复的数据集,但我不确定如何在这里共享shapefile。

如果它有助于未转换的&#34;核心&#34;是:

> coordinates(core)
[[1]]
[[1]][[1]]
      [,1]     [,2]
[1,] 243.3805 31.91768
[2,] 243.4178 31.97442
[3,] 243.4289 32.62201
[4,] 243.4422 32.66768
[5,] 243.4256 32.71663
[6,] 243.2984 33.24151
[7,] 243.2184 33.41768
[8,] 243.0326 33.72568
[9,] 242.7246 33.90682
[10,] 242.4953 33.93843
[11,] 242.1447 33.99751
[12,] 241.9746 34.02227
[13,] 241.8334 34.02653
[14,] 241.6953 34.16768
[15,] 241.4555 34.39860
[16,] 241.2246 34.51035
[17,] 240.9792 34.67234
[18,] 240.6061 34.78613
[19,] 240.4746 34.84237
[20,] 240.3618 34.80495
[21,] 239.8966 34.74563
[22,] 239.7246 34.63816
[23,] 239.4505 34.44177
[24,] 239.2847 34.16768
[25,] 239.3818 33.82493
[26,] 239.7245 33.41769
[27,] 239.7246 33.41768
[28,] 239.7246 33.41767
[29,] 239.7246 33.41767
[30,] 239.7246 33.41767
[31,] 240.1623 33.10541
[32,] 240.4746 33.01726
[33,] 240.8026 32.99571
[34,] 240.9357 32.95650
[35,] 241.2246 32.92716
[36,] 241.3303 32.77337
[37,] 241.3518 32.66768
[38,] 241.4826 32.40961
[39,] 241.5369 32.23003
[40,] 241.9203 31.91768
[41,] 241.9404 31.88350
[42,] 241.9746 31.86257
[43,] 242.2367 31.65557
[44,] 242.3589 31.55204
[45,] 242.7246 31.38663
[46,] 243.0942 31.54808
[47,] 243.3805 31.91768

1 个答案:

答案 0 :(得分:0)

为了使这个问题对其他人有用,我会发布我在这里提出的答案。

困难在于正确访问然后替换SpatialLinesDataFrame的坐标。首先,我需要将坐标从“核心”中拉出来作为矩阵并将它们分配给一个新的对象,这个对象可以像我之前那样进行编辑:

negs <- as.matrix(coordinates(core[1,])[[1]][[1]])

要将经度值从360度格式更改为180,-180格式,我的其他形状文件只需要一个简单的减法就可以了:

negs[,1] <- (negs[,1])-360

最后,让我难过的步骤是将这些新的更正坐标重新分配回原始的SpatialLinesDataFrame:

core@lines[[1]]@Lines[[1]]@coords[] <- negs

我希望能够帮助其他人改变R中的shapefile的坐标。