Как рассчитать соотношение расстояний - PullRequest
0 голосов
/ 02 марта 2020

С библиотекой JS anf turf js Мне нужно по нескольким маркерам рассчитать 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')

как рассчитать это CALCULATED_RATIO_TIME? Я надеюсь, что мой общий поток правилен, но я столкнулся с этой проблемой ...

ИЗМЕНЕНО: Я переделал это как:

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++) {

Lokking на результаты У меня есть результаты очень похоже, как я ожидаю, но havinf

departure_date= ‘2020-03-02 12:00:00’

и

arrival_date='2020-03-03 12:00:00'

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

2020-03-03 11:59

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

Спасибо!

...