是否可以在R中的地理包上运行sql几何函数

时间:2019-07-09 14:09:35

标签: r sqlite rsqlite

我有一个包含数百万个交通点以及一个高速公路区域图层的地理包裹。我想在R脚本中提取高速公路区域内的点。

可以使用库(RSQLite)和dbGetQuery查询属性数据,但是似乎空间扩展不可用。我可能正在尝试另一种更好的方法。以下是一个检索有效数据的查询,以及一个简单的查询以复制我通过任何几何函数收到的错误。

    library(RSQLite)
    library(dbplyr)
    library(sqldf)

    #Connect to geopackage
    con <- dbConnect(RSQLite::SQLite(), dbname = "Traffic_data.gpkg", 
    loadable.extensions = TRUE)

    #Select friday traffic
    Traffic_Friday <- dbGetQuery(con, "SELECT*
    FROM Traffic_data_points
    WHERE Day_ = 'Friday' ;")

    #But if I include ST_Within:
    Traffic_Friday <- dbGetQuery(con, "SELECT*
    FROM Traffic_data_points as tp, highway_buf as hb 
    WHERE tp.Day_ = 'Friday' and ST_Within(tp.geom, hb.geom) ;")

我收到此错误:result_create(conn @ ptr,statement)错误:没有这样的函数:ST_Within。所有几何函数都相同

有可能做这样的事情吗?

1 个答案:

答案 0 :(得分:0)

最后的答案很简单。可以使用SF库Link to sf_read中的st_read函数来代替使用SQLite连接到地理包。它还允许包含空间功能的sql查询。

    library(sf)

    Traffic_Friday <- st_read("Traffic_data.gpkg", "SELECT*
    FROM Traffic_data_points as tp, highway_buf as hb 
    WHERE tp.Day_ = 'Friday' and ST_Within(tp.geom, hb.geom) ;")