Конвертировать широту и долготу в несколько пространственных многоугольников в R - PullRequest
1 голос
/ 29 марта 2020

У меня есть две проблемы, которые я пытаюсь решить, первая проблема - главная. Надеюсь, я объяснил второй прилично.

1) Моя первоначальная проблема - попытка создать пространственный полигон данных из таблицы. Например, у меня есть тиббл с описанием штатов США из библиотеки urbnmapr, и я хочу иметь возможность строить пространственные полигоны для всех 50 штатов. (Примечание: я уже сделал карту из этих данных в ggplot, но я специально хочу, чтобы пространственные полигоны отображались и анимировались в листовке):

> states <- urbnmapr::states
> states

# A tibble: 83,933 x 10
    long   lat order hole  piece group state_fips state_abbv state_name fips 
   <dbl> <dbl> <int> <lgl> <fct> <fct> <chr>      <chr>      <chr>      <chr>
 1 -88.5  31.9     1 FALSE 1     01.1  01         AL         Alabama    01   
 2 -88.5  31.9     2 FALSE 1     01.1  01         AL         Alabama    01   
 3 -88.5  31.9     3 FALSE 1     01.1  01         AL         Alabama    01  
...

2) После этого я хочу присоединиться к дополнительным данные из отдельной таблицы в пространственные полигоны по названию штата. Что было бы лучшим способом сделать это, если бы я разные данные для каждого года? т.е. для 50 штатов у меня есть данные за три года, поэтому я бы создал 150 различных полигонов для штатов по годам или имел бы 50 полигонов штатов, но имел бы всю информацию в каждом, чтобы иметь возможность составлять 3 разных графика всех штатов для разных лет?

1 Ответ

1 голос
/ 29 марта 2020

Я могу предложить вам следующее (не отмечено, потому что у меня нет доступа к пакету urbnmapr с моей версией R).

Задача 1

Если вам конкретно нужны полигоны, я думаю, что лучше всего было бы присоединить фрейм данных к объекту из шейп-файла.

Если вы все еще хотите сделать это самостоятельно, вам нужно сделать две вещи:

  1. Преобразовать tibble в пространственный объект с точечной геометрией
  2. Агрегировать точки по состоянию

sf пакет может сделать оба. Для первого шага (легкий) используйте функцию sf_as_sf.

library(sf)
states
states_spat <- states %>% st_as_sf(., coords = c("lon","lat"))

Для второго шага вам нужно будет объединить геометрию. Я могу предложить вам что-то, что даст вам MULTIPOINT геометрию, а не полигоны. Чтобы преобразовать в полигоны, вы можете найти эту нить , чтобы помочь

states_spat <- states_spat %>% group_by(state_name) %>% 
  dplyr::summarise(x = n())

Задача 2

Это стандартное соединение, основанное на общих атрибутах между вашими данными и пространственным объект (например, код штата). Функции merge или *_join из dplyr работают с sf данными так же, как и с tibbles. У вас есть элементы там

Кстати, я думаю, вам лучше сделать это, чем создавать свои собственные многоугольники из ряда точек.

...