如何从R中北极的连接点停止最近邻居分析

问题描述

我试图通过连接各大洲上的随机点来制作地图。我设法接近期望的结果,但是我不希望北美的观点与西伯利亚的观点联系起来。但是我无法使用最大距离来做到这一点,因为跨北极的点很近。查看附图,了解我的意思。

enter image description here

这是我用于连接点的代码pts只是点的坐标

neighbors <- 5

nearest <- st_nn(pts,pts,k = neighbors+1,maxdist = 3500000)

connect <- st_connect(pts,nearest) %>% st_as_sf

然后我用

绘制地图

geom_sf(data = connect,color = 'white') +

geom_sf(data = pts,color = 'white',shape = 1,size = 3)

我曾尝试为北美,欧洲和亚洲制作单独的文件,但是这些点的距离不一致。除非我应该使用其他工具来获取点,否则也许直接在R中生成它们?到目前为止,我已经使用QGIS在多边形中生成随机点。

您将如何解决这个问题?

干杯!

解决方法

也许这可以通过只删除那些在一定程度的“距离”之上的线来解决?请看下面:

library(sf)
library(nngeo)
library(ggplot2)

# Points
pts = read.csv("https://raw.githubusercontent.com/jankomag/delaunay_map/main/points2.csv",sep = ";")
pts = st_as_sf(pts,coords = c("X","Y"),crs = 4326)

# Lines
neighbors = 5
nearest = st_nn(pts,pts,k = neighbors+1,maxdist = 3500000)
connect = st_connect(pts,nearest) %>% st_as_sf 

# Remove very long lines
l = st_length(st_set_crs(connect,NA))
connect = connect[l < 100,]

# Plot
ggplot() +
geom_sf(data = connect) +
geom_sf(data = pts,shape = 1,size = 3)

enter image description here