汇总 sf::st_intersection() 中几何重叠的属性
summarise attributes from sf::st_intersection() where geometries overlaps
我想总结一组几何的属性,在它们重叠的地方求和值。
library(devtools)
install_github("r-spatial/sf")
library(sf)
m = rbind(c(0,0), c(1,0), c(1,1), c(0,1), c(0,0))
p = st_polygon(list(m))
n = rbind(c(0.5,0.5), c(1.5,0.5), c(1.5,1.5), c(0.5,1.5), c(0.5,0.5))
q = st_polygon(list(n))
s = st_sfc(list(p, q))
sf = st_sf(s, att=c(1,1))
d = st_intersection(sf)
d$id <- 1:nrow(d)
plot(d['att'])
plot(st_centroid(d['att']), add = TRUE, col = 'red')
> d
#Simple feature collection with 3 features and 4 fields
#geometry type: POLYGON
#dimension: XY
#bbox: xmin: 0 ymin: 0 xmax: 1.5 ymax: 1.5
#epsg (SRID): NA
#proj4string: NA
# att geometry n.overlaps origins id
#1 1 POLYGON ((1 0.5, 1 0, 0 0, ... 1 1 1
#2 1 POLYGON ((0.5 1, 1 1, 1 0.5... 2 1, 2 2
#3 1 POLYGON ((0.5 1, 0.5 1.5, 1... 1 2 3
在上面提供的最小示例中,我想对几何 #2(对应于重叠的那个)求和 d$att 并得到 att=2。
任何帮助将不胜感激。
您可以使用 origins
列表列检索 "originated" 相交的多边形,然后对它们的 att
列求和。像这样的东西可以工作(至少在这个非常简单的用例中......):
for (int in seq_along(d$id)) {
d$att[int] = sum(sf[d$origins[[int]], ]$att, na.rm = TRUE)
}
> d
Simple feature collection with 3 features and 4 fields
geometry type: POLYGON
dimension: XY
bbox: xmin: 0 ymin: 0 xmax: 1.5 ymax: 1.5
epsg (SRID): NA
proj4string: NA
att geometry n.overlaps origins id
1 1 POLYGON ((1 0.5, 1 0, 0 0, ... 1 1 1
2 2 POLYGON ((0.5 1, 1 1, 1 0.5... 2 1, 2 2
3 1 POLYGON ((0.5 1, 0.5 1.5, 1... 1 2 3
我想总结一组几何的属性,在它们重叠的地方求和值。
library(devtools)
install_github("r-spatial/sf")
library(sf)
m = rbind(c(0,0), c(1,0), c(1,1), c(0,1), c(0,0))
p = st_polygon(list(m))
n = rbind(c(0.5,0.5), c(1.5,0.5), c(1.5,1.5), c(0.5,1.5), c(0.5,0.5))
q = st_polygon(list(n))
s = st_sfc(list(p, q))
sf = st_sf(s, att=c(1,1))
d = st_intersection(sf)
d$id <- 1:nrow(d)
plot(d['att'])
plot(st_centroid(d['att']), add = TRUE, col = 'red')
> d
#Simple feature collection with 3 features and 4 fields
#geometry type: POLYGON
#dimension: XY
#bbox: xmin: 0 ymin: 0 xmax: 1.5 ymax: 1.5
#epsg (SRID): NA
#proj4string: NA
# att geometry n.overlaps origins id
#1 1 POLYGON ((1 0.5, 1 0, 0 0, ... 1 1 1
#2 1 POLYGON ((0.5 1, 1 1, 1 0.5... 2 1, 2 2
#3 1 POLYGON ((0.5 1, 0.5 1.5, 1... 1 2 3
在上面提供的最小示例中,我想对几何 #2(对应于重叠的那个)求和 d$att 并得到 att=2。
任何帮助将不胜感激。
您可以使用 origins
列表列检索 "originated" 相交的多边形,然后对它们的 att
列求和。像这样的东西可以工作(至少在这个非常简单的用例中......):
for (int in seq_along(d$id)) {
d$att[int] = sum(sf[d$origins[[int]], ]$att, na.rm = TRUE)
}
> d
Simple feature collection with 3 features and 4 fields
geometry type: POLYGON
dimension: XY
bbox: xmin: 0 ymin: 0 xmax: 1.5 ymax: 1.5
epsg (SRID): NA
proj4string: NA
att geometry n.overlaps origins id
1 1 POLYGON ((1 0.5, 1 0, 0 0, ... 1 1 1
2 2 POLYGON ((0.5 1, 1 1, 1 0.5... 2 1, 2 2
3 1 POLYGON ((0.5 1, 0.5 1.5, 1... 1 2 3