SpatialPointsDataFrame运行FOR循环太慢

时间:2016-02-27 09:11:38

标签: r gis sp

我遇到了一个小问题,我的for循环已经运行了3.5小时+。我在SQL Server中有一个Geodataset,其中有一个名为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小时仍在运行。

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

1 个答案:

答案 0 :(得分:0)

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

中检索LongShape
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"