javascript Google Maps V3 setDirections() 回调

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/7228400/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-25 23:23:20  来源:igfitidea点击:

Google Maps V3 setDirections() callback

javascriptjquerygoogle-mapscallback

提问by DIDi

Is there a posibility to get a callback when setDirections() is executed?

执行 setDirections() 时是否有可能获得回调?

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&libraries=places&language=<?=SYS_LANG;?>"></script>
<script type="text/javascript">
$(document).ready(function(){
    var destination = '<?=$_POST['address'];?>';
    var directionsDisplay = new google.maps.DirectionsRenderer({ draggable: true });
    var directionsService = new google.maps.DirectionsService();
    var geocoder;
    var infoWindowContent = '<div id="gmap_infowindow">infocontent</div>';
    var map;
    var marker;
    var position = new google.maps.LatLng(46.80193957664, 11.41754150390625);

    function calcRoute(start, end) {
        var request = {
            origin: start,
            destination: end,
            travelMode: google.maps.DirectionsTravelMode.DRIVING
        };
        directionsService.route(request, function(response, status) {
            if(status == google.maps.DirectionsStatus.OK) {
                directionsDisplay.setDirections(response);
            }
        });
    }
    function codeAddress(address) {
        if(geocoder) {
            geocoder.geocode({ 'address': address }, function(results, status) {
                if(status == google.maps.GeocoderStatus.OK) {
                    calcRoute(results[0].geometry.location, position);
                    document.getElementById('gmap_input').value = address;
                }
            });
        }
    }

    function initialize() {
        if(destination) geocoder = new google.maps.Geocoder();
        map = new google.maps.Map(document.getElementById('gmap_map'), {
            center: new google.maps.LatLng(46.80193957664, 11.41754150390625),
            zoom: 9,
            mapTypeId: google.maps.MapTypeId.TERRAIN
        });
        directionsDisplay.setMap(map);
        directionsDisplay.setPanel(document.getElementById("gmap_directions"));

        var autocomplete = new google.maps.places.Autocomplete(document.getElementById('gmap_input'));
        autocomplete.bindTo('bounds', map);

        var infowindow = new google.maps.InfoWindow({ maxWidth: 240 });
        var marker = new google.maps.Marker({
            position: position, 
            map: map,
            title:"Title"
        });

        infowindow.setContent(infoWindowContent);
        infowindow.open(map, marker);

        if(destination) codeAddress(destination);

        google.maps.event.addListener(marker, 'click', function() {
            infowindow.open(map, marker);   
        });
        google.maps.event.addListener(autocomplete, 'place_changed', function() {
            var place = autocomplete.getPlace();
            if (place.geometry.viewport) {
                map.fitBounds(place.geometry.viewport);
            } else {
                map.setCenter(place.geometry.location);
            }
            calcRoute(place.geometry.location, position);
        });
        google.maps.event.addListener(directionsDisplay, 'directions_changed', function() {
            $('#article').mCustomScrollbar('vertical', 350, 'easeOutCirc', 1.05, 'auto', 'yes', 'no', false);
        });
    }

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

    $('#gmap_map').css('height', '310px');
    $('#article form').submit(function(event){ event.preventDefault(); });
});
</script>

采纳答案by polarblau

You can bind an EventListener for directions_changedto your directionsDisplay:

您可以将 EventListener 绑定directions_changed到您的方向显示:

var directionsService = new google.maps.DirectionsService();
var directionsDisplay = new google.maps.DirectionsRenderer({ 'map': map });

//...

var request = {
  origin     : ...,
  destination: ...,
  travelMode : google.maps.DirectionsTravelMode.WALKING
};

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

// ...

google.maps.event.addListener(directionsDisplay, 'directions_changed', function() {
  // ... CALLBACK
});

Is that what you were after?

那是你追求的吗?