通过连接点(lon-lat)在 R 中绘制的 google 地图上查找某个位置的面积

Finding area of a location on a google map plotted in R by connecting points (lon-lat)

我正在尝试使用 ggmap 和 ggplot2 库计算带有点和线的标记位置的面积。我没有找到任何关于如何通过连接 R 中的经度和纬度点来计算面积的示例。

我正在寻找区域的位置的点和线的代码如下:

library(ggmap)
library(ggplot2)

coordinates <- read.csv("U://30-Power & Water//25 Renewables//R plots//plant location plot//lat_lon.csv", header=T)

coordinates <- data.frame(coordinates) 

map <- get_map(location = c(mean(coordinates[1:13,3]), mean(coordinates[1:13,2])), zoom = 13, maptype = "satellite", source = "google")

Sweihan <- ggmap(map)+
  geom_point(data = coordinates, aes(x = coordinates[,3], y = coordinates[,2]))+
  geom_path(data = coordinates, aes(x = coordinates[,3], y = coordinates[,2]))
+ geom_polygon(data = coordinates, aes(x = coordinates[1:13,3], y = coordinates[1:13,2])) 

Sweihan

我的数据是这样的:

     Point Latitute..N. Longitude..
1     P1     24.53450    55.41547
2     P2     24.52929    55.41913
3     P3     24.52929    55.43241
4     P4     24.54342    55.46566
5     P5     24.55113    55.46241
6     P6     24.55545    55.47364
7     P7     24.56041    55.47109
8     P8     24.55841    55.46529
9     P9     24.55867    55.46521
10   P10     24.54863    55.43838
11   P11     24.54712    55.43917
12   P12     24.54085    55.42715
13   P13     24.54043    55.42712
14    P1     24.53450    55.41547

请帮助我找到可以在我的代码中使用的计算面积的方法,这样当我在地图上绘制纬度和经度点时,我就能得到这些点覆盖的确切面积。

我们将不胜感激您的任何帮助!

这是一种更通用的方法,用于查找由一组坐标描述的多边形的面积。这使用包 sf 提供的空间数据的活动简单特征标准。步骤如下:

  1. read_table2()
  2. 读入点 table
  3. Select 仅坐标列并转换为具有 as.matrix()
  4. 的矩阵
  5. list() 包裹在列表中。这是将坐标转换为几何对象所必需的。
  6. 使用st_polygon将点变成多边形
  7. 使用st_sfcst_set_crs让包理解多边形坐标在latitude/longitude系统中(4326是对应于极其常见的WGS84标准的代码坐标数据)
  8. 使用st_area计算多边形的面积。

此代码是一个简单的管道:

library(sf)

tbl <- readr::read_table2(
  "Point Latitude Longitude
  P1     24.53450    55.41547
  P2     24.52929    55.41913
  P3     24.52929    55.43241
  P4     24.54342    55.46566
  P5     24.55113    55.46241
  P6     24.55545    55.47364
  P7     24.56041    55.47109
  P8     24.55841    55.46529
  P9     24.55867    55.46521
  P10     24.54863    55.43838
  P11     24.54712    55.43917
  P12     24.54085    55.42715
  P13     24.54043    55.42712
  P1     24.53450    55.41547"
) 

tbl[, c(3,2)] %>%
  as.matrix() %>%
  list() %>%
  st_polygon() %>%
  st_sfc() %>% 
  st_set_crs(4326) %>% 
  st_area()
7919415 m^2

对于 lon/lat 坐标的矩阵

p <- rbind(c(-180,-20), c(-140,55), c(10, 0), c(-140,-60), c(-180,-20))
library(geosphere)
areaPolygon(p)

# with your data "d"
# areaPolygon(as.matrix(d[,3:2]))

或者对于 SpatialPolygonsDataFrame

library(raster)
p <- shapefile(system.file("external/lux.shp", package="raster"))
a <- area(p)