Удаление отдаленных островов с карты США в шейп-файле с помощью R

Я скачал карту США уровня 0 (национальная граница) в формате R(sf) с https://gadm.org/download_country_v3.html. Я построил границу США (уровень 0) следующим образом:

library(tidyverse) 

us0 <- readRDS("<file.path>\\gadm36_USA_0_sf.rds")

ggplot() +
    geom_sf(data = us0, size = 1, color = "steelblue", fill = NA)

Результирующее изображение показано ниже введите здесь описание изображения

Я хотел бы удалить отдаленные острова A и B и переместить Аляску из C в C'.

Я пытался, но не смог извлечь данные о долготе и широте из us0. Я искал в Интернете, но не нашел адекватных ответов о том, как это сделать в R. Я хотел бы знать, как данные о долготе и широте можно извлечь из us0 с помощью R, чтобы я мог свободно удалять A и B и удалять C. Спасибо.


person Patrick    schedule 27.11.2019    source источник
comment
B не являются отдаленными островами в собственном смысле, они являются продолжением цепи островов от Аляски, только по другую сторону от линии -180 долготы. Если вы хотите сохранить Аляску на своей карте, вам следует оставить и их.   -  person Spacedman    schedule 27.11.2019


Ответы (1)


используя пакет raster и функцию geom(), вы можете извлечь необработанные координаты из объекта RDS, а также узнать, частью какого острова/штата является координата и является ли она твердой или дырой. В твоем случае:

geom(us0)

Тогда остается только выяснить, какие вершины принадлежат каким островам. Быстрый способ удалить B — удалить все с положительной координатой x. Вам нужно будет выяснить, какие объекты соответствуют Аляске, если вы хотите ее переместить и масштабировать. Вершина Гавайев (i.i.r.c) ниже, чем нижняя часть Флорида-Кис, поэтому вы также можете удалить все, что находится на широте меньше 23.

Кроме того, я подозреваю, что многие гавайцы будут возражать против того, чтобы Гавайи называли отдаленным островом...

person Ingolifs    schedule 27.11.2019
comment
Я попробовал geom(us0), но получил ответ: Ошибка в (функция (классы, fdef, mtable): не удалось найти унаследованный метод для функции «geom» для сигнатуры «sf» - person Patrick; 27.11.2019
comment
geom работает только для sp объектов, но не для sf. В качестве хака вы можете попробовать geomcoords = geom(as(us0,"Spatial")). - person Spacedman; 27.11.2019