如何从位置数据中删除轮廓

How can I remove outlines from location data

我有海洋物种的位置数据。但是,一些数据落在 Land 上,我想在不找到它们所属的行的情况下删除它们 using ( PS2<-PS1[-c(1,2,3),]) 因为我有一个大数据集。我一直在寻找线索,但真的找不到好东西。谢谢。

这是我的代码

        require(sp)
        library(maptools)
        require(raster)
        data(wrld_simpl)


        PS<-read.csv('Test.csv')
        PS
   #-----------------
                  lat        lon
1  -32.98000 154.000000
2   36.94625   8.212916
3  -37.81430 -57.479584
4  -19.77236 -40.019028
5  -25.70459 -48.473195
6  -22.47125 -41.859027
7  -28.08153 -48.627082
8   10.56000  39.090000
9   50.50000  50.600000
10  52.50000   5.700000

        PS1 <- subset(PS, !is.na(lon) & !is.na(lat))

        plot(wrld_simpl, bg='azure2', col='khaki', border='#AAAAAA')
        #restore the box around the map
        box()
        #plot points
        points(PS1$lon, PS1$lat, col='orange', pch=20, cex=0.75)
        # plot points again to add a border, for better visibility
        points(PS1$lon, PS1$lat, col='red', cex=0.75)

   The last three data fall on land.

这显示了如何使用 %over%(您也可以使用 over 函数

library(sp)
library(raster)
library(maptools)
data(wrld_simpl)

PS <- matrix( c(-32.98000, 154.000000, 36.94625, 8.212916,-37.81430, -57.479584,-19.77236, -40.019028,-25.70459, -48.473195,-22.47125, -41.859027,-28.08153, -48.627082, 10.56000,  39.090000,50.50000,  50.600000, 52.50000,   5.700000), ncol=2, byrow=TRUE)
ps <- PS[,2:1]

sp <- SpatialPoints(ps)
crs(sp) = crs(wrld_simpl)
i <- sp %over% wrld_simpl
marine <- is.na(i$ISO3)

spm <- sp[marine, ]

plot(wrld_simpl)
points(ps, pch=20, col='red')
points(spm, pch=20, col='blue')