Connect nearest lines with points

Installing nngeo

devtools::install_github("michaeldorman/nngeo")

Creating sample points pattern

library(sf)
## Linking to GEOS 3.5.1, GDAL 2.2.2, proj.4 4.9.2
# Israel bounding box
pnt = c(st_point(c(34.26801, 29.49708)), st_point(c(34.26801, 33.36403)), st_point(c(35.90094, 29.49708)), st_point(c(35.90094, 33.36403)))
pol = st_convex_hull(pnt)
pol = st_sfc(pol, crs = 4326)
pol = st_transform(pol, crs = 32636)

# Sample 200 points
x = st_sample(pol, 200)
x = st_sf(x)

plot(x)

Finding “nearest” IDs

library(nngeo)

ids = st_nn(x, x, k = nrow(x), maxdist = 20000) # maxdist = 20 km

Creating lines

lines = st_connect(x, x, ids)

plot(x)
plot(lines, col = "red", add = TRUE)

Removing duplicated and “self” lines

for(i in 1:length(ids)) ids[[i]] = ids[[i]][ids[[i]] > i]
lines = st_connect(x, x, ids)

plot(x)
plot(lines, col = "red", add = TRUE)