将空间线转换为空间多边形

时间:2017-11-06 22:57:04

标签: r gis geospatial overpass-api

是否有一种简单的方法可以将空间线转换为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)

enter image description here

但是,数据属于“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中轻松完成。此函数不需要指定其他参数,它可以正常工作。

1 个答案:

答案 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)