R - широта / долгота от начальной точки и расстояние - PullRequest
1 голос
/ 27 мая 2020

У меня есть координаты широты и долготы. Поскольку мне нужно было их повернуть, я преобразовал координаты широты и долготы WGS84 в расстояния от заданной точки и повернул вокруг этой точки, используя матрицу вращения. Но для построения графика мне теперь нужно преобразовать вновь повернутые значения расстояния (x и y) обратно в координаты широты и долготы WGS84. Но я не могу найти способ сделать это.

Я преобразовал начальные значения широты и долготы в расстояния от выбранной точки следующим образом:

g_mat_x <- cbind(lon, rep(sp_lat,length(lon)))
dist_x <- distGeo(c(sp_lon,sp_lat),g_mat_x)
g_mat_y <- cbind(rep(sp_lon,length(lat)),lat)
dist_y <- distGeo(c(sp_lon,sp_lat),g_mat_y)*(-1)

Где sp_lon и sp_lat - координаты произвольно выбранной точки. lon и lat - это векторы из измерения с координатами, для которых мне нужны были расстояния.

Это отлично работает, но я не могу понять, как преобразовать расстояния обратно в соответствующие Значения широты и долготы с использованием одной и той же точки (sp_lon / sp_lat).

Существуют ли поблизости функции, способные на это?

Примеры данных:

sp_lon <- 6.5
sp_lat <- 54.1

Данные широты и долготы можно найти здесь:

https://pastebin.com/8ZMGkG2P for lat values

lon <- c(7.03922544225856, 7.03921652830416, 7.03920761347249, 7.03919870033677, 
7.03918980775434, 7.039180893677, 7.03917198029713, 7.03916306606371, 
7.03915415091448, 7.03914523638381, 7.03913632276797)

https://pastebin.com/bz4zRDb4 for lon values

lat <- c(53.8599307418054, 53.8599299782294, 53.8599292147252, 53.8599284513955, 
53.8599276909077, 53.8599269276675, 53.8599261646716, 53.8599254016427, 
53.8599246387294, 53.8599238760691, 53.8599231135803)

результаты для расстояний от distGeo:

https://pastebin.com/b1rK2i0H for dist_x

dist_x <- c(35275.2396149456, 35274.6564815661, 35274.0732907975, 35273.4902109736, 
35272.9084757064, 35272.3253342833, 35271.7422384877, 35271.1590868543, 
35270.5758753102, 35269.9927042311, 35269.4095929985)

dist_x_rot <- c(27157.4079196703, 27156.82265961, 27156.2373461817, 27155.6521449452, 
27155.0683243199, 27154.4830661607, 27153.897859114, 27153.3125971812, 
27152.7272807104, 27152.1420106127, 27151.556803262)

https://pastebin.com/tL7qhXwk for dist_y

dist_y <- c(-26720.819753436, -26720.9047412656, -26720.9897211144, -26721.0746815378, 
-26721.1593256438, -26721.2442761088, -26721.3291993745, -26721.4141263143, 
-26721.4990403831, -26721.5839262974, -26721.6687931261)

dist_y_rot <- c(-34940.2337323618, -34940.1648982768, -34940.0960416297, -34940.0271949336, 
-34939.9583906952, -34939.8895184371, -34939.8206317157, -34939.7517340913, 
-34939.6828085284, -34939.6138662435, -34939.5449210127)

Надеюсь, это нормально. Я бы предпочел дать вам небольшую часть реальных данных вместо того, чтобы создавать данные.

EDIT: Хорошо, я получил его с помощью destPoint и простой тригонометрии, чтобы получить вектор dist и угол.

...