Проблема с запросом в st_read () - PullRequest
0 голосов
/ 30 августа 2018

Я новичок в пакете sf и пытаюсь прочитать шейп-файл и установить его в соответствии с запросом. Здесь я использовал sf_read ()

  load <- st_read(dsn = "~Data", layer = "CBSA_MetroDiv", 
            query = "select * from CBSA_MetroDiv limit 3;")

но выдает ошибку как

Reading layer `CBSA_MetroDiv' from data source `\Data' using driver `ESRI Shapefile'

Error in st_sf(x, ..., agr = agr, sf_column_name = sf_column_name) : 
no simple features geometry column present

Может кто-нибудь направить меня в этом вопросе.

1 Ответ

0 голосов
/ 30 августа 2018

Параметр 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, что такое столбец геометрии ...

...