Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从具有多个航路点的API地图创建google地图链接_Javascript_Google Maps_Google Maps Api 3 - Fatal编程技术网

Javascript 从具有多个航路点的API地图创建google地图链接

Javascript 从具有多个航路点的API地图创建google地图链接,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我已经构建了一个web应用程序,它使用GoogleMapsV3API构建一个包含多个航路点的地图 jQuery.getJSON(driverURL, function(dData){ var routeObject = {}; var lat = dData.Location.lat; var lng = dData.Location.lng; routeObject.origin = new google.maps.LatLng(lat

我已经构建了一个web应用程序,它使用GoogleMapsV3API构建一个包含多个航路点的地图

 jQuery.getJSON(driverURL, function(dData){
       var routeObject = {};
       var lat = dData.Location.lat;
       var lng = dData.Location.lng;
       routeObject.origin = new google.maps.LatLng(lat, lng);
       routeObject.destination = new google.maps.LatLng(endRoute.lat, endRoute.lng);
       routeObject.waypoints = waypoints;
       routeObject.travelMode = google.maps.TravelMode.DRIVING;
       routeObject.optimizeWaypoints = true;
       directionsService.route(routeObject, function(response, status) {
            if (status === google.maps.DirectionsStatus.OK) {
                 var directionsDisplay = new google.maps.DirectionsRenderer({
                       polylineOptions: {
                            strokeColor: colors[driverLines.length]
                       }
                 });
                 directionsDisplay.setMap(dMap);
                 directionsDisplay.setDirections(response);
            } else {
                 window.alert('Directions request failed due to ' + status);
            }
       });
  });
我保存了地图、航路点、起点和终点,但我希望能够生成一个谷歌地图可点击链接,指向我可以发送给用户的路线方向。我可以找到如何发送带有单个标记的链接,但无法找到如何生成带有完整路线方向的地图链接


感谢您的帮助。

我发现了这一点,实际上比我想象的要容易,但需要一些努力

首先,我把我拥有的一些航路点作为地址,而不是lat/lng点,并在maps.google.com上绘制了一张路线图。然后,我查看了该地图的URL是如何构建的。重新创建非常简单

URL就是地址,城市,州,邮政编码/航路点地址,城市,州,邮政编码/航路点/结束地址,城市,州,邮政编码。如果您使用lat/lng坐标作为起点、航路点和终点位置,则必须首先使用V3 api对其进行地理编码,然后从返回的结果中提取地址信息并将其插入URL中,但这是可行的

下面是我如何制作最终链接的,它有一个起点、一组航路点和一个终点位置。我从一个名为Data的JSON对象开始,该对象包含所有地址信息,并从中构建一个长字符串,格式为Google Maps期望的格式:

var dirs = ''
for(var x = 0; x<Data.length;x++){
    dirs += Data[x].Address + "," + Data[x].City + "," + Data[x].State + "," + Data[x].Zip + "/";
}
而dirLink将是一个完整的链接,它将提供从开始到结束的所有航路点的方向。Address。

不要忘记 手稿:

function initMap() {
    var pointA = new google.maps.LatLng(51.7519, -1.2578),
        pointB = new google.maps.LatLng(51.509865, -0.118092),
        pointC = new google.maps.LatLng(50.8429, -0.1313),
        myOptions = {
            zoom: 7,
            center: pointA
        },
        map = new google.maps.Map(document.getElementById('map-canvas'), myOptions),
        // Instantiate a directions service.
        directionsService = new google.maps.DirectionsService,
        directionsDisplay = new google.maps.DirectionsRenderer({
            map: map
        }),
        markerA = new google.maps.Marker({
            position: pointA,
            title: "point A",
            label: "A",
            map: map
        }),
        markerB = new google.maps.Marker({
            position: pointB,
            title: "point B",
            label: "B",
            map: map
        }),
        markerC = new google.maps.Marker({
            position: pointC,
            title: "point C",
            label: "C",
            map: map
        });

    // get route from A to B
    calculateAndDisplayRoute(directionsService, directionsDisplay, pointA, pointB, pointC);

}


function calculateAndDisplayRoute(directionsService, directionsDisplay, pointA, pointB, pointC) {
    var first = new google.maps.LatLng(51.509865, -0.118092); //we can get them from params.
    var request = {
        origin: pointA,
        destination: pointC,
        waypoints: [{location: first, stopover: false}
          ], //here array of waypoints
        optimizeWaypoints: true,
        travelMode: google.maps.DirectionsTravelMode.WALKING
    };
    directionsService.route(request, function (response, status) {
        if (status == google.maps.DirectionsStatus.OK) {
            directionsDisplay.setDirections(response);
            var route = response.routes[0];
            var summaryPanel = document.getElementById("directions_panel");
            summaryPanel.innerHTML = "";
            // For each route, display summary information.
            for (var i = 0; i < route.legs.length; i++) {
                var routeSegment = i + 1;
                summaryPanel.innerHTML += "<b>Route Segment: " + routeSegment + "</b><br />";
                summaryPanel.innerHTML += route.legs[i].start_address + " to ";
                summaryPanel.innerHTML += route.legs[i].end_address + "<br />";
                summaryPanel.innerHTML += route.legs[i].distance.text + "<br /><br />";
            }
        } else {
            alert("directions response " + status);
        }
    });     
}
initMap();
函数initMap(){
var pointA=new google.maps.LatLng(51.7519,-1.2578),
pointB=新的google.maps.LatLng(51.509865,-0.118092),
pointC=new google.maps.LatLng(50.8429,-0.1313),
myOptions={
缩放:7,
中心:波因塔
},
map=new google.maps.map(document.getElementById('map-canvas'),myOptions),
//实例化一个方向服务。
directionsService=新的google.maps.directionsService,
directionsDisplay=新建google.maps.DirectionsRenderer({
地图:地图
}),
markerA=new google.maps.Marker({
位置:pointA,
标题:“A点”,
标签:“A”,
地图:地图
}),
markerB=新的google.maps.Marker({
位置:B点,
标题:“B点”,
标签:“B”,
地图:地图
}),
markerC=new google.maps.Marker({
位置:pointC,
标题:“C点”,
标签:“C”,
地图:地图
});
//找到从A到B的路线
计算显示路线(方向服务、方向显示、点A、点B、点C);
}
函数calculateAndDisplayRoute(方向服务、方向显示、点A、点B、点C){
var first=new google.maps.LatLng(51.509865,-0.118092);//我们可以从params获取它们。
var请求={
产地:波因塔,
目的地:pointC,
航路点:[{位置:第一,中途站:false}
],//此处为航路点数组
航路点:对,
travelMode:google.maps.Directions travelMode.WALKING
};
路由(请求、功能(响应、状态){
if(status==google.maps.directionstatus.OK){
方向显示。设置方向(响应);
var route=response.routes[0];
var summaryPanel=document.getElementById(“方向面板”);
summaryPanel.innerHTML=“”;
//对于每个管线,显示摘要信息。
对于(var i=0;i”;
summaryPanel.innerHTML+=route.legs[i]。起始地址+“to”;
summaryPanel.innerHTML+=route.legs[i]。结束地址+“
”; summaryPanel.innerHTML+=route.legs[i].distance.text+“

”; } }否则{ 警报(“方向响应”+状态); } }); } initMap();
上述代码正是这样做的。它获取航路点并创建指示显示,并在地图上绘制方向。但这些文档并没有回答我提出的问题:如何创建一个指向谷歌地图的可点击链接,上面有这些航路点和路线。正如在maps.google.com链接中一样,该链接可以发送给用户所有的航路点和方向。创建带有方向的“谷歌地图”的唯一有文档记录的方法是通过嵌入API。不是好斗,而是你不理解这个问题。我正在使用GoogleMapsV3API在我的网站上创建地图。我网站上的地图上有所有的航路点和路线。这不是问题所在。问题是:是否有可能创建一个链接,允许用户在maps.google.com上获取相同的地图和航路点。我知道的唯一有文档记录的方法是使用嵌入API。有一些帖子详细介绍了如何使用“旧”谷歌地图界面实现这一点,这些可能暂时可以使用,但没有文档记录,因此可能会在某个时候停止使用。
function initMap() {
    var pointA = new google.maps.LatLng(51.7519, -1.2578),
        pointB = new google.maps.LatLng(51.509865, -0.118092),
        pointC = new google.maps.LatLng(50.8429, -0.1313),
        myOptions = {
            zoom: 7,
            center: pointA
        },
        map = new google.maps.Map(document.getElementById('map-canvas'), myOptions),
        // Instantiate a directions service.
        directionsService = new google.maps.DirectionsService,
        directionsDisplay = new google.maps.DirectionsRenderer({
            map: map
        }),
        markerA = new google.maps.Marker({
            position: pointA,
            title: "point A",
            label: "A",
            map: map
        }),
        markerB = new google.maps.Marker({
            position: pointB,
            title: "point B",
            label: "B",
            map: map
        }),
        markerC = new google.maps.Marker({
            position: pointC,
            title: "point C",
            label: "C",
            map: map
        });

    // get route from A to B
    calculateAndDisplayRoute(directionsService, directionsDisplay, pointA, pointB, pointC);

}


function calculateAndDisplayRoute(directionsService, directionsDisplay, pointA, pointB, pointC) {
    var first = new google.maps.LatLng(51.509865, -0.118092); //we can get them from params.
    var request = {
        origin: pointA,
        destination: pointC,
        waypoints: [{location: first, stopover: false}
          ], //here array of waypoints
        optimizeWaypoints: true,
        travelMode: google.maps.DirectionsTravelMode.WALKING
    };
    directionsService.route(request, function (response, status) {
        if (status == google.maps.DirectionsStatus.OK) {
            directionsDisplay.setDirections(response);
            var route = response.routes[0];
            var summaryPanel = document.getElementById("directions_panel");
            summaryPanel.innerHTML = "";
            // For each route, display summary information.
            for (var i = 0; i < route.legs.length; i++) {
                var routeSegment = i + 1;
                summaryPanel.innerHTML += "<b>Route Segment: " + routeSegment + "</b><br />";
                summaryPanel.innerHTML += route.legs[i].start_address + " to ";
                summaryPanel.innerHTML += route.legs[i].end_address + "<br />";
                summaryPanel.innerHTML += route.legs[i].distance.text + "<br /><br />";
            }
        } else {
            alert("directions response " + status);
        }
    });     
}
initMap();