我有一张地图,周围有一个圆圈。圆圈的一部分覆盖陆地,部分覆盖海洋。我想计算圆圈内的海洋面积,但我不知道如何创建该多边形。带圆圈的地图代码是
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}功能,但我认为在我的情况下它不会起作用,因为我只想掩盖圈内的土地,而不是整个地图。或者我不需要掩盖它,但创建多边形,边界是圆的周长和海岸线。
谢谢你的任何建议!
答案 0 :(得分:3)
这应该有效:
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")
如果您需要更好的边界以提高您所在地区的精确度,您可以使用更高分辨率的源形状文件。
希望Josh O&#39; Brien使用gIntersection
vs gDifference
。