是否有一种简单的方法可以将空间线转换为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 - &gt; SpatialLineDataFrames,但不是SpatialLineDataFrames - &gt; SpatialPolygonDataFrames。这个问题很相似,但没有任何答案(或可重现的数据集):Close a spatial line into a polygon using a shapefile
此外,这似乎很奇怪,因为它可以使用“Feature to Polygon”工具在ArcGIS中轻松完成。此函数不需要指定其他参数,它可以正常工作。
答案 0 :(得分:2)
解决问题的方法是使用库sf
。查询后
library(sp)
library(raster)
library(sf)
sf_airports <- st_as_sf(shp_airports)
sf_airports_polygons <- st_polygonize(sf_airports)
shp_airports <- as(sf_airports_polygons, "Spatial") # If you want sp
class(shp_airports)