Есть ли простой способ преобразовать пространственные линии в объект пространственного многоугольника в R?
Воспроизводимый пример
Я собрал здесь многоразовый набор данных, который загружается с OpenStreetMaps через пакет overpass
. Это извлекает расположение нескольких аэропортов в Южной Англии:
devtools::install_github("hrbrmstr/overpass")
library(overpass)
library(raster)
library(sp)
# Write Query
query_airport <- '
(node["aeroway"="aerodrome"](50.8, -1.6,51.1, -1.1);
way["aeroway"="aerodrome"](50.8, -1.6,51.1, -1.1);
relation["aeroway"="aerodrome"](50.8, -1.6,51.1, -1.1);
);
out body;
>;
out skel qt;
'
# Run query
shp_airports <- overpass::overpass_query(query_airport, quiet = TRUE)
crs(shp_airports) <- CRS("+init=epsg:4326") # Add coordinates
shp_airports <- shp_airports[,1]
# Plot Results
plot(shp_airports, axes = T)
Однако данные относятся к классу SpatialLinesDataFrame. Это действительно портит ситуацию, если вы хотите сделать какую-либо форму пространственных соединений или пересечений, поскольку это распознает только край области.
Потенциальные лиды
Я изучал использование SpatialLines2PolySet
в пакете maptools
, но в свое время, исследуя, я не выдал ничего, кроме кодов ошибок, поэтому я не думал, что есть смысл включать их в вопрос. Вот некоторые инструкции по этим функциям: https://rdrr.io/rforge/maptools/man/SpatialLines2PolySet.html
Примечания
Я искал в Интернете и ТАК, чтобы найти похожие вопросы, и изо всех сил пытался найти какие-либо вопросы, непосредственно относящиеся к этому. Кажется, многие ссылаются на преобразование SpatialPoints -> SpatialLineDataFrames, но не SpatialLineDataFrames -> SpatialPolygonDataFrames. Этот вопрос похож, но не имеет ответов (или воспроизводимого набора данных): Замкнуть пространственную линию в многоугольник с помощью шейп-файла
Кроме того, кажется странным, что это было бы сложно, так как это можно легко сделать в ArcGIS, используя "Feature to Polygon". Эта функция не требует дополнительных аргументов и работает отлично.