Вот способ использования пакета sf
и включенного набора данных nc
для Северной Каролины. Это, очевидно, в другом масштабе, чем ваша проблема, но предпосылка должна быть такой же. Мы можем создать большой квадратный «район», охватывающий некоторые округа Северной Каролины, а затем использовать filter
с st_within
, чтобы оставить только те, которые находятся в пределах границы. Вы можете использовать другие предикаты, такие как st_intersects
, в зависимости от того, что вы хотите сделать с теми, которые лежат на границе. Это также применимо к большему количеству районов, поскольку предикаты геометрии sf
фактически сравнивают все геометрии в своих двух аргументах.
library(tidyverse)
library(sf)
#> Linking to GEOS 3.6.1, GDAL 2.2.3, proj.4 4.9.3
nc <- system.file("shape", "nc.shp", package = "sf") %>%
read_sf() %>%
st_transform(3857)
district <- st_polygon(list(matrix(
data = c(-9000000, 4000000, -8500000, 4000000, -8500000, 4500000, -9000000, 4500000, -9000000, 4000000),
ncol = 2,
byrow = TRUE
))) %>%
st_sfc(crs = 3857)
contained <- nc %>%
filter(st_within(., district, sparse = FALSE))
plot(nc$geometry)
plot(district, add = TRUE)
plot(contained$geometry, add = TRUE, col = "red")
Создано в 2018-05-11 пакетом Представ. (v0.2.0).