如何绘制许多经/纬度坐标的多边形并计算表面?

时间:2019-08-13 09:00:10

标签: r polygon sp

我有以下数据:https://ufile.io/p9s0le6g ...包含485个经纬度观测值。我最终要计算该图的表面积(以m2或km2为单位)。我想用数据点(外部点)创建一个多边形,然后计算表面。但是,我无法提出一个漂亮的多边形。 我的数据点作为坐标看起来像: enter image description here

我想要一个看起来像这样(或类似)的多边形: enter image description here 这是我尝试过的:

library(sp)
df <- read.csv('data.csv')
p = Polygon(df)
ps = Polygons(list(p),1)
sps = SpatialPolygons(list(ps))
plot(sps)

这导致(显然不是一个好的多边形): enter image description here 我也尝试实现Create polygon from set of points distributed的答案,但这对我来说只是一个矩形: enter image description here

有人知道如何优化多边形以得到看起来像数据点外形的图形以及如何计算该优化多边形的表面吗?

2 个答案:

答案 0 :(得分:1)

使用concavemansf,我们可以在您的所有点周围创建一个凹壳:

library(sf)
library(concaveman)

pts <- st_as_sf(df, coords=c('LONG','LAT'), crs=4326 )

conc <- concaveman(pts)

conc %>% st_area()
# 4010443 [m^2]
library(ggplot2)
ggplot() +
  geom_sf(data=pts, col = 'red', pch=3)  +
  geom_sf(data = conc, fill = NA)

enter image description here

答案 1 :(得分:1)

考虑使用优质的{sf}软件包中的功能,而不要使用较早的{sp}。

如本例所示,建立在sf::st_convex_hull

library(sf)
library(tidyverse)

points <- read_csv("data.csv") %>% 
  st_as_sf(coords = c("LONG","LAT"), crs=4326)


polygon <- st_union(points) %>%  # unite the points to 1 object
  st_convex_hull() # calculate the convex hull

# verify the results by drawing a map
ggplot() +
  geom_sf(data = points, col = "red", size = 2, pch = 4) +
  geom_sf(data = polygon, col = "grey45", fill = NA)


# as a bonus: area of the polygon  
area <- st_area(polygon)
area

enter image description here