Javascript 使用google direction API的目的地阵列
我是javascript新手,我对google directions有一个问题: 我有一个包含不同位置坐标的表格,如:Javascript 使用google direction API的目的地阵列,javascript,google-maps-api-3,google-directions-api,Javascript,Google Maps Api 3,Google Directions Api,我是javascript新手,我对google directions有一个问题: 我有一个包含不同位置坐标的表格,如: lieux = [ {"nom": "place1", "icon": "galerie.png", "coordinates": [46.2018773, 6.1396896]}, {"nom": "place2", "icon": "galerie.png", "coordinates": [46.1989726, 6.1371983]}, {"no
lieux = [
{"nom": "place1", "icon": "galerie.png", "coordinates": [46.2018773, 6.1396896]},
{"nom": "place2", "icon": "galerie.png", "coordinates": [46.1989726, 6.1371983]},
{"nom": "place3", "icon": "galerie.png", "coordinates": [46.1976313, 6.1382951]},
{"nom": "place4", "icon": "galerie.png", "coordinates": [46.1997394, 6.1388766]}
];
我想为每个地方创建一个方向按钮来计算到它的行程。这是计算路径的函数,它位于initialiser()之外
函数错误函数(错误){
console.log(错误);
};
功能成功功能(位置){
myLatitude=位置坐标纬度;
我的经度=位置坐标经度;
};
calcul_itin=函数(){
原点=Mylatude+“,”+myLongitude;
对于(i=0;i
但是,每个按钮都会计算表中最后一个位置的行程,我不知道如何安排我的代码来更改它。您不断为每个新请求覆盖DirectionService。在服务器返回请求之前,您无法覆盖它。因此,要么链接您的请求(在前一个请求完成时调用下一个请求),要么为每个请求创建一个单独的DirectionsService对象 请注意:
如果我理解正确,您需要计算从一个位置到多个目的地的最短(或最快)路径,并且您需要有详细的路径信息,以便在地图上实际显示这些路径 我认为你的问题是,你只要求一次从出发地到目的地列表中最后一个目的地的旅行。所有其他目的地都被覆盖,因为对方向服务的请求位于通过目的地的循环之后。您需要使用自己的实现或单独的DirectionsRenderer为每次旅行发出单独的请求,并且每个方向的结果都需要单独呈现。因此,对方向服务的调用需要位于
for
循环内。您还需要管理渲染器,因为您可能希望在新调用calcul\u itin
时删除旧的渲染器
下面的代码说明了这种方法。也许,你会想要个性化的路径和标记
var directionRenderers = []; // array for keeping track of renderers
calcul_itin = function(origin) {
// Remove previous renderers
for (var i=0; i < directionRenderers.length; i++) {
directionRenderers[i].setMap(null);
}
directionRenderers = [];
// create a request for each destination
for (i = 0; i < lieux.length; i++) { // guess destinations are in lieux...
var dest = lieux[i].coordinates[0] +','+ lieux[i].coordinates[1];
var request = {
origin: origin, // assume origin is an instance of google.maps.LatLng
destination: dest,
travelMode: google.maps.DirectionsTravelMode.WALKING
};
var directionsService = new google.maps.DirectionsService();
directionsService.route(request, function(response, status){
if(status == google.maps.DirectionsStatus.OK){
// create a new DirectionsRenderer for this route
var dirRenderer = new google.maps.DirectionsRenderer({map: map});
dirRenderer.setDirections(response);
directionRenderers.push(dirRenderer); // track the renderers
}
});
}
};
var directionrenders=[];//用于跟踪渲染器的数组
计算=函数(原点){
//删除以前的渲染器
对于(var i=0;i
还要注意的是,它有配额和速率限制,并且上面的方法会对此服务发出许多请求,因此请注意不要使用太多的目的地
如果您只需要多个起点/目的地的距离和旅行时间,最好使用。但是,在这种情况下,您将无法获得详细的路径信息。请看一看,我几次前问了一个类似的问题,它可以帮助您:
var directionRenderers = []; // array for keeping track of renderers
calcul_itin = function(origin) {
// Remove previous renderers
for (var i=0; i < directionRenderers.length; i++) {
directionRenderers[i].setMap(null);
}
directionRenderers = [];
// create a request for each destination
for (i = 0; i < lieux.length; i++) { // guess destinations are in lieux...
var dest = lieux[i].coordinates[0] +','+ lieux[i].coordinates[1];
var request = {
origin: origin, // assume origin is an instance of google.maps.LatLng
destination: dest,
travelMode: google.maps.DirectionsTravelMode.WALKING
};
var directionsService = new google.maps.DirectionsService();
directionsService.route(request, function(response, status){
if(status == google.maps.DirectionsStatus.OK){
// create a new DirectionsRenderer for this route
var dirRenderer = new google.maps.DirectionsRenderer({map: map});
dirRenderer.setDirections(response);
directionRenderers.push(dirRenderer); // track the renderers
}
});
}
};