การสร้างตัวอย่างภายใน 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 แทนที่จะเป็นสิ่งที่ฉันคาดหวัง คุณลักษณะ 1,000 รายการของ 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