从地理位置计算路线()gmaps v3错误设置起点

Posted

技术标签:

【中文标题】从地理位置计算路线()gmaps v3错误设置起点【英文标题】:error setting start point from geolocation calc route() gmaps v3 【发布时间】:2013-09-25 14:25:46 【问题描述】:

我使用该代码在我的应用程序中获取地理位置,并且在我移动时它也能正常工作。我添加了几行来创建从地理位置到具有固定纬度的终点(固定)点的计算。我不明白为什么不接受我的代码中的原点(fireBug 说我不能在其上调用属性 [object Object])但我无法弄清楚。 以下是关于 gmaps v3 的代码:

//image for the marker
var imageLoc = '../../img/bbb3.gif' 
var map;
//initialize the maps
function initialize() 
  //call directionsService and Display for the route
  var directionsService = new google.maps.DirectionsService();
  var directionsDisplay = new google.maps.DirectionsRenderer();
  //map option
  var mapOptions = 
    zoom: 8,
    center: new google.maps.LatLng(44.49489, 11.34262),
    mapTypeId: google.maps.MapTypeId.ROADMAP
  ;
  map = new google.maps.Map(document.getElementById('map'),
      mapOptions);
  //create the marker for the geolocation
  marker = new google.maps.Marker( 
          map: map,
          icon: imageLoc
  );
  //call updatePos() function
  updatePos();

  directionsDisplay.setMap(map);
  directionsDisplay.setPanel(document.getElementById('panel'));
      var request = 
        //origin is the marker of my geolocation
        origin: marker,
        //destination is a fxed position
        destination: new google.maps.LatLng(44.496099,11.340246),
        travelMode: google.maps.DirectionsTravelMode.WALKING
     ;

     directionsService.route(request, function (response, status) 
       if (status == google.maps.DirectionsStatus.OK) 
          directionsDisplay.setDirections(response);
        
      );

var i;
//here I set my marker (if i==0 -> first run)
function updatePos()
var options = 
    timeout: 60000, enableHighAccuracy: true
;
var myUpdatedPos = navigator.geolocation.watchPosition(onSuccess, onError, options);
function onSuccess(position) 
    if (i==0)
        marker = new google.maps.Marker(
                        position: new google.maps.LatLng(position.coords.latitude, position.coords.longitude),
                        map: map                       
                    );
    
    i++;
    //here I update the position
     newLatlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
    marker.setPosition(newLatlng);


// onError Callback receives a PositionError object
//
    function onError(error) 
        alert('code: '    + error.code    + '\n' +
        'message: ' + error.message + '\n');
    

google.maps.event.addDomListener(window, 'load', initialize);

有人知道为什么吗?

亲切的问候

布鲁斯

【问题讨论】:

您的 onSuccess 和 onError 函数嵌套在 updatePos 中 - 这是正确的吗? 我真的不明白你的 onSuccess 函数在做什么 - 如果 i = 0,它会在位置坐标处创建一个标记。然后它将标记更新为相同的坐标 嗨,Duncan,当 i=0 占据我位置的第一个纬度时,使用自定义图标创建一个标记,然后每 60000 毫秒更新一次。 【参考方案1】:

directionRequest 采用字符串(“地址”)或 google.maps.LatLng 作为起点和终点。 marker 是一个 google.maps.Marker 对象。

var request = 
    //origin is the marker of my geolocation
    origin: marker,
    //destination is a fxed position
    destination: new google.maps.LatLng(44.496099,11.340246),
    travelMode: google.maps.DirectionsTravelMode.WALKING
 ;

要获取标记的位置,请使用它的 getPosition 方法:

var request = 
    //origin is the marker of my geolocation
    origin: marker.getPosition(),
    //destination is a fxed position
    destination: new google.maps.LatLng(44.496099,11.340246),
    travelMode: google.maps.DirectionsTravelMode.WALKING
 ;

要在初始化时给标记一个位置,可以这样做:

 //create the marker for the geolocation
 marker = new google.maps.Marker( 
      map: map,
      position: map.getCenter(),
      icon: imageLoc
 );

【讨论】:

您好 geocodedzip 感谢您的回复。不幸的是,当我调用 .getPosition() 方法时它不起作用。 FireBug 说“值对于属性的 无效:未定义”,我仍然不明白为什么。你有其他建议吗?亲切的问候 你能创建一个展示问题的 jsfiddle 第一次调用 DirectionsService 时,标记的位置尚未设置(updatePos 是异步的),因此 marker.getPosition() 返回 undefined 并且您会收到该错误。仅在首次设置标记位置后调用路线服务。 好的,我明白了,但是如果我在“var mapOption”之前设置标记,它不会出现,我的意思是只显示标记静态而不是带有我设置的 updatePosition 的标记。我在标记之后编辑了调用方向服务的代码,但它仍然不起作用。您能告诉我如何编辑我的代码以使其正常工作吗? 这对我有用:`marker = new google.maps.Marker( position:map.getCenter(), map: map );`; fiddle/

以上是关于从地理位置计算路线()gmaps v3错误设置起点的主要内容,如果未能解决你的问题,请参考以下文章

使用谷歌地图v3验证两点(纬度或地址)服务器端之间的路线距离

警告:MapViewDirections 错误:GMAPS 路线请求错误:ZERO_RESULTS 仅用于最终目的地

百度地图怎么设置起点和终点

高德地图怎样自已规划驾车线路?

从 google map api v3 中删除路线

Mapbox Android:如何获取从当前位置到您选择的目的地的路线?