Во-первых, извините за это длинное введение, но я думаю, что это поможет лучше понять проблему. Я работаю над проектом, в котором мы пытаемся использовать огромные данные о плавающих автомобилях, чтобы вывести модели мобильности человека. Я использую RStudio для этого. В основном у нас есть два файла; trips.csv , который содержит 375 000 рейсов с метаданными, такими как идентификатор поездки, начальное / конечное местоположение (долгота, широта) и другие поля. Второй файл - waypoints.csv , который содержит полные данные о путевых точках GPS, перечисленные за поездкой. Это включает в себя последовательность путевых точек, местоположение и другие поля.
В общей сложности для этих 375 000 поездок (первый файл) существует около 10 миллионов путевых точек (второй файл). Таким образом, каждая поездка из первого файла имеет несколько путевых точек во втором файле, которые вместе образуют траекторию этой поездки. В следующих таблицах показаны примеры из каждого файла только с теми столбцами, которые мне нужны в моей задаче:
Данные поездки
Tripld,Lon1,Lat1,Lon2,Lat2,distance,
bb983d,11.565,48.19,11.55,48.143,7498,
da5bgg,11.584,48.157,11.639,48.098,1364,
saefeg,11.591,48.142,11. 563,48.18,7377
Данные о путевых точках
TripId,sequence,Lon,Lat,
bb983d,0,11.565,48.19,
bb983d,1,11.56688,48.18158,
bb983d,2,11.56351,48.18144,
bb983d,3,11.56335,48.1888,
bb983d,4,11.5654,48.17617,
da5bgg,0,11.584,48.157,
da5bgg,1,11.583417,48.155167,
da5bgg,2,11.578472,48.144556,
da5bgg,3,11.57075,48.142139,
5aefeg,0,11.591,48.142,
5aefeg,1,11.58994,4813956
5aefeg,2,11.58797,48.13706
Вот код, который я использовал для создания фреймов данных:
dput(droplevels(head(trips)))structure(list(TripId = structure(1:6, .Label = c("00a7da9f4b503f36fc937f386b11ca58", "00aa3cb70345798d9b1d92bc4685b3ee", "017cb0697a1135c5cd3479c1edc2aa6b", "01cc30aa0e036817cf4bdc468c9fad8a", "01f0a6a90ec964ae8014d2f750231663", "02949197deca3f1d52906cfc147454c5"), class = "factor"), StartLocLat = c(48.178, 48.098, 48.15, 48.176, 48.149, 48.151), startLocLon = c(11.573, 11.501, 11.503, 11.558, 11.503, 11.563), EndLocLat = (48.143, 48.098, 48.18, 48.168, 48.148, 48.127), EndLocLon = c(11.55, 11.639, 11.563, 11.526, 11.616, 11.554)), row.names = c(NA, 6L), class = "data.frame")
dput(droplevels(head(waypoints))) structure(list(TripId = structure(c(1L, 1L, 1L, 1L, 1L, 2L), .Label = c ("00a7da9f4b503f36fc937f386b11ca58", "00aa3cb70345798d9b1d92bc4685b3ee"), class = "factor"), Sequence = c(0L, 1L, 2L, 3L, 4L, 0L), Latitude = c(48.178, 48.18158, 48.18144, 48.1808, 48.17617, 48.098), Longitude = c(11.573, 11.56688, 11.56351, 11.56335, 11.5654, 11.501)), row.names = c(NA, 6L), class = "data.frame")
Теперь я хотел бы добавить столбец область отклонения , представляющий область между виртуальной прямой линией от начальной точки до конечной точки каждой поездки и фактический путь или траектория, полученные в результате соединения промежуточных точек (последовательности) отрезками линии для этой поездки.
Прикрепленное фото может помочь в понимании соответствующей области:
Я провел быстрое исследование, но не нашел, что именно мне нужно, особенно то, что мне нужно сделать для всех поездок.
Любые подсказки / предложения с кодами - если возможно - будут очень, очень ценны!