Как рассчитать соотношение расстояний с помощью momentjs и turfjs

  • Автор темы Yul1
  • 26
  • Обновлено
  • 12, May 2024
  • #1
Привет, С помощью библиотеки JS и turfjs мне нужно вычислить несколько маркеров 1) средняя скорость 2) время прибытия в любую маркерную точку Я делаю как:
  const markerIds = Object.keys(markers)

const points2Data = []

let summarized_distance= 0

let arrival_date= moment(tripRow.arrival_date)// arrival time

let departure_date= moment(tripRow.departure_date) // departure time

for (let i = 1; i < markerIds.length; i++) {

const marker = markers[markerIds[i - 1]]

const nextMarker = markers[markerIds[i]]

const from = turf.point([marker.lat, marker.lng])

const to = turf.point([nextMarker.lat, nextMarker.lng])

const distance = turf.distance(from, to, { units: 'kilometers' })

summarized_distance= summarized_distance + distance

// get data

const points2Item = {

id: marker.id,

start: marker.id,

end: nextMarker.id,

speed: marker.speed,

lat: nextMarker.lat,

lng: nextMarker.lng,

latlng: [nextMarker.lat, nextMarker.lng],

distance: distance,

time: distance / marker.speed,

eta:null

}

points2Data.push(points2Item)

} // for (let i = 1; i < markerIds.length; i++) {

// get medium speed

let calculated_speed = summarized_distance / summarized_trip_time

let next_arrival_time= arrival_date

for (let i = 0; i < points2Data.length; i++) {

// I think I need to get raio of 1 marker distance from whole distance

let distance_ratio= summarized_distance / points2Data[i].distance

// I think I need to get calculate time ratio and add it to next_arrival_time, something like

next_arrival_time= next_arrival_time.add(CALCULATED_RATIO_TIME, 'hour')

// But how to calculate this CALCULATED_RATIO_TIME ?

points2Data[i].eta= next_arrival_time.format('YYYY-MM-DD HH:mm')
Код (JavaScript): как рассчитать это CALCULATED_RATIO_TIME?

Надеюсь, мой общий поток верен, но я столкнулся с этой проблемой... Спасибо!

Yul1


Рег
17 Jun, 2012

Тем
2

Постов
6

Баллов
26
  • 09, Jun 2024
  • #2
Я переделал это так:
 

let next_arrival_time= departure_date

for (let i = 0; i < points2Data.length; i++) {

// That was invalid I got ratio of distance

let distance_ratio= points2Data[i].distance / summarized_distance

// I got ratio of time

next_arrival_time= next_arrival_time.add( summarized_trip_time * distance_ratio , 'hour')

points2Data[i].eta= next_arrival_time.format('YYYY-MM-DD HH:mm')

} // for (let i = 1; i < points2Data.length; i++) {


Код (JavaScript): глядя на результаты, я получил результаты, очень похожие, как я и ожидал,

но есть

отъезд_дата = '2020-03-02 12:00:00'

и

прибытие_дата = '2020-03-03 12:00:00'

с несколькими пунктами я получил последний пункт:

2020-03-03 11:59

и я потерял 1 минуту - почему и как это исправить?
 

jarov1976


Рег
14 Oct, 2011

Тем
2

Постов
4

Баллов
24
Тем
49554
Комментарии
57426
Опыт
552966

Интересно