R中将经纬度点集聚合成多边形

6

我正在尝试从点集群创建多边形,其边界将接触所有外部点。如有帮助改进我的代码,将不胜感激。

library(dplyr)
library(sf)
    df<- read.table(text ="lon  lat
    74.03687    30.17482
    74.23605    30.23773
    74.24127    29.95988
    74.29211    30.07575
    74.25612    30.17687
    74.15972    30.06242
    74.06484    30.11025
    74.36046    30.02749
    74.08133    30.01889
    74.26168    30.16881
    73.91083    30.01378
    74.00881    30.07585
    74.40638    29.97712
    74.34974    30.22231
    74.20501    30.11133
    74.18108    30.01113
    74.00717    30.11362
    73.94891    30.03807
    74.18977    30.14367
    74.18857    30.13621
    74.19862    30.15222
    74.19376    30.13425",header= T)
    polygon <- df %>%
      st_as_sf(coords = c("lon", "lat"), crs = 4326) %>%
      summarise(geometry = st_combine(geometry)) %>%
      st_cast("POLYGON")
    plot(polygon)  

需要在单个多边形中输出类似于蓝线的结果。 enter image description here

你是指像凸包一样的东西吗?如果是的话,你可以在这里看看:https://stats.stackexchange.com/questions/41578/what-is-a-bagplot-or-bivariate-boxplot - CIAndrews
2个回答

8
我建议使用concaveman软件包来完成这个任务:
library(concaveman)

pnts <- df %>%
  st_as_sf(coords = c("lon", "lat"), crs = 4326)
polygon <- concaveman(pnts)

plot(polygon, reset = FALSE)
plot(pnts, add = TRUE)

enter image description here


2
以下是代码示例:
plot(df, type='n')
polygon(df)
chx <- chull(df)
chx <- rbind(df = df[chx, ], df[chx[1], ])
lines(chx, col='blue', lwd=4)

将产生以下图表:
单击enter image description here以查看。
或者删除polygon(df)以获取:
单击enter image description here以查看。
希望对您有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接