使用谷歌地图API和phonegap显示当前位置+方向?

时间:2012-09-07 10:14:15

标签: javascript jquery google-maps cordova google-maps-api-3

我有以下要求

  1. 显示从原点到目的地的路线
  2. 显示用户的当前位置。
  3. 我正在创建一个包含路线的地图,然后在其上显示用户的当前位置。

    function showDirection(orgn, dstntn)
    {
        var directionsService = new google.maps.DirectionsService();
        var directionsDisplay = new google.maps.DirectionsRenderer();
    
        var map = new google.maps.Map(document.getElementById('displayMap'), {
            zoom : 7,
            mapTypeId : google.maps.MapTypeId.ROADMAP
        });
    
        directionsDisplay.setMap(map);
        directionsDisplay.setPanel(document.getElementById('displayDirections'));
    
        var request = {
            origin : orgn,
            destination : dstntn,
            travelMode : google.maps.DirectionsTravelMode.WALKING
        };
    
        directionsService.route(request, function(response, status) {
            if (status == google.maps.DirectionsStatus.OK) {
                directionsDisplay.setDirections(response);
            }
        });
        var win = function(position) {
                var lat = position.coords.latitude;
                var long = position.coords.longitude;
                var myLatlng = new google.maps.LatLng(lat, long);
                var iconimage="images/current_location_small.png";
                var marker = new google.maps.Marker({
                    position: myLatlng,
                    map: map
                    icon: iconimage
                });
    
                marker.setMap(map);
         };
    
         var fail = function(e) {
                alert('Can\'t retrieve position.\nError: ' + e);
            };
    
         var watchID = navigator.geolocation.getCurrentPosition(win, fail);
    }
    

    如果用户位于为显示路线而创建的地图内,则上述代码可以正常工作,但如果用户不在地图区域内,则不会显示其当前位置。

    我不知何故想要所有三个点1.起点,2。目的地和3.用户位置以适应地图。有没有办法可以缩放地图以适应所有三个点,或者以所有三个点都可见的方式创建原始地图。

1 个答案:

答案 0 :(得分:4)

marker.setMap(map);

之后添加以下内容
marker.setMap(map);
//Add these lines to include all 3 points in the current viewport
var bounds = new google.maps.LatLngBounds();
bounds.extend(orgn);
bounds.extend(dstntn);
bounds.extend(myLatlng);
map.fitBounds(bounds);