如何创建多边形并计算地图上圆圈内的海洋面积

How to create polygon and calculate area of ocean within a circle on a map

我有一张地图,其中围绕一个点绘制了一个圆圈。圆圈的一部分覆盖陆地,一部分覆盖海洋。我想计算圆圈内的海洋面积,但我不知道如何创建该多边形。带圆圈的地图的代码是

library(dismo)
library(scales)
library(rgeos)

GI <- gmap("Grand Isle,Louisiana", zoom = 7, scale = 2)
d <- data.frame(lat = c(29.2278), lon = c(-90.0122))
coordinates(d) <- ~ lon + lat
projection(d) <- "+init=epsg:4326"
d_mrc <- spTransform(d, CRS = CRS(projection(GI)))
d_mrc_bff <- gBuffer(d_mrc, width = 100000)

plot(GI)
plot(d_mrc_bff, col = alpha("blue", .35), add = TRUE)
points(d_mrc, cex = 2, pch = 20)

我研究了 mask{raster} 和 landmask{GSIF} 函数,但我认为在我的情况下它不会起作用,因为我只想掩盖圆圈内的土地, 不在整个地图上。或者我真的不需要屏蔽它,而是创建边界为圆和海岸线的周长的多边形。 感谢您的任何建议!

这应该有效:

library(rgdal)

# US States outlines
URL <- "http://eric.clst.org/wupl/Stuff/gz_2010_us_040_00_500k.json"
fil <- basename(URL)
if (!file.exists(fil)) download.file(URL, fil)

# extract Louisiana
us <- readOGR(fil, "OGRGeoJSON")
la <- subset(us, NAME=="Louisiana")

# have to re-project d_mrc_bff or la, I chose the former

plot(gDifference(spTransform(d_mrc_bff, proj4string(la)), la), col="steelblue")

您可以使用 gArea 来获取它的面积。

如果您需要更好的边界以提高您所在区域的精度,您可以使用更高分辨率的源 shapefile。

h/t 感谢 Josh O'Brien 抓住了我对 gIntersectiongDifference.

的使用