SpatialPointsDataFrame 太慢 运行 FOR 循环

SpatialPointsDataFrame too slow running FOR loop

我 运行 遇到了一个小问题,我的 for 循环已 运行 超过 3.5 小时。我在 SQL Server 中有一个地理数据集,其中包含一个名为 Shape 的字段,该字段以 geometry 数据类型存储坐标。首先,我通过 ODBC 将 R 连接到我的数据库并检索我想要的信息(还将 Shape 列转换为可读的内容)

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 小时了,还在 运行ning。

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循环有什么问题?还有其他方法可以做到这一点吗?

我用另一种方法解决了这个问题,用了不到 10 秒。更改在查询中。我没有从 Shape 列中检索 Shape.STAsText() 作为 WKT 对象,而是从 Shape

中检索了 LatLong
df<-sqlQuery(ch, "select OBJECTID, LOT_NO, Shape.STY as Lat, Shape.STX as Lon FROM SRC_PLI_QLD")
cnt<-sqlQuery(ch, "select count(OBJECTID) from SRC_PLI_QLD")

然后我做了:

coordinates(df) =~Lat+Lon

并且我的数据框 df 已转换为 SpatialPointsDataFrame

> class(df)
[1] "SpatialPointsDataFrame"
attr(,"package")
[1] "sp"