0
我遇到了一个小问题,我的for
循环运行了3.5小时+。我在SQL Server
有一个地理数据集,名为Shape
的字段,它存储数据类型为geometry
的坐标。首先,我通过ODBC
[R连接到我的数据库和检索我想要的信息(Shape
列也转换为可读)SpatialPointsDataFrame太慢运行FOR循环
library(sp)
library(rgeos)
library(RODBC)
ch<-odbcConnect("SpatialAnalysis", rows_at_time=1)
df<-sqlQuery(ch, "select OBJECTID, LOT_NO, Shape.STAsText() as WKT FROM SRC_PLI_QLD")
cnt<-sqlQuery(ch, "select count(OBJECTID) from SRC_PLI_QLD")
这有250万点。我现在将它们读入SpatialPointsDataFrame
,首先阅读第一个元素。
point.sp <- SpatialPointsDataFrame(readWKT(df$WKT[1]),
data=data.frame(OBJECTID=df$OBJECTID[1], LOT_NO=df$LOT_NO[1]))
现在我读了其余的元素。 这就是问题出在的地方。它已经3.5小时,仍在运行。
for (n in 2:as.integer(cnt)) {
point.sp <- rbind(point.sp,
SpatialPointsDataFrame(readWKT(df$WKT[n]),
data.frame(OBJECTID=df$OBJECTID[n], LOT_NO=df$LOT_NO[n])))
}
上述for
循环中出现什么问题?有另一种方法可以做到这一点吗?
您正在种植一个物体。 BIG no no。你不能一步到位吗? –
为什么你一次读一个点,即使用for循环?这不工作吗?:'points.sp < - SpatialPointsDataFrame(readWKT(df $ WKT),data.frame(OBJECTID = df $ OBJECTID,LOT_NO = df $ LOT_NO))) – shekeine
不,我不能这样做,因为SpatialPointsDataFrame一次只能读一个。 – MaxPD