Как найти местоположение по маршруту с Google Maps? - PullRequest
3 голосов
/ 01 февраля 2011

Мне удалось использовать часть DirectionServices API Карт Google, чтобы найти маршрут между двумя адресами. Учитывая начальный адрес и расстояние (например, 5 миль), я хотел бы нанести получившуюся точку (например, 5 миль по маршруту) на карту.

Кто-нибудь знает, как этого добиться?

1 Ответ

7 голосов
/ 01 февраля 2011

Извлечение http://code.google.com/apis/maps/documentation/flash/reference.html#Route

Объекты этого класса создаются объектом Directions для хранения информации об одном маршруте в результате маршрута.

Это позволяетвам использовать метод getStep.Шаги предоставляют вам расстояние, длительность, длину и т. Д.

http://code.google.com/apis/maps/documentation/flash/reference.html#Step

Чтобы получить точку в (например) 5 милях, вы можете получить две точки, ближайшие к этому расстоянию.Из того, что я понимаю, эти точки должны быть прямой видимости (то есть точка-точка без поворотов), поэтому вы должны быть в состоянии экстраполировать правильную точку между ними, используя математику.здесь: http://groups.google.com/group/google-maps-js-api-v3/browse_thread/thread/a475d03a28865614/23ed9e966d10cdd8?pli=1

Вот пример анимации, которая показывает пробег, поэтому я был бы удивлен, если бы вы не могли заставить что-то работать, проходя по точкам, пока не найдете значение, которое выхочу (источник на этой странице должен помочь вам начать работу): http://econym.org.uk/gmap/example_cartrip.htm

Извините, у меня нет более конкретного ответа - я постараюсь написать код для этого, когда у меня будет время.

РЕДАКТИРОВАТЬ: если вы посмотрите на пример car_trip, вы найдете следующее:

// === A method which returns the Vertex number at a given distance along the path ===
// === Returns null if the path is shorter than the specified distance ===
GPolygon.prototype.GetIndexAtDistance = function(metres) {
  // some awkward special cases
  if (metres == 0) return this.getVertex(0);
  if (metres < 0) return null;
  var dist=0;
  var olddist=0;
  for (var i=1; (i < this.getVertexCount() && dist < metres); i++) {
    olddist = dist;
    dist += this.getVertex(i).distanceFrom(this.getVertex(i-1));
  }
  if (dist < metres) {return null;}
  return i;
}

Это должно позволить вам построить нужную точку.

...