#r #geometry #gis #sf
Вопрос:
Я хотел бы организовать свои данные в виде простого объектного объекта, используя sf
пакет в R, содержащий несколько геометрических столбцов, например многоугольник, его центр тяжести и буфер, которые имеют одинаковые атрибуты.
У меня возникли трудности с сохранением такого объекта на диске. Например, это то, что я получаю, если пытаюсь сохранить его в виде шейп-файла с st_write()
:
Error in clean_columns(as.data.frame(obj), factorsAsCharacter) :
list columns are only allowed with raw vector contents
Warning:
1: In abbreviate_shapefile_names(obj) :
Field names abbreviated for ESRI Shapefile driver
2: In clean_columns(as.data.frame(obj), factorsAsCharacter) :
Dropping column(s) nghbrhd,landscp of class(es) sfc_POLYGON;sfc,sfc_POLYGON;sfc
Конечно, я мог бы разделить его на несколько объектов, каждый из которых имеет одну геометрию и все атрибуты, но я нахожу это более запутанным и подверженным ошибкам, чем наличие всех данных в одном файле.
Как я могу (лучше всего) сохранить такой объект?
Комментарии:
1. Вам просто нужно прочитать/записать данные из R?
2. да, я работаю только в R
3. Если вы работаете только в R, вы пробовали
saveRDS()
?
Ответ №1:
При сохранении объектов с помощью sf::st_write()
вы должны учитывать контекст вашего выходного объекта; два популярных формата файлов — шейп — файл ESRI / *.shp и геопакет OGC / *.gpkg-специально разрешают только одну геометрию для каждого сохраненного шейп-файла.
Это особенность, а не ошибка формата выходного файла.
Если ваш рабочий процесс требует сохранения объектов с несколькими геометриями, рассмотрите либо конкретный формат R saveRDS()
, либо, если требуется обмен с другими пространственными инструментами, один из форматов, допускающих несколько геометрий для каждого объекта — база данных PostgreSQL / PostGIS-это то, что я бы использовал в такой ситуации.
Комментарии:
1. Да, я отчасти осознавал, что шейп-файл не сможет понять несколько геометрий. saveRDS() сработало просто отлично, спасибо!