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.
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