R 为什么sf中每个特征的不同方法会导致不同的绘图缩放?

R 为什么sf中每个特征的不同方法会导致不同的绘图缩放?,r,sf,R,Sf,我觉得自己似乎缺乏直觉,无法始终了解sf对象将如何与tidyverse工具交互,尤其是dplyr。这里有一个例子。我们希望取两个点的缓冲区,然后减去较小的缓冲区,在每个点周围留下一个环。我提供了两种方法 首先断开几何体列,使用map2获取环空,然后将其栓接回原始sf数据帧。这种方法是有道理的;我知道所有部件是如何工作的,但感觉不“整洁”或整洁,因为我们创建了中间对象,我们必须手动替换crs,而且感觉几何体与属性不匹配很容易 第二种方法是我想把它控制在一个管道内。在这里,我希望group\u by

我觉得自己似乎缺乏直觉,无法始终了解
sf
对象将如何与
tidyverse
工具交互,尤其是
dplyr
。这里有一个例子。我们希望取两个点的缓冲区,然后减去较小的缓冲区,在每个点周围留下一个环。我提供了两种方法

首先断开几何体列,使用
map2
获取环空,然后将其栓接回原始
sf
数据帧。这种方法是有道理的;我知道所有部件是如何工作的,但感觉不“整洁”或整洁,因为我们创建了中间对象,我们必须手动替换
crs
,而且感觉几何体与属性不匹配很容易

第二种方法是我想把它控制在一个管道内。在这里,我希望
group\u by
mutate
能起作用,某种程度上,它至少能够无误地运行,并且似乎能够创建正确的环空,但某种原因导致plot方法放大了很多。我也不知道这两种方法的实际作用是否还有其他区别

编辑:不同的不仅仅是绘图缩放,st_bbox的结果也因某些原因不同。但是,环似乎仍然位于点的中心,并且它们在
mapview::mapview()
中看起来相同。还包括会话信息,我更新为R3.4.4、
sf
0.6-1、
tidyverse
1.2.1。不过,我会更新所有其他内容,看看会发生什么

库(tidyverse)
图书馆(sf)
#>链接至GEOS 3.6.1、GDAL 2.2.3、项目4.9.3
种子集(12345)
点=map2(runif(50,-10,10),runif(50,-10,10),~st_点(c(.x,.y)))%>%
st_证监会(crs=4326)%>%
st_变换(3857)
sf_pts=st_sf(val=1:50,几何图形=点)
环1=st_缓冲区(点,50000)
环2=st_缓冲区(点数,100000)
sep_环=st_sfc(map2(环2,环1,~st_差(.x,.y)),crs=3857)
sf_opt1%
st_集_几何体(sep_环)
绘图(sf_opt1)

绘图(sf_opt1$geometry)
绘图(sf_pts$geometry,add=T)

sf_opt2%
变异(
环1=st_缓冲器(几何尺寸,50000),
环2=st_缓冲区(几何体,100000)
) %>%
rowid_到_列()%>%
分组依据(rowid)%>%
突变(几何=st_差(环2,环1))%>%
解组()%>%
选择(val)
绘图(sf_opt2)

绘图(sf_opt2$geometry)
绘图(sf_pts$geometry,add=T)

st_bbox(sf_opt1)
#>xmin-ymin-xmax-ymax
#> -1210664 -1199345  1190345  1187217
圣彼得堡(sf_opt2)
#>xmin-ymin-xmax-ymax
#>  391818.2  938652.3  591818.2 1138652.3
由(v0.2.0)于2018年4月10日创建

devtools::session_info()
#>会话信息-------------------------------------------------------------
#>设定值
#>R版3.4.4版(2018-03-15)
#>系统x86_64,mingw32
#>用户界面RTerm
#>语言(英文)
#>核对英国的英语
#>tz美国/洛杉矶
#>日期2018-04-10
#>包裹-----------------------------------------------------------------
#>包*版本日期源
#>资产净值0.2.0 2017-04-11克朗(R 3.4.1)
#>后端口1.1.2 2017-12-13起重机(R 3.4.3)
#>基准*3.4.4 2018-03-15本地
#>bindr 0.1.1 2018-03-13起重机(R 3.4.4)
#>bindrcpp*0.2 2017-06-17起重机(R 3.4.1)
#>扫帚0.4.3 2017-11-20起重机(R 3.4.2)
#>cellranger 1.1.0 2016-07-27起重机(R 3.4.1)
#>7.3-14级2015-08-30起重机(R 3.4.4)
#>等级0.1-24 2017-04-16起重机(R 3.4.2)
#>cli 1.0.0 2017-11-05起重机(R 3.4.2)
#>色彩空间1.3-2 2016-12-14克朗(R 3.4.1)
#>编译器3.4.4 2018-03-15本地
#>蜡笔1.3.4 2017-09-16克兰(R 3.4.2)
#>旋度3.1 2017-12-12起重机(R 3.4.3)
#>数据集*3.4.4 2018-03-15本地
#>DBI 0.8 2018-03-02起重机(R 3.4.3)
#>开发工具1.13.5 2018-02-18起重机(R 3.4.3)
#>摘要0.6.15 2018-01-28起重机(R 3.4.3)
#>dplyr*0.7.4 2017-09-28起重机(R 3.4.2)
#>e1071 1.6-8 2017-02-02起重机(R 3.4.2)
#>评估0.10.1 2017-06-24起重机(R 3.4.2)
#>猫类*0.3.0 2018-02-19起重机(R 3.4.3)
#>国外0.8-69 2017-06-22起重机(R 3.4.4)
#>ggplot2*2.2.1.9000 2018-03-28 Github(tidyverse/ggplot2@3c9c504)
#>胶水1.2.0 2017-10-29起重机(R 3.4.2)
#>图*3.4.4 2018-03-15本地
#>GRD设备*3.4.4 2018-03-15本地
#>电网3.4.4 2018-03-15本地
#>GTTable 0.2.0 2016-02-26起重机(R 3.4.1)
#>避风港1.1.1 2018-01-18起重机(R 3.4.3)
#>hms 0.4.2 2018-03-10克朗(R 3.4.4)
#>htmltools 0.3.6 2017-04-28起重机(R 3.4.2)
#>httr 1.3.1 2017-08-20起重机(R 3.4.1)
#>jsonlite 1.5 2017-06-01起重机(R 3.4.1)
#>克尼特1.20 2018-02-20克兰(R 3.4.3)
sf_opt2 <- sf_pts %>%
  mutate(
    ring1 = st_buffer(geometry, 50000),
    ring2 = st_buffer(geometry, 100000)
  ) %>%
  mutate(geometry = ring2 / ring1) %>%
  select(val)
plot(sf_opt2)