首页 > 解决方案 > 是否可以在 R 中的地理包上运行 sql 几何函数

问题描述

我有一个包含数百万个交通点以及一个高速公路区域层的地理包。我想在 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。所有几何函数都一样

有可能做这样的事情吗?

标签: rsqlitersqlite

解决方案


最后的答案很简单。可以使用 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) ;")

推荐阅读