Я пытаюсь привыкнуть к использованию пакета 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.
Мне интересно:
- Как сохранить типы геометрии, когдаВыполнение
st_intersection
? - Во-вторых, есть ли у кого-нибудь хорошие ресурсы о том, как пакет
sf
обрабатывает геометрии и смешанные типы геометрии? В чем польза от этого?