Я пытаюсь создать набор точек выборки на множестве островов. Я генерирую данные береговой линии следующим образом:
library(osmdata)
bb <- getbb(place_name= "Shetland")
osm_box <- opq(bbox = bb) %>%
add_osm_feature(key = "natural", value = "coastline") %>%
osmdata_sf()
И затем я создаю sf
функцию MULTIPOLYGON:
library(sf)
coast <- osm_box$osm_lines %>%
st_union() %>%
st_line_merge() %>%
st_cast("MULTIPOLYGON") %>%
st_transform(27700)
Это, похоже, нормально. Теперь, когда я пытаюсь сгенерировать мои точки выборки:
coast %>% st_sample(1000, type= "hexagonal")
, я получаю один объект типа POINT вместо того, что я ожидаю, 1000 объектов POINT, расположенных внутри МНОГОПОЛИГОНА.
Geometry set for 1 feature
geometry type: POINT
dimension: XY
bbox: xmin: 396882.7 ymin: 1138217 xmax: 396882.7 ymax: 1138217
epsg (SRID): 27700
proj4string: +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +units=m +no_defs
POINT (396882.7 1138217)
Есть идеи?!
ОБНОВЛЕНИЕ
Ну, похоже, это работает:
# Generate a polygon of the coast line
coast <- osm_box$osm_lines %>% st_union() %>%
st_line_merge() %>%
st_polygonize() %>%
st_transform(27700)
# Generate 100 regular spaced samples within the polygon
samples <- st_sample(coast, 100, type= "regular", exact=F)
Geometry set for 100 features
geometry type: POINT
dimension: XY
bbox: xmin: 396861.1 ymin: 1109326 xmax: 466072.5 ymax: 1217457
epsg (SRID): 27700
proj4string: +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +units=m +no_defs
First 5 geometries:
POINT (429729.3 1177035)
POINT (446778.1 1153826)
POINT (448614.3 1193497)
POINT (431511.4 1186704)
POINT (457445.3 1203824)
Я не совсем уверен, почему первый часть кода не работает, как ожидалось. Будь хорошим, чтобы знать. Функция st_polygonize()
, казалось, имела значение.