#r
Вопрос:
Я очищаю свой набор данных и не знаю, как очистить данные GPS. когда я использую функцию таблицы, я обнаруживаю, что они вводятся в разных формах. «547140», «35.6997», «251825.7959», «251470.43», «54/4077070001», и «54/305495»
Я не знаю, как очистить эту переменную с такой большой разницей. Я был бы благодарен, если бы вы помогли мне или предложили мне веб-сайт для обучения.
Комментарии:
1. Есть ли способ выяснить, в какой географической системе координат находится GPS?
Ответ №1:
Ваша главная проблема заключается в стандартизации GPS путем проецирования GPS в выбранную систему координат. Допустим, у нас есть GPS Амстердама в двух разных системах координат, одна в амерсфорте/rd new (espg 28992) и одна в wsg1984 (espg 4326).:
x y location espg
1: 1.207330e 05 486632.35593 amsterdam 28992
2: 4.884088e 00 52.36651 amsterdam 4326
structure(list(x = c(120733.012428048, 4.88408811380055), y = c(486632.355933105,
52.3665054922233), location = c("amsterdam", "amsterdam"), espg = c(28992,
4326)), row.names = c(NA, -2L), class = "data.frame")
Что мы хотим сделать, так это перенастроить наши координаты в одну выбранную географическую систему координат. В этом случае я использовал WSG1984 (espg 4326).
library(sf)
#here I tell R which columns contain the coordinates
coordinates(dt) <- ~x y
#I now convert the table to a spatial object
dt <- st_as_sf(dt)
#here I split by the different ESPG's present
dt <- split(dt, dt$espg)
#here I loop through every individual espg present in the dataset
for(i in 1:length(dt)){
#here I say in which coordinate system (espg) the GPS data is in
st_crs(dt[[i]]) <- unique(dt[[i]]$espg)
#here I transform the coordinates to another projection (in this case WSG1984, espg 4326)
dt[[i]] <- dt[[i]] %>% st_transform(4326)
}
#here I bind the items of the list together
dt <- do.call(rbind, dt)
head(dt)
Simple feature collection with 2 features and 2 fields
Geometry type: POINT
Dimension: XY
Bounding box: xmin: 4.884088 ymin: 52.36651 xmax: 4.884088 ymax: 52.36651
Geodetic CRS: WGS 84
location espg geometry
4326 amsterdam 4326 POINT (4.884088 52.36651)
28992 amsterdam 28992 POINT (4.884088 52.36651)
В столбце геометрия теперь вы видите, что координаты равны друг другу.
Суть в том, что вам нужно знать географическую систему координат, в которой находятся данные GPS. Затем вы можете преобразовать свои данные из таблицы в пространственный объект и преобразовать данные GPS в выбранную проекцию.
Кроме того, всегда полезно проверить, правильно ли ваше предположение об исходном ESPG, например, построив график данных.
library(ggplot2)
library(ggspatial)
ggplot(dt) annotation_mape_tile() geom_sf(size = 4) theme(text = element_text(size = 15) facet_wrap(~espg)
На рисунке ниже мы видим, что проекция прошла хорошо для обоих espg.
Комментарии:
1. большое спасибо за ваши подробные объяснения @maarvd. Я новичок в r, и мой вопрос может показаться глупым. я установил пакеты sf и geoR и пытаюсь сделать то, что вы сказали. но получите эту ошибку. не удалось найти функцию «координаты
2. «координаты» взяты из пакета «sp».