慢R函数rgeos :: gWithin用于多边形分析中的点

问题描述

我有一个名为“ polygon”的shapefile和一个名为“ Points”的SpatialPointsDataFrame。 “点”包含60k +行,“多边形”是一个很大的shapefile,在大约30k km ^ 2的区域中稀疏了许多几何图形。 现在,我要在这种情况下在“点”中创建一个新列:如果点在多边形内,则如果不写“ B”,则写“ A”。

我正在尝试附加的脚本,但是我意识到rgeos::gWithin的运行速度过慢。 我还尝试了功能sp::over(但这不会返回True / False输出,并且我不知道如何实现目标)。

对于单行sp::over(Points[1],polygon)耗时7秒,而gWithin(Points[1],polygon)则耗时35秒:因此在整个数据帧上应用for循环将永远花费。

任何帮助将不胜感激。

# SpatialPointsDataframe from dataframe
Points <- dataframe
coordinates(Points) <- ~x+y
proj4string(Points) <- CRS("+init=epsg:32632")
Points <- spTransform(Points,CRS("+init=epsg:32632"))


# Loading the shapefile
polygon <- readOGR(dsn = "...",layer = "polygon")
polygon <-spTransform(polygon,CRS("+init=epsg:32632")) 


# Evaluating time taken applying function to a single row (~ 35 sec)
start.time <- Sys.time()

sp::over(Points[1],polygon)

end.time <- Sys.time()
Time.taken <- round(end.time -start.time,2)
Time.taken


# If I run a for-loop on 60k rows it wil take forever
for (i in seq_along(Points)){ 
  Points$new_column[i] <- ifelse(gWithin(Points[i],polygon),"A","B")
}

dataframe2 <- as.data.frame(Points)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)