简体   繁体   English

如何将两个 sf 对象相交?

[英]How to intersect two sf objects?

I have downloaded two .gdb files from here:我从这里下载了两个 .gdb 文件:

I saved both folders into data folder and unziped them我将两个文件夹都保存到数据文件夹中并解压缩它们

library(sf)

lots <- st_read("data/Lots_GDB/lots.gdb",layer= "lot")
lots <-st_transform(st_cast(lots , "MULTIPOLYGON"), "+proj=longlat +datum=WGS84")

buildings <- st_read("data/buildings_gdb/buildings.gdb",layer= "buildings")
buildings <-st_transform(st_cast(buildings , "MULTIPOLYGON"), "+proj=longlat +datum=WGS84") %>%  select( FACILITYID,FACILITY_TYPE, STATUS)

What I would like to obtain:我想获得什么:

  1. I would like to leave only polygons from object lots that do not have inside them polygons from building objects ( ie I want lots with no buildings)我想只留下建筑物中没有多边形的对象地块中的多边形(即我想要没有建筑物的地块)
  2. same thing , but also get only lots that do have buildings inside them.同样的事情,但也只能得到里面有建筑物的地块。

I used st_intersection() to overlap two objects我使用st_intersection()来重叠两个对象

lots_building<- st_intersection(lots, buildings)

And then plot it on teh map:然后将其绘制在地图上:

ggmap() +
  geom_sf(data= lots_building,  alpha=0.9, inherit.aes = FALSE)

But somehow lots_building does not seem to be the right feature to achieve the task.但不知何故lots_building似乎不是完成任务的正确功能。

我尝试了很多东西,但这是唯一有效的方法:

diffPoly <-lots[lengths(st_intersects(lots,buildings))==0,]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM