【问题标题】:html code for Google Maps directions not working谷歌地图方向的html代码不起作用
【发布时间】:2013-03-26 01:50:05
【问题描述】:

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

Directions.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>

【问题讨论】:

    标签: html css api google-maps


    【解决方案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

    交给你...

    【讨论】:

    • 谢谢。这些都是我的明显错误。我认为是时候使用语法编辑器了哈哈。但即使修复了所有这些错误,我仍然遇到同样的问题。
    • 嗯...我刚刚从更新的问题中尝试了您的最新代码,它工作正常。键盘界面还不是 100%,但是如果我用鼠标选择一个自动完成条目,它会很好用。您可以通过多种方式修复键盘交互,例如将输入字段放入带有提交按钮的表单中,并在 JavaScript 中处理表单提交(调用 calcRoute 并禁止默认表单操作)。
    • 等等,当你运行我的代码时,它连接了 2 个点?自动完成以前可以工作,只是方向部分没有。
    • 是的,只要我使用鼠标从每个自动完成列表中进行选择,它至少可以在 Chrome 中使用。其他浏览器没试过。更新:刚试过 Firefox,在那里也可以正常工作。
    • 嗯,这很奇怪。当我在 safari 上运行它时它根本不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    相关资源
    最近更新 更多