首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google Map Direction服务路由

Google Map Direction服务路由
EN

Stack Overflow用户
提问于 2016-10-14 18:17:57
回答 1查看 68关注 0票数 0

我想画两个points.Using - directionsService.route之间的最短路径图路线英里

EN

回答 1

Stack Overflow用户

发布于 2016-11-11 20:07:59

在第一次单击地图时创建起点,第二次在地图上单击时在地图上创建第二个点并绘制路径

代码语言:javascript
复制
 var map;
    var infowindow = new google.maps.InfoWindow();
    var wayA;[![enter image description here][1]][1]
    var wayB;
    var geocoder = new google.maps.Geocoder();
    var directionsDisplay = new google.maps.DirectionsRenderer({
        suppressMarkers: true,
        panel: document.getElementById('right-panel'),
        draggable: true
    });
    var directionsService = new google.maps.DirectionsService();
    var data = {};
    initMap();
    function initMap() {
        debugger;
        map = new google.maps.Map(document.getElementById('rmap'), {
            center: new google.maps.LatLng(23.030357, 72.517845),
            zoom: 15
        });
        google.maps.event.addListener(map, "click", function (event) {
            if (!wayA) {
                wayA = new google.maps.Marker({
                    position: event.latLng,
                    map: map,
                    icon: "https://chart.googleapis.com/chart?chst=d_map_pin_letter&chld=S|00FF00|000000"
                });
            } else {
                if (!wayB) {
                    debugger;
                    wayB = new google.maps.Marker({
                        position: event.latLng,
                        map: map,
                        icon: "https://chart.googleapis.com/chart?chst=d_map_pin_letter&chld=E|FF0000|000000"
                    });
                    calculateAndDisplayRoute(directionsService, directionsDisplay, wayA, wayB);
                }
            }
        });
    }
    function computeTotalDistance(result) {
        var total = 0;
        var myroute = result.routes[0];
        for (var i = 0; i < myroute.legs.length; i++) {
            total += myroute.legs[i].distance.value;
        }
        total = total / 1000;
        return total;
    }
    function computeTotalDuration(result) {
        var total = 0;
        var myroute = result.routes[0].legs[0].duration.text;
        return myroute;
    }
    function calculateAndDisplayRoute(directionsService, directionsDisplay, wayA, wayB) {
        debugger;
        directionsDisplay.setMap(map);
        google.maps.event.addListener(directionsDisplay, 'directions_changed', function () {
            debugger;
            calculateAndDisplayRoute(directionsService, directionsDisplay.getDirections(), wayA, wayB);
        });
        directionsService.route({
            origin: wayA.getPosition(),
            destination: wayB.getPosition(),
            optimizeWaypoints: true,
            travelMode: 'DRIVING'
        }, function (response, status) {
            if (status === 'OK') {
                debugger;
                var route = response.routes[0];
                wayA.setMap(null);
                wayB.setMap(null);
                pinA = new google.maps.Marker({
                    position: route.legs[0].start_location,
                    map: map,
                    icon: "https://chart.googleapis.com/chart?chst=d_map_pin_letter&chld=S|00FF00|000000"
                }),
                pinB = new google.maps.Marker({
                    position: route.legs[0].end_location,
                    map: map,
                    icon: "https://chart.googleapis.com/chart?chst=d_map_pin_letter&chld=E|FF0000|000000"
                });
                google.maps.event.addListener(pinA, 'click', function () {
                    infowindow.setContent("<b>Route Start Address = </b>" + route.legs[0].start_address + " <br/>" + route.legs[0].start_location);
                    infowindow.open(map, this);
                });
                google.maps.event.addListener(pinB, 'click', function () {
                    debugger;
                    infowindow.setContent("<b>Route End Address = </b>" + route.legs[0].end_address + " <br/><b>Distance=</b> " + computeTotalDistance(directionsDisplay.getDirections()) + " Km <br/><b>Travel time=</b> " + computeTotalDuration(directionsDisplay.getDirections()) + " <br/> " + route.legs[0].end_location);
                    infowindow.open(map, this);
                });
            } else {
                window.alert('Directions request failed due to ' + status);
            }
            directionsDisplay.setDirections(response);
        });
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40040731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档