Menghasilkan sampel dalam sf MULTIPOLYGON di r

Saya mencoba membuat sekumpulan titik sampel dalam sekumpulan pulau. Saya menghasilkan data garis pantai sebagai berikut:

library(osmdata)
bb <- getbb(place_name= "Shetland")
osm_box <- opq(bbox = bb) %>% 
  add_osm_feature(key = "natural", value = "coastline") %>%
  osmdata_sf()

Dan kemudian saya membuat fitur sf MULTIPOLYGON:

library(sf)
coast <- osm_box$osm_lines %>% 
   st_union() %>% 
   st_line_merge() %>% 
   st_cast("MULTIPOLYGON") %>%
   st_transform(27700)

Sepertinya ini baik-baik saja. Sekarang ketika saya mencoba menghasilkan poin sampel saya:

coast %>% st_sample(1000, type= "hexagonal")

Saya mendapatkan satu fitur tipe geometri POINT daripada yang saya harapkan, 1000 fitur POINT semuanya terletak di dalam 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)

Ada ide?!

MEMPERBARUI

Ini sepertinya berhasil:

# 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)

Saya tidak begitu yakin mengapa celah pertama kode tidak berfungsi seperti yang diharapkan. Bersikaplah baik untuk mengetahuinya. Fungsi st_polygonize() sepertinya membuat perbedaan.


person Anthony W    schedule 18.01.2020    source sumber
comment
Apa arti dari bagian type = "hexagon"? Jika Anda tetap menggunakan default (acak), Anda mendapatkan kembali jumlah poin yang Anda tentukan. Saya tidak tahu apa-apa tentang segi enam, tetapi apakah itu sesuatu yang Anda perlukan?   -  person camille    schedule 19.01.2020
comment
Kurasa itu pengaturan sampelnya. Dokumentasi mengatakan ini lebih merupakan susunan segitiga - lihat di sini -› stackoverflow.com/questions/59208954/ - ini berjalan jika saya menggunakan default (acak) - sepertinya butuh waktu selamanya.   -  person Anthony W    schedule 19.01.2020