Создание полигонов из списка lat long в R

#r #dataframe #geospatial #polygon

#r #фрейм данных #геопространственный #полигон

Вопрос:

У меня есть список с более чем 500 тыс. строк, содержащих Id, lat и long, как показано ниже:

 Id  Latitude    Longitude   
1   7896    -50.33766   -22.23764   
2   7896    -50.33768   -22.23767   
3   7896    -50.33768   -22.23768   
4   7896    -50.33770   -22.23775
  

Мне нужно создать геометрию полигона в соответствии с идентификатором, каждый из которых создает отдельный полигон.

Как я могу создать SpatialPolygonDataFrame с этими данными?

Кто-нибудь может мне помочь?

Спасибо.

Ответ №1:

Учитывая, что у вас есть несколько уникальных значений в Id столбце ваших данных, вы могли бы применить функцию к каждому из них, чтобы создать список SpatialPolygonsDataFrame . Затем вы можете rbind создать список с помощью do.call . Но это должно работать и с одним уникальным идентификатором.

 library(sp)

# recreating your data

data = structure(list(Id = c(7896, 7896, 7896, 7896), 
                      Latitude = c(-50.33766, -50.33768, -50.33768, -50.3377),
                      Longitude = c(-22.23764, -22.23767, -22.23768, -22.23775)), 
                 class = "data.frame", row.names = c(NA, -4L))

# Applying a function to each unique value in the Id column of data

poly_list <- sapply(unique(data$Id), function(x){
  # create a polygon for each unique Id
  poly = Polygon(data[data$Id == x, 3:2]) # or Polygon(data[data$Id == x, c('Longitude', 'Latitude')])
  # create a spatial polygon from the polygon
  polys = SpatialPolygons(list(Polygons(list(poly), ID = x)))
  # convert the spatial polygons to spatial polygons dataframe
  as(polys, 'SpatialPolygonsDataFrame')
})

# rbind the list of spatial polygons dataframe

poly_list <- do.call(rbind, poly_list)

# visualize 

plot(poly_list)