Вычислить расстояние до ближайшей точки xyz координаты - PullRequest
0 голосов
/ 12 февраля 2019

Я использую пакет spatstat для вычисления ближайшего расстояния до его соответствующих точек на основе данных xyz.Код работает, но я получаю неправильные ответы.См. Ниже.

ex<- data.frame(long= c(-103.5664,-103.5664,-103.5586),lat= c(32.09539,32.10129,32.10799),elevation= c(5000,5500,5700))
####bounding box 3D
bb <- box3(range(ex$long), range(ex$lat), range(ex$elevation))

# Create a spatial points data frame:
comp_dist.pp3<- spatstat::pp3(ex$long,ex$lat,ex$elevation,bb)

nndist.pp3(comp_dist.pp3,k=1)

[1] 500 200 200

Точки находятся более чем в миле, поэтому они должны быть ближе к 6800.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

К сожалению spatstat не распознает координаты широты и долготы автоматически.Ваши точки интерпретируются как (x, y, z) координаты в евклидовом пространстве, а три попарных расстояния, измеряемые sqrt((x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2), представляют собой (очень подозрительно) хорошие круглые числа 200, 500 и 700. Вот небольшое изменение вИсходный код для расчета всех парных расстояний:

library(spatstat)
ex<- data.frame(long= c(-103.5664,-103.5664,-103.5586),
                lat= c(32.09539,32.10129,32.10799),
                elevation= c(5000,5500,5700))
bb <- box3(range(ex$long), range(ex$lat), range(ex$elevation))
comp_dist.pp3<- spatstat::pp3(ex$long,ex$lat,ex$elevation,bb)
pairdist(comp_dist.pp3)
#>      [,1] [,2] [,3]
#> [1,]    0  500  700
#> [2,]  500    0  200
#> [3,]  700  200    0

Вы можете использовать sp::spTransform или sf::transform для преобразования из сферического (lon, lat) в планарное (x, y), а затем вы можете прикрепить свою высотукак z-координата, когда вы определяете объект pp3, и все должно работать.

Создано в 2019-02-12 пакетом Представить (v0.2.1)

0 голосов
/ 12 февраля 2019

Проверьте свои единицы.Если вы посмотрите на свои значения долготы: все вокруг -103, значения широты: все вокруг 32 и значения высот: 5000, 5500, 5700. Измерением, которое вызывает наибольшее расстояние, является высота.Поскольку они различаются только на 500 и 200, я бы не ожидал, что расстояния будут «ближе к 6800».

Редактировать: То есть я считаю, что ваш пакет обрабатывает ваши широты и долготы как числовые измерения на xyzплоскость, а не как фактические широты и долготы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...