当前位置: 首页 > 知识库问答 >
问题:

未拾取标记位置-谷歌地图API v3

孙永嘉
2023-03-14

所以我试图找出两个标记之间的距离。在代码中,我左键单击一个标记,并将标记的位置保存到变量“start”。然后,我在左键单击上放置第二个标记,并将该标记的位置保存到可变endpoint。然后,我调用一个函数来计算标记之间的距离,但getPosition()函数似乎没有以正确的格式拾取标记。我有点不明白为什么它不起作用。

代码如下所示。任何帮助都将不胜感激。谢谢

var directionsDisplay;
var directionsService = new google.maps.DirectionsService();
var map;
var start;
var end;
var markersArray = [];
var originPlace = new google.maps.LatLng(0,0);
var destinationPlace = new google.maps.LatLng(0,0);

function initialize() {
  directionsDisplay = new google.maps.DirectionsRenderer();
  var chicago = new google.maps.LatLng(41.850033, -87.6500523);
  var mapOptions = {
    zoom:7,
    center: chicago
  }
  map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
  directionsDisplay.setMap(map);
  google.maps.event.addListener(map,'click',function(event) { 
    placeMarker(event.latLng); 
  }); 
}

function placeMarker(location) {
  if (markersArray.length == 0) {
            marker = new google.maps.Marker({
                position: location,
                map: map,
                title: location.toString()
            });

            // add marker in markers array
            markersArray.push(marker);
            start = marker.getPosition();
            alert(start);
        }
        else if(markersArray.length == 1)
        {
             marker = new google.maps.Marker({
                position: location,
                map: map,
                title: location.toString()
            });

            // add marker in markers array
            markersArray.push(marker);
            end = marker.getPosition();
            calcRoute(start, end);
        }
        else
        {

        }
}


function calcRoute(start, end) {
  originPlace = new google.maps.LatLng(start);
  destinationPlace = new google.maps.LatLng(end);

  var service = new google.maps.DistanceMatrixService();
  service.getDistanceMatrix(
    {
        origins: [originPlace],
        destinations: [destinationPlace],
        travelMode: google.maps.TravelMode.DRIVING
    }, callback);

}

function callback(response, status) {
  if (status != google.maps.DistanceMatrixStatus.OK) {
    alert('Error was: ' + status);
  } else {
    var origins = response.originAddresses;
    var destinations = response.destinationAddresses;
    var outputDiv = document.getElementById('outputDiv');
    outputDiv.innerHTML = '';

     for (var i = 0; i < origins.length; i++) {
      var results = response.rows[i].elements;
      for (var j = 0; j < results.length; j++) {
        outputDiv.innerHTML += origins[i] + ' to ' + destinations[j]
            + ': ' + results[j].distance.text + ' in '
            + results[j].duration.text + '<br>';
      }
    }
  }
}


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

共有1个答案

汪正雅
2023-03-14

两点。首先,您在开始和结束时都这样做:

        marker = new google.maps.Marker({
            position: location,
            map: map,
            title: location.toString()
        });

        start = marker.getPosition(); 

为什么不直接使用您已经知道的location值,而不必调用getPosition()?

        start = location

其次,start和end的值是LatLng对象,这是Marker类的getPosition()函数返回的值。

在你的calcRoute函数中,你试图从它们中创建LatLng对象,这是行不通的:

originPlace = new google.maps.LatLng(start);
destinationPlace = new google.maps.LatLng(end);

这应该是:

originPlace = start;
destinationPlace = end;

更新:此外,在构造请求对象时,您将originPlace和destinationPlace放入数组中,这会导致您在注释中提到的错误。这是我使用的代码,它对我有用。

function placeMarker(location) {
    if (markersArray.length == 0) {
        marker = new google.maps.Marker({
            position: location,
            map: map,
            title: location.toString()
        });

        // add marker in markers array
        markersArray.push(marker);
        start = location;
    } else if (markersArray.length == 1) {
        marker = new google.maps.Marker({
            position: location,
            map: map,
            title: location.toString()
        });

        // add marker in markers array
        markersArray.push(marker);
        end = location;
        calcRoute(start, end);
    }
}


function calcRoute(start, end) {
    originPlace = start;
    destinationPlace = end;

    var request = {
        origin: originPlace,  // NOTICE THIS ONE ISN'T IN AN ARRAY...
        destination: destinationPlace,
        travelMode: google.maps.TravelMode.DRIVING
    };
    directionsService.route(request, function (response, status) {
        if (status == google.maps.DirectionsStatus.OK) {
            directionsDisplay.setDirections(response);
        }
    });

    var service = new google.maps.DistanceMatrixService();
    service.getDistanceMatrix({
        origins: [originPlace],  // ... BUT THIS ONE STILL IS
        destinations: [destinationPlace],
        travelMode: google.maps.TravelMode.DRIVING
    }, callback);
}
 类似资料:
  • 我有谷歌地图搜索框,当我搜索特定的地方时,我想用(lat,lng)访问标记位置,当我通过拖放标记时,我可以准确地访问位置 但我希望在搜索完成时获得标记位置,而不使用&

  • 我有一张地图,上面有很多自定义的大标记。现在,我希望允许用户在地图上创建路径(显示为折线,稍后保存为地理坐标对列表)。 如果用户单击地图,我可以使用地图的setOnMapClickedListener方法收集这些位置。但是如果用户点击一个标记(setOnMarkerClickedListener),我只能检索标记的位置(通常是标记的ancor的位置)。

  • 所以我正在准备一个页面,其中有一个谷歌地图,有两个形式,即纬度和经度,和一个提交按钮。

  • 为了更熟悉Android编程,我一直在开发一款位置欺骗软件,我注意到我的应用程序似乎不会欺骗谷歌地图。它适用于Facebook和我测试过的其他一些应用程序,但即使关闭了Wifi和GPS,谷歌地图也知道我的确切位置,而不是我伪造的位置。我从Play Store(FakeLocation)下载了另一个欺骗应用,它似乎也没有欺骗谷歌。 这个人似乎也有同样的问题(Android Mock位置不适用于谷歌地

  • 我试图写一个地理位置网页,显示用户在地图上的大致位置。如果他们点击标记,他们可以把它拖到他们的确切位置。

  • 我知道周围也有类似的问题,但我无法找到一个可靠的答案,这是我的问题:有没有什么方法可以在没有谷歌地图引用的情况下将标记存储在ArrayList(或任何其他存储)中,然后简单地将它们添加到我的地图中? 背景:我有一个应用程序,目前有大约3500个标记。每个标记还有一个与之相关联的数据(布尔数组存储每个标记的数据,用于根据用户交互使它们可见/不可见)。目前,我使用扩展AsyncTask的类来获取这些标