Сохранение типов геометрии при использовании st_intersection из пакета sf в R - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь привыкнуть к использованию пакета sf в R.

В настоящее время я пытаюсь обрезать шейп-файл всех почтовых индексов в США до границы штата Юта. Я скачал шейп-файл для границы Юты и шейп-файл всех областей табулирования почтовых индексов в США и сопоставил их проекционную информацию.

Я обнаружил, что при создании клипа из двух файлов данных с помощью st_intersects() следует st_intersection() работает хорошо. st_intersects() сохраняет только почтовые индексы, которые пересекаются с границей Юты, тогда st_intersection() должен обрезать почтовые индексы, которые касаются или пересекаются с границей Юты, до точной границы Юты.

Когда я запускаю команду st_intersects() для файла почтового индекса, результат сохраняет геометрию мультиполигонов всех почтовых индексов. Когда я запускаю st_intersection(), он создает новый sf-объект, имеющий смесь геометрий - точек, многоугольников и мультиполигонов. Я хочу, чтобы полученный sf-файл имел только мультиполигоны. Я смог удалить геометрию точек, используя этот код:

zips_utah <- zips_utah %>%
  filter(st_geometry_type(.) != "POINT")

Однако у меня все еще есть объект sf со смесью мультиполигонов и полигонов. Когда я пытаюсь привести полигоны к мультиполигонам, используя st_cast(), я получаю эту ошибку:

only first part of geometrycollection is retainedError in st_cast.POINT(x[[1]], to, ...) : 
  cannot create MULTIPOLYGON from POINT

Кажется, что точки все еще существуют в геометриях моего шейп-файла почтового индекса, возможно, под видом "GEOMETRYCOLLECTION "? Когда я проверяю тип геометрии с помощью unique(st_geometry_type(zips_utah)), я получаю следующий результат:

[1] MULTIPOLYGON       POLYGON           
[3] GEOMETRYCOLLECTION
18 Levels: GEOMETRY POINT LINESTRING ... TRIANGLE

Насколько я понимаю, я не могу сохранить полученный sf-объект с ограниченным почтовым индексом в шейп-файл, если сначала не преобразую всегеометрии к тому же типу. Когда я пытаюсь сохранить файл обрезанного почтового индекса, используя st_write(), я получаю следующую ошибку:

Error 1: Attempt to write non-polygon (POINT) geometry to POLYGON type shapefile.

Мне интересно:

  1. Как сохранить типы геометрии, когдаВыполнение st_intersection?
  2. Во-вторых, есть ли у кого-нибудь хорошие ресурсы о том, как пакет sf обрабатывает геометрии и смешанные типы геометрии? В чем польза от этого?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...