【问题标题】:How to remove lakes/water from maps in R如何从 R 中的地图中删除湖泊/水
【发布时间】:2019-08-04 11:58:27
【问题描述】:

(我会提前为没有代表道歉。今天晚些时候无法开始工作,这是一个单独的问题)。

我从美国人口普查中提取了 ZCTA 级别数据,将 ZCTA 分组,并创建了一个等值线图。我想删除各种湖泊边界。在湖泊要素占总面积较大部分(或靠近我的区域边界)的地方,它们的边界对观察者来说有点碍眼。

library(tigris)
library(sf)
library(dplyr)
library(tidycensus)
library(stringr)
library(ggplot2)




var <- c(EduTotal = "B16010_001")
zip_sf <- get_acs(geography = "zcta",
                  variables = var,
                  year = 2017, survey = "acs5",
                  output = "wide", geometry = TRUE,
                  keep_geo_vars=TRUE
)

zip_sf %>%
  filter(str_detect(ZCTA5CE10,'^1')) %>%
    mutate(zip2=str_sub(ZCTA5CE10,1,2)) %>%
       group_by(zip2)  %>%
         summarize(meanEd=mean(EduTotalE))  %>%
  ggplot(aes(fill = meanEd)) + 
  geom_sf(col='red')

以“1”开头的邮政编码

【问题讨论】:

  • 使其成为代表的一种方法是认识到我们不需要实际的人口普查数据,这需要 API 密钥才能在地图上工作,因为这实际上是您的问题是。但是你打算如何去除湖泊呢?它们基本上是形状上的洞——把它们填满?
  • (不确定我是否遵循关于 reprex 的评论。reprex 不适用于我尝试使用的任何代码 - 我只是收到错误)如何删除湖是我的问题。不知道有没有办法做到这一点,但这里有更聪明更有经验的人可能有一些想法。
  • 您的“湖边界”是否有任何位于外环内部的环或定义您的特征的环?

标签: r mapping sf tidycensus


【解决方案1】:

我认为您想要做的是绘制特征,但仅勾勒外环,或者在具有岛屿的特征的情况下,绘制所有外环。

在 PostGIS 简单功能中,有一个 ST_ExternalRing 函数,但这似乎还没有在 sf 包中实现。你可以好好问问 Edzer……

与此同时,这似乎有效。将 MULTIPOLYGON 几何图形转换为 LINESTRINGS,将这些 LINESTRINGS 转换为 POLYGONS,然后将多边形合并。在这个过程中,洞(湖)失去了它们作为洞的身份,UNION 过程将丢弃它们。

例子:

运行example(st_multipolygon) 以创建mp1 对象。这是一个由三个正方形组成的 MULTIPOLYGON 对象,其中两个有洞:

> plot(mp1)

要删除孔,请执行以下操作:

> mp1ext = 
    st_union(
      st_cast(
         st_cast(
            st_boundary(st_sfc(mp1)),
         "LINESTRING"),
      "POLYGON")
     )

然后绘制地图,使用带有孔的原始数据绘制带有颜色和缺失轮廓颜色的区域:

> plot(mp1,col="green",border=NA)

然后使用新对象添加边框没有孔:

> plot(mp1ext, col=NA, lwd=3,add=TRUE)

注意方孔(湖)是如何没有被勾勒出来的。

这显然是单个对象的轮廓解决方案,并使用基本图形而不是ggplot 进行绘图,但这里的原则可能足以让您适应您的数据。可能会出现其他并发症。根据我的代码编写你自己的st_external_ring ring 函数并对其进行调整,直到它工作得更好!

【讨论】:

  • 我认为您的方法正在改变环形方向。如果你使用st_sfc(st_multipolygon(lapply(mp1, "[", 1))) 来获取外环,AFAIKT 会保留方向。
猜你喜欢
  • 2014-08-15
  • 1970-01-01
  • 2013-03-16
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 2021-08-17
  • 1970-01-01
相关资源
最近更新 更多