Генерация семплов внутри sf MULTIPOLYGON в r

Я пытаюсь создать набор точек выборки в наборе островов. Я генерирую данные береговой линии следующим образом:

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, расположенных внутри MULTIPOLYGON.

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(), казалось, имела значение.


person Anthony W    schedule 18.01.2020    source источник
comment
Что означает часть type = "hexagon"? Если вы оставите значение по умолчанию (случайное), вы получите обратно указанное вами количество баллов. Я ничего не знаю о шестиугольнике, но он вам нужен?   -  person camille    schedule 19.01.2020
comment
Думаю, дело в расположении сэмплов. В документации говорится, что это скорее треугольное расположение - см. Здесь -> stackoverflow.com/questions/59208954/ - он запускается, если я использую значение по умолчанию (случайное) - кажется взять навсегда, хотя.   -  person Anthony W    schedule 19.01.2020