#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)