ฉันกำลังพยายามสร้างชุดคะแนนตัวอย่างภายในชุดเกาะ ฉันสร้างข้อมูลแนวชายฝั่งดังนี้:
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()
จะสร้างความแตกต่างได้
type = "hexagon"
มีความหมายว่าอย่างไร หากคุณคงค่าเริ่มต้นไว้ (สุ่ม) คุณจะได้รับคะแนนกลับตามที่คุณระบุ ฉันไม่เกี่ยวอะไรกับรูปหกเหลี่ยม แต่นั่นเป็นสิ่งที่คุณต้องการเหรอ? - person camille   schedule 19.01.2020