1

我试图让用户输入 2 个城市,使用谷歌的自动填充,然后在谷歌地图上画出它们之间的界线。自动填充对两个盒子都很好。起始位置有效(当用户输入一个城市时,地图会放大到该城市并出现标记),但输入结束位置时没有任何反应。如果有人看到问题出在哪里,我将不胜感激一些建议。

方向.html

<!DOCTYPE html>
<html>
<head>
<title>Google Maps JavaScript API v3 Example: Places Autocomplete</title>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places"></script>

<style>
  body 
    {
        font-family: sans-serif;
        font-size: 14px;
    }
  #lred { color: #FF0000;}
  #map-canvas 
    {
        height: 400px;
        width: 600px;
        margin-top: 0.6em;
    }
  start {border: 1px solid  rgba(0, 0, 0, 0.5);}
  start.notfound 
    {
        background-color: #F5A9A9;
        }
  end {border: 1px solid  rgba(0, 0, 0, 0.5);}
  end.notfound 
    {
        background-color: #F5A9A9;
        }
 </style>

 <script>
  var directionDisplay;
  var directionsService = new google.maps.DirectionsService();
  function initialize() 
    {
            directionsDisplay = new google.maps.DirectionsRenderer();
        var mapOptions = 
            {
                center: new google.maps.LatLng(39.8282, -98.5795),
                zoom: 4,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
        var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
            directionsDisplay.setMap(map);
        var options = 
            {
                types: ['(cities)'],
                componentRestrictions: {country: 'us'}
            };
        var start = document.getElementById('start');   
        var sAutocomplete = new google.maps.places.Autocomplete(start, options);
        var end = document.getElementById('end');   
        var eAutocomplete = new google.maps.places.Autocomplete(end, options);

        sAutocomplete.bindTo('bounds', map);
        eAutocomplete.bindTo('bounds', map);

        var infowindow = new google.maps.InfoWindow();
        var marker = new google.maps.Marker({ map: map });

        google.maps.event.addListener(sAutocomplete, 'place_changed', function() {
            infowindow.close();
            marker.setVisible(false);
            start.className = '';
            var place = sAutocomplete.getPlace();
                // Inform the user that the place was not found and return.
                if (!place.geometry) 
                    { 
                        start.className = 'notfound';
                        return;
                    }
                else 
                    {
                        map.setCenter(place.geometry.location);
                        map.setZoom(6);  // Why 17? Because it looks good.
                    }
            var image = 
                {
                    url: place.icon,
                    size: new google.maps.Size(71, 71),
                    origin: new google.maps.Point(0, 0),
                    anchor: new google.maps.Point(17, 34),
                    scaledSize: new google.maps.Size(35, 35)
                };
            marker.setIcon(image);
            marker.setPosition(place.geometry.location);
            marker.setVisible(true);
     });
    }

    function calcRoute() {
    var start2 = document.getElementById("start").value;
    var end2 = document.getElementById("end").value;
    var request = {
        origin:start2,
        destination:end2,
        travelMode: google.maps.TravelMode.DRIVING
    };
    directionsService.route(request, function(response, status) {
      if (status == google.maps.DirectionsStatus.OK) {
        directionsDisplay.setDirections(response);
      }
    });
   }

  google.maps.event.addDomListener(window, 'load', initialize);
  </script>
 </head>
 <body onload="initialize()">
 <div>
  <input id="start" onchange="calcRoute();" type="text" size="50">
  <input id="end" onchange="calcRoute();" type="text" size="50">
</div>
<div id="map-canvas"></div>
</body>
</html>
4

1 回答 1

1

在Komodo Edit等语法检查编辑器中加载您的 HTML 文件。它确定了这两行中的错误:

<input id="start" onchange="calcRoute(); type="text" size="50">
<input id="end" onchange="calcRoute(); type="text" size="50">

你看到了吗?两个标签中都缺少引号。

修复后,您的页面的行为会有所不同。现在它确实调用了以前根本没有调用过的calcRoute()函数。但是 JavaScript 控制台中显示了一个错误:

Uncaught ReferenceError: directionsService is not defined

果然,我没有directionsService在代码中的任何地方看到定义。

交给你...

于 2013-04-04T06:52:29.987 回答