Я согласен с @STaefi в комментариях, это хорошая идея показать хотя бы немного работы с вашей стороны, прежде чем просить других писать код для вас. Сказав это, ваша проблема вызвала мой интерес, чтобы схватить несколько минут моего времени, так что вот в R
. Обратите внимание, что это только считается расстоянием как функция координат, которая не будет точна нигде, кроме экватора. Вам нужно будет изменить это, если вам нужна более высокая точность.
Возьмите небольшой гипотетический набор данных:
pointsA <- data.frame(lat = c(10, 12, 20), lon = c(12, 17, 10))
pointsB <- data.frame(lat = c(11, 15), lon = c(15, 15))
Написать функцию для вычисления ближайшей точки:
closest_point <- function(lat1, lon1, lat2, lon2) {
x_dist <- abs(lon1 - lon2)
y_dist <- abs(lat1 - lat2)
dist <- sqrt(x_dist^2 + y_dist^2)
closest <- data.frame(lat = lat2[ which.min(dist) ],
lon = lon2[ which.min(dist) ])
return(closest)
}
Мы можем выполнить эту функцию на одной точке из pointsA
, возвращающегося ближайшую точку из pointsB
:
closest_point(pointsA[1,"lat"], pointsA[1,"lon"], pointsB[,"lat"], pointsB[,"lon"])
# lat lon
# 1 11 15
Или, мы можем применить его ко всем точкам из pointsA
, возвращая ближайшую точку из pointsB
для каждой из точек в pointsA
closest.points <- lapply(seq_len(nrow(pointsA)),
function(x) {
closest_point(lat1 = pointsA[x,"lat"],
lon1 = pointsA[x,"lon"],
lat2 = pointsB[,"lat"],
lon2 = pointsB[,"lon"])
})
closest.points <- do.call(rbind, closest.points)
closest.points
# lat lon
# 1 11 15
# 2 11 15
# 3 15 15
Думаю, вам нужно вычислить все расстояния для всех точек. Все другие идеи, о которых я могу думать, в первую очередь нуждаются в расстоянии ... – IQV
Являются ли эти местоположения в динамиках A и B в памяти? Или у вас их в базе данных или в некоторых? Если вам нужно создавать эту карту памяти каждый раз, когда ваше приложение выполняется, оно должно быть очень хорошим в производительности. Но если это может быть только однократная операция, и карта может быть сохранена где-то, ее не нужно оптимизировать. Это просто, поскольку все те места, где установлен A, вычисляют минимальное расстояние от этих местоположений в B. Это будет от 'O (n * n)' – STaefi
Плюс никто не напишет это для вас. Вы должны сделать это самостоятельно, а затем, если у вас возникнут проблемы, вы должны предоставить [MCVE], чтобы получить помощь. – STaefi