Как привязать полилинию к дороге с помощью пешеходного режима в Картах Google? - PullRequest
3 голосов
/ 13 января 2011

Я хочу, чтобы пользователь нарисовал маршрут с полилиниями в GoogleMaps. Я нашел способ привязать полилинию (пример в ссылке, код ниже). Код работает со службой направлений для рисования ломаной линии на дороге, единственная проблема заключается в том, что это работает только с G_TRAVELMODE_DRIVING, но я хочу использовать G_TRAVELMODE_WALKING, а когда вы используете WALKING, вы должны указать карту и div в конструкторе направлений объект. Когда я это делаю, он автоматически удаляет последнюю строку и отображает только текущую строку. Я пробовал несколько вещей, таких как предоставление карты как нулевой, или опускание карты в конструкторе. Я также попытался дать вторую карту в конструкторе, получить полилинии из службы направлений и отобразить их справа карта. Но ничего не работает! Буду признателен, если кто-нибудь сможет мне помочь!

http://econym.org.uk/gmap/example_snappath.htm

if (GBrowserIsCompatible()) {

  var map = new GMap2(document.getElementById("map"));
  map.setCenter(new GLatLng(53.7877, -2.9832),13)
  map.addControl(new GLargeMapControl());
  map.addControl(new GMapTypeControl());
  var dirn = new GDirections();

  var firstpoint = true;
  var gmarkers = [];
  var gpolys = [];
  var dist = 0;


  GEvent.addListener(map, "click", function(overlay,point) {
    // == When the user clicks on a the map, get directiobns from that point to itself ==
    if (!overlay) {
      if (firstpoint) {
        dirn.loadFromWaypoints([point.toUrlValue(6),point.toUrlValue(6)],{getPolyline:true});
      } else {
        dirn.loadFromWaypoints([gmarkers[gmarkers.length-1].getPoint(),point.toUrlValue(6)],{getPolyline:true});
      }
    }
  });

  // == when the load event completes, plot the point on the street ==
  GEvent.addListener(dirn,"load", function() {
    // snap to last vertex in the polyline
    var n = dirn.getPolyline().getVertexCount();
    var p=dirn.getPolyline().getVertex(n-1);
    var marker=new GMarker(p);
    map.addOverlay(marker);
    // store the details
    gmarkers.push(marker);
    if (!firstpoint) {
      map.addOverlay(dirn.getPolyline());
      gpolys.push(dirn.getPolyline());
      dist += dirn.getPolyline().Distance();
      document.getElementById("distance").innerHTML="Path length: "+(dist/1000).toFixed(2)+" km. "+(dist/1609.344).toFixed(2)+" miles.";
    }
    firstpoint = false;
  });

  GEvent.addListener(dirn,"error", function() {
    GLog.write("Failed: "+dirn.getStatus().code);
  });

}
else {
  alert("Sorry, the Google Maps API is not compatible with this browser");
}

1 Ответ

0 голосов
/ 10 августа 2014

Я знаю, что это старый пост, но поскольку ответа не последовало, и я недавно работал над этим типом кода (и получил его работу), попробуйте поменять addListener с этим.

GEvent.addListener(map, "click", function(overlay,point) {
    // == When the user clicks on a the map, get directiobns from that point to itself ==
    if (!overlay) {   
      if (firstpoint) {
        dirn1.loadFromWaypoints([point.toUrlValue(6),point.toUrlValue(6)],{ getPolyline:true,travelMode:G_TRAVEL_MODE_WALKING});
      } else {
        dirn1.loadFromWaypoints([gmarkers[gmarkers.length-1].getPoint(),point.toUrlValue(6)],{ getPolyline:true,travelMode:G_TRAVEL_MODE_WALKING});
      }
    }
  });
...