Параметр query
упоминается только в документации для класса DBIObject
, для метода "S3 по умолчанию" параметр query
отсутствует, поэтому ваша строка запроса передается в аргумент ...
, который заканчивается будучи переданным в st_as_sf
, а затем в какой-то более поздний момент он бросает гаечный ключ в работах.
Возможен обходной путь, но одним из решений является создание файла виртуального набора данных с SQL-кодом. Например, у меня есть шейп-файл почтовых регионов Франции, а вот файл виртуального набора данных с именем filter.vrt
, который применяет выбор SQL:
<OGRVRTDataSource>
<OGRVRTLayer name="points">
<SrcDataSource relativeToVRT="1">codes_postaux_region.shp</SrcDataSource>
<SrcSQL>select * from codes_postaux_region where POP2010 > 20000</SrcSQL>
</OGRVRTLayer>
</OGRVRTDataSource>
Создайте аналогичный файл для вашего шейп-файла и SQL с помощью текстового редактора, а затем прочитайте его. Здесь вы можете увидеть 6048 функций, если я прочитал шейп-файл, но только 707, когда я прочитал файл виртуальных данных:
> fr = st_read("./codes_postaux_region.shp",quiet=TRUE)
> nrow(fr)
[1] 6048
> fr = st_read("./filter.vrt",quiet=TRUE)
> nrow(fr)
[1] 707
Возможно, вам понадобится установить систему координат для отфильтрованного набора данных, либо после его считывания, если вы это знаете, либо, возможно, с помощью другого параметра файла VRT.
Возможно, стоит проверить связь с Edzer, чтобы узнать, можно ли реализовать SQL в st_read
для шейп-файлов или я что-то пропустил. Я чувствую есть способ сказать st_read
, что такое столбец геометрии ...