根据 R 中 sf 的坐标制作简单多边形

问题描述 投票:0回答:1

我有一组坐标,我想使用

sf
将其转换为多边形(以计算其面积)。然而,大多数人建议的代码生成的多边形看起来像是点之间的涂鸦,而不是轮廓。

以下是真实数据:

library(sf)
library(tidyverse)
lon <- c(-71.616667, -71.5, -71.716667, -71.9, -72.4, -72.65, -72.383333, 
-72.4, -72.383333, -72.65, -72.6, -72.7, -73.033333, -73.2, -73.933333, 
-73.9, -74, -74.1, -74.183333, -74.183333, -74.45, -74.566667, 
-74.533333, -73.55, -73.733333, -73.833333, -73.683333, -73.283333, 
-72.883333, -73, -69.966667, -69.8, -73.183333, -73.85, -73.533333, 
-73.983333, -74.1, -74.3, -73.916667, -73.983333, -73.933333, 
-74.183333, -74.35, -74.366667, -74.516667, -74.583333, -73.283333, 
-73.15, -72.8, -72.583333)
lat <- c(39.916667, 39.916667, 39.85, 39.95, 39.816667, 39.766667, 39.633333, 
39.6, 39.316667, 39.266667, 39.15, 39.116667, 39.05, 39.033333, 
39.983333, 39.816667, 39.7, 39.516667, 39.35, 39.283333, 39.116667, 
39.066667, 39.033333, 39.2, 39.333333, 39.333333, 39.616667, 
39.616667, 39.566667, 39.85, 39.95, 39.933333, 39.8, 39.683333, 
39.333333, 39.15, 39.15, 39.066667, 39.85, 39.733333, 39.65, 
39.266667, 39.216667, 39.183333, 39.1, 39.033333, 39.1, 39.15, 
39.45, 39.383333)

tmp <- data.frame(lon, lat)
plot(lon, lat)

这些点的外观如下:

enter image description here

好的,让我们将其转换为 sf 对象并使其成为多边形:

polygon <- tmp %>%
    st_as_sf(coords = c("lon", "lat"), crs = 4326) %>%
    summarise(geometry = st_combine(geometry)) %>%
    st_cast("POLYGON")
plot(

这创造了美丽的抽象艺术,但不是简单的点轮廓:enter image description here

我如何向 sf 解释我只想要一个轮廓多边形,就好像你拿一支笔将点连接起来,使所有点都在里面?

r gis spatial
1个回答
0
投票

这有效:

polygon <- st_as_sf(tmp, coords = c("lon", "lat"), crs = 4326) %>%  
summarise() %>%  
st_concave_hull(., ratio=0.3)

h/t 至 L Tyrone 和 SamR

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.