R:标题/行进方向/.gpx文件中的方位-tmaptools

问题描述 投票:0回答:1

在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
r gpx tmap
1个回答
1
投票

我建议您将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))
© www.soinside.com 2019 - 2024. All rights reserved.