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
中检索了 Lat
和 Long
值
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"
我 运行 遇到了一个小问题,我的 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
Lat
和 Long
值
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"