Маршрут прохождения X километров от места происхождения - PullRequest
0 голосов
/ 03 января 2012

Показ бега / пройденного расстояния.

Пользователь вводит местоположение и расстояние.

Я могу наложить круг с радиусом расстояния, введенного пользователем, с местоположением пользователя в качестве центральной точки.

Я могу установить четыре кардинальные точки (N, S, E, W) вокруг точки происхождения на расстоянии, заданном пользователем, и нарисовать маршруты к этим точкам, так что точка B находится в 100 км от точки A, но отображается маршрут, скажем, 145 км вдоль дороги.

Можно ли отобразить маршрут вдоль дороги ровно 100 км?

Отредактировано для обновления прогресса.

1 Ответ

0 голосов
/ 07 января 2012

Наконец решил это и подумал, что поделюсь.

Итак, пользователь указывает местоположение и расстояние;скажем, 100 км.

Код находит кардинальные точки 100 км, N, S, E, W точки отправления, а затем решает маршруты к каждой точке.Если решение по маршруту выполнено успешно, результат содержит массив точек от пункта отправления до пункта назначения.

     directionsService.route({ 
            origin: start, 
            destination: end, 
            travelMode: google.maps.DirectionsTravelMode.DRIVING 
          }, function(result) { 
            renderDirections(result); 
          }); 

    //don't use the google api DirectionsRender() to draw the route.
    //instead - result holds an array of lat/long points that make up the entire route.  Lets say it's latlong[123]
    //iterate through that array, getting a distance from point A to latlong[0], A to latlong[1], etc...
    //when that distance is >= user supplied distance, STOP, and draw a polyline from point A through the latlong points in the array latlong[78]

function computeTotalDistance(result) {
  var total = 0;
  var myroute = result.routes[0];
 if(myroute)
 {
 //create a LatLon from the Starting point
  var objGeo = new LatLon(Geo.parseDMS(myroute.overview_path[0].Qa), Geo.parseDMS(myroute.overview_path[0].Ra));

  //call get distance from the starting point to each other point in the array
  //each subsequent point should be a longer distance
   var arrPointsToDraw =[];
  for(var i = 1; i<=myroute.overview_path.length-1;i++)
  {
        try
        {
          var objGeo2 = new LatLon(Geo.parseDMS(myroute.overview_path[i].Qa), Geo.parseDMS(myroute.overview_path[i].Ra));
        }
        catch(err)
        {
            alert(err.description);
        }
        //here, total = kilometers
        total = objGeo.distanceTo(objGeo2,3);

        //add coordinates to our array of points that we are going to draw
        arrPointsToDraw.push(new google.maps.LatLng(objGeo2._lat, objGeo2._lon));

          if(parseInt(total) > parseInt(distance.value))
          {
                arrPointsToDraw.pop();//remove the last element of the array
                break;
          }
    }

      //at this point, arrPointsToDraw[] contains the lat/long points that are closest to our distance
      //without going over
      lines[lines.length] = new google.maps.Polyline({
                        path: arrPointsToDraw,
                        strokeColor: '#1589FF',
                        strokeOpacity: 1.0,
                        strokeWeight: 3
                    });

        lines[lines.length-1].setMap(map);  
    }//end if(myRoute)


}

В этом коде используются две фантастические коллекции найденных функций здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...