在R中使用tmaptools软件包-如何从.GPX跟踪文件中提取“轴承”信息。这会出现在Garmin Basecamp中,但不会使用tmaptools :: read_GPX出现。目前,我使用以下代码。但是肯定有更简单的方法吗?链接到GPS轨道:https://www.dropbox.com/s/02p3yyjkv9fmrni/Barron_Thomatis_2019_EOD.gpx?dl=0
library(tmaptools)
library(tmap)
library(sf)
library(tidyverse)
library(geosphere)
GPSTrack <- read_GPX("Barron_Thomatis_2019_EOD.gpx", layers = "track_points", as.sf = TRUE)
#
#Adjust GPS Track Data
#
#Extract Lat & Lon from Track geometery (c(lat, Lon))
GPSTrack_Pts <- st_coordinates(GPSTrack)
#Add X, Y Columns to Track
GPSTrack2 <- cbind(GPSTrack, GPSTrack_Pts)
#Create a coordinate vector by combining X & Y
coords <- cbind(GPSTrack2$X,GPSTrack2$Y)
#Convert GPS Track into SpatialPoints format for calculating Bearing
GPSTrack_SpPts <- SpatialPoints(coords)
#Create GPS Point Bearing, GPP point distance & GPS Time interval columns
empty <- st_as_sfc("POINT(EMPTY)")
GPSTrack2 <- GPSTrack2 %>%
st_set_crs(4326) %>% # will use great circle distance
mutate(
Bearing = bearing(coords))
#Convert Bearing to Course and Add as column
GPSTrack2 <- GPSTrack2 %>%
mutate(course = (Bearing + 360) %% 360) # add full circle, i.e. +360, and determine modulo for 360
我建议您将lwgeom::st_geod_azimuth()
用于此任务-这样可以使代码更简洁。
请注意,将方位向量加回到点的空间数据帧时会遇到挑战;它的定义比行数少一个元素(您需要两点来定义方位)。
[如果需要的话,实现此目标的一种可能性是通过将向量与表示最后一点方位的单个NA
值连接起来。根据定义,它没有方位角,因为没有跟随点。
方位角值是类单位的对象,最初为弧度。如果该类出现问题(与连接NA一样),则可以通过units::drop_units()
轻松将其转换为纯数字。
library(sf)
library(dplyr)
library(lwgeom)
points <- st_read("Barron_Thomatis_2019_EOD.gpx",
layer = "track_points",
quiet = T,
stringsAsFactors = F)
points <- points %>%
mutate(bearing = c(lwgeom::st_geod_azimuth(.) %>% units::drop_units(), NA))