我对R中的编程非常陌生,我正在尝试从SpatialLinesDataFrame中绘制数据。绘制所有数据就像说maven-war-plugin
一样简单,但我想做的是在特定点附近绘制数据的小部分。
数据看起来像这样:
plot(my.SpatialDataFrame)
每个Line对象中都有任意数量的坐标。我一直试图做的是使用像 [[2]]
An object of class "Lines"
Slot "Lines":
[[1]]
An object of class "Line"
Slot "coords":
[,1][,2]
[1,] x y
[2,] x y
[3,] x y
[4,] x y
[5,] x y
Slot "ID":
[1] "1"
[[3]]
An object of class "Lines"
Slot "Lines":
[[1]]
An object of class "Line"
Slot "coords":
[,1][,2]
[1,] x y
[2,] x y
[3,] x y
[4,] x y
Slot "ID":
[1] "2"
这样的矢量化操作来识别哪些线开始接近我选择的某个坐标,并从空间数据框中删除不这样做的对象。但是我无法让它工作,因为我正在努力成为R语法和特别是SpatialLinesDataFrame的新手。我的方法是否正确?我将如何实施它?我也尝试过使用apply和lapply,但那些似乎不会起作用。
如果我需要提供任何其他信息,请与我们联系。
答案 0 :(得分:2)
正如保罗上面提到的,我能够通过创建一个矩形的SpatialPolygon来实现这一点,并且使用gIntersection
包中的rgeos
函数,我只能获得所需矩形内的点。
#libraries
library(sp) #for the spatialLinesDataFrame class
library(rgeos) #for the gIntersection function
# WGS84 long/lat coordinate system
wgs.84 <- "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"
#create the bounding box based on the dimensions required
spatialBoundingBox <- SpatialPolygons( list( Polygons( list( Polygon( rbind( c( minX, minY), c( maxX, minY), c( maxX, maxY), c(minX , maxY)), hole = FALSE)), ID = c('1'))), proj4string = CRS( wgs.84))
#calculate the intersection of the bounding box and the data - this will return the same type as my.data
my.data.subset <- gIntersection(spatialBoundingBox, my.data)
#plot the original data and the subset on the same plot showing the difference
plot(my.data)
lines(my.data.subset, col="green")