我已经geosphere::areaPolygon()
成功使用了很多次,但现在我遇到了一个问题。
我有一个包含另一个多边形 sp1 的多边形 sp2。所以 sp2 的面积应该比 sp1 大。当我用 计算每个区域时areaPolygon()
,我得到相反的结果。
areasp1 = 10133977
areasp2 = 9858811
我使用 gSymdifference 来找到对称的不同多边形 sp3,它有
areasp3 = 275165.4
sp1 : 红色虚线
sp2 : 黑线
sp3 : 绿色虚线
我使用的代码:
library(sp)
library(geosphere)
library(rgeos)
library(raster)
s1 <- data.frame(lon= c(130.4327, 129.85127, 121.00775, 84.9176, 60.40123,
58.97929, 58.55841, 94.95237),lat= c(30.25074, 29.83075, 23.7992, 28.25964,
36.89905, 37.72305, 52.58793, 43.47459))
s2 <- data.frame(lon= c(130.4327, 129.85127, 121.00775, 54.35377, 58.55841,
94.95237),lat= c(30.25074, 29.83075, 23.7992, 31.61798, 52.58793, 43.47459))
sp1 <- SpatialPolygons(list(Polygons(list(Polygon(s1)),1)))
crs(sp1) <- CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")
sp2 <- SpatialPolygons(list(Polygons(list(Polygon(s2)),1)))
crs(sp2) <-CRS ("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")
areasp1 <- areaPolygon(sp1)/10^6 # to get area in square km
areasp2 <- areaPolygon(sp2)/10^6
sp3 <- gSymdifference(sp1,sp2,checkvalidity = TRUE)
areasp3 <- areaPolygon(sp3)/10^6
所有多边形都经过了自相交或其他问题的测试,因此与此处gIsValid()
提到的问题无关。
知道为什么 sp1 的面积比 sp2 大吗?
注意:如果你求和areasp2
+ areasp3
,它几乎等于areasp1
。我不知道这是不是偶然。