首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sf对具有多多边形几何体的对象进行分组(使用R)

使用sf对具有多多边形几何体的对象进行分组(使用R)
EN

Stack Overflow用户
提问于 2019-12-14 06:33:18
回答 1查看 1.7K关注 0票数 0

我有一个自定义的shapefile,我把它放在一起。当我一次绘制所有内容时,它工作得很好。但我想按某些变量进行分组,以绘制特定的形状区域。例如:

代码语言:javascript
复制
+-------------+--------+-------+
|   county    | region | sales |
+-------------+--------+-------+
| washoe      |      1 |     5 |
| carson city |      1 |    10 |
| clark       |      2 |    15 |
| harmon      |      2 |    20 |
+-------------+--------+-------+

如果我运行:

代码语言:javascript
复制
leaflet() %>% addTiles %>% addPolygons(data=df)

这将根据这四个多边形的位置绘制四个单独的多边形。

但是假设我想创建基于区域的多边形。因此,从理论上讲,输出将只包含两个多边形。一个是蒙哥马利和史蒂文斯的组合形状,另一个是摩西和哈蒙县的组合,我还想总结一下总销售额。

代码语言:javascript
复制
x <- df %>% group_by(region) %>% summarise(totals=sum(ones))

它会给我这个错误:

代码语言:javascript
复制
Error in CPL_geos_union(st_geometry(x), by_feature) : 
  Evaluation error: TopologyException: Input geom 0 is invalid: Ring Self-intersection at or near point -119.97497995771261 39.521600907266631 at -119.97497995771261 39.521600907266631

关于几何变量的信息:

代码语言:javascript
复制
df$geometry

Geometry set for 2106 features 
geometry type:  GEOMETRY
dimension:      XY
bbox:           xmin: -115.8968 ymin: 35.00184 xmax: -114.0428 ymax: 36.85366
epsg (SRID):    4326
proj4string:    +proj=longlat +datum=WGS84 +no_defs

我需要把它转换成其他东西吗?

EN

回答 1

Stack Overflow用户

发布于 2019-12-14 06:48:41

使用OP的data进行编辑

代码语言:javascript
复制
shp <- st_read("file/path/sample_shape.shp")

shp_union <- shp %>% 
  mutate(turf = as.character(turf),
         turf = ifelse(is.na(turf), "NA", turf)) %>% 
  group_by(turf) %>% 
  summarize(geometry = st_union(geometry),
            total_sales = sum(sales))

原始几何图形

代码语言:javascript
复制
ggplot() + geom_sf(data = shp, aes(fill = sales))

新几何图形

代码语言:javascript
复制
ggplot() + geom_sf(data = shp_union, aes(fill = total_sales))

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59330611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档