【问题标题】:How to create polygon and calculate area of ocean within a circle on a map如何在地图上的圆圈内创建多边形并计算海洋面积
【发布时间】:2015-09-29 19:59:44
【问题描述】:

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

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} 函数,但我认为在我的情况下它不会起作用,因为我只想掩盖圆圈内的土地,而不是在整个地图上.或者我真的不需要掩盖它,而是创建边界为圆的周长和海岸线的多边形。 感谢您的任何建议!

【问题讨论】:

  • 顺便说一句,如果你想要一个更“圆形”的圆圈,只需在对gBuffer() 的调用中增加quadsegs 的值。而且,要了解属于该多边形的每种类型(包括海洋,此处编码为值 178)的像素数,您可以使用raster::extract(GI, d_mrc_bff)。 (每个像素的面积由prod(res(GI))返回。)
  • 太好了,感谢您的提示!我会试试看。

标签: r geospatial


【解决方案1】:

这应该可行:

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。

感谢 Josh O'Brien 了解我对 gIntersectiongDifference 的使用。

【讨论】:

  • 啊。是的。完全是我的坏。我太专注于“掩盖圆圈中的土地”。我会补充的。
  • 再次感谢,解决方案的其余部分有效,但代码的最后一行 plot(gDifference(spTransform(d_mrc_bff, proj4string(la)), la), col="steel blue") 给出了错误消息:绘图错误(gDifference(spTransform(d_mrc_bff,proj4string(la)),la), :在为函数“plot”选择方法时评估参数“x”时出错:spTransform(d_mrc_bff,proj4string(la))中的错误:第二个参数需要属于CRS类这很奇怪,因为它似乎在解决方案!
  • 我忘了提到我也尝试重新投影 la 但我仍然收到相同的错误消息
  • 我将最后一行代码更改为plot(gDifference(spTransform(d_mrc_bff, CRS=CRS(proj4string(la))), la), col="steel blue"),现在它可以工作了。再次感谢您的帮助!
  • @user3281487 很高兴听到这有帮助。如果这回答了您的问题,最好通过单击左侧的复选标记来表明这一点。干杯。
猜你喜欢
  • 2012-07-03
  • 2020-02-07
  • 1970-01-01
  • 2021-09-04
  • 2012-02-20
  • 2020-01-24
  • 2014-02-01
  • 2013-11-13
  • 2012-04-07
相关资源
最近更新 更多