Можно ли запускать функции геометрии sql для геопакета в R - PullRequest
0 голосов
/ 09 июля 2019

У меня есть геопакет, содержащий миллионы точек трафика, а также слой зоны шоссе.Я хотел бы извлечь точки в зонах шоссе в 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, оператор): нет такой функции: ST_Within.То же самое со всеми функциями геометрии

Возможно ли сделать что-то подобное?

1 Ответ

0 голосов
/ 11 июля 2019

Ответ был простым в конце.Вместо использования SQLite для подключения к геопакету можно использовать функцию st_read из библиотеки SF Ссылка на sf_read .Это также учитывает 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) ;")
...