google maps plot route between two points

匿名 (未验证) 提交于 2019-12-03 07:36:14

问题:

I have written this innocent javascript code, which lets the user create two markers and plot the route between them. It doesnt work, instead, it gives a weird error:

Uncaught TypeError: Cannot read property 'ya' of undefined 

Can someone suggest me whats wrong here:

// called upon a click GEvent.addListener(map, "click", function(overlay,point) {     if (isCreateHeadPoint) {         // add the head marker         headMarker = new GMarker(point,{icon:redIcon,title:'Head'});         map.addOverlay(headMarker);         isCreateHeadPoint = false;     } else {         // add the tail marker         tailMarker = new GMarker(point,{icon:greenIcon,title:'Tail'});         map.addOverlay(tailMarker);         isCreateHeadPoint = true;         // create a path from head to tail         direction.load("from:" + headMarker.getPoint().lat()+ ", " + headMarker.getPoint().lng()+ " to:" + tailMarker.getPoint().lat() + "," + tailMarker.getPoint().lng(), { getPolyline: true, getSteps: true });          // display the path         map.addOverlay(direction.getPolyline());     } }); 

回答1:

Following from your solution, you may not need to use map.addOverlay(direction.getPolyline()) at all. The polyline gets added to the map automatically in the following example:

<!DOCTYPE html> <html>  <head>     <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>     <title>Google Maps GDirections</title>     <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false"             type="text/javascript"></script>  </head>  <body onunload="GUnload()">      <div id="map" style="width: 400px; height: 300px"></div>      <script type="text/javascript">      var map = new GMap2(document.getElementById("map"));    var directions = new GDirections(map);    var isCreateHeadPoint = true;    var headMarker, tailMarker;     map.setCenter(new GLatLng(51.50, -0.12), 12);     GEvent.addListener(map, "click", function(overlay,point) {       if (isCreateHeadPoint) {          // add the head marker          headMarker = new GMarker(point);          map.addOverlay(headMarker);          isCreateHeadPoint = false;       }        else {          // add the tail marker          tailMarker = new GMarker(point);          map.addOverlay(tailMarker);          isCreateHeadPoint = true;          // create a path from head to tail          directions.load("from:" + headMarker.getPoint().lat()+ ", " +                           headMarker.getPoint().lng() +                           " to:" + tailMarker.getPoint().lat() + "," +                           tailMarker.getPoint().lng(),                           { getPolyline: true, getSteps: true });        }    });    </script>  </body>  </html> 

Screenshot:



回答2:

Oh I got it ... for some weird reason, I thought direction.load() is a blocking call. The following works:

// called upon a click GEvent.addListener(map, "click", function(overlay,point) {     if (isCreateHeadPoint) {         // add the head marker         headMarker = new GMarker(point,{icon:redIcon,title:'Head'});         map.addOverlay(headMarker);         isCreateHeadPoint = false;     } else {         // add the tail marker         tailMarker = new GMarker(point,{icon:greenIcon,title:'Tail'});         map.addOverlay(tailMarker);         isCreateHeadPoint = true;         // create a path from head to tail         direction.load("from:" + headMarker.getPoint().lat()+ ", " + headMarker.getPoint().lng()+ " to:" + tailMarker.getPoint().lat() + "," + tailMarker.getPoint().lng(), { getPolyline: true, getSteps: true });      } });  // called when the direction.load() returns GEvent.addListener(direction,"load", function() {     // display the path     map.addOverlay(direction.getPolyline()); }); 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!