r - 是否可以在 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。所有几何函数都一样
有可能做这样的事情吗?
解决方案
最后的答案很简单。可以使用 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) ;")
推荐阅读
- javascript - 选中一个带有动态值的单选按钮
- vert.x - Vert.x 事件总线关闭
- php - laravel join 查询有两个表,每个表有两个 where 条件
- html - 使用类似 textarea 的样式装饰输入字段
- android - 如何在保存到android内部存储之前更改jpg图像的位深度?
- c# - Unity 2d 弹跳墙运动
- laravel - 布尔值更新方法时出错
- ruby-on-rails - 如何更改 Stripe 订阅的计费结束周期日期?
- django - 如何使用 django rest 框架在序列化器中使用过滤器
- r - 尝试在 R 中创建人口金字塔时结果不佳