两个地点之间的距离

时间:2015-10-13 02:51:15

标签: javascript html google-maps-api-3

<html>
<head>
<script src="http://maps.googleapis.com/maps/api/js"></script>
<script type="text/javascript">
function showMap()
{
    var directionsDisplay = new google.maps.DirectionsRenderer();
    var directionsService = new google.maps.DirectionsService();
    var map;

    var mapProp = 
    {
        mapTypeId : google.maps.MapTypeId.ROADMAP
    };

    map = new google.maps.Map(document.getElementById("googleMap"), mapProp);
    directionsDisplay.setMap(map);
    directionsDisplay.setPanel(document.getElementById('textDirection'));

    var start = document.getElementById('origin').value;
    var end = document.getElementById('destination').value;
    var directionsRequest = 
    {
        origin : start,
        destination : end,
        travelMode : google.maps.TravelMode.DRIVING
    }

    directionsService.route(directionsRequest, function(response, status)
    {
        if(status === google.maps.DirectionsStatus.OK)
        {
            directionsDisplay.setDirections(response);          
        }
        else
        {
            window.alert('Cannot'); 
        }
    });
}

function resetMap()
{
    document.getElementById("origin").value = '';
    document.getElementById("destination").value = '';
    document.getElementById("googleMap").style.display = 'none';
    document.getElementById("textDirection").style.display = 'none';
}  
</script>
<style>
#textDirection{
width: 300px;
height: 62%;
float: right;
overflow-y: auto;
margin-top: 1%;
margin-right: 29%;
}

#googleMap{
width : 50%;
height : 60%;
position : absolute;
top: 60px;
margin-left: 5px;
}
</style>
</head>

<body>
<form action="showmap1.php" method="post">
From: <input type="text" name="origin" id="origin" size="30" />&nbsp;
To:<input type="text" name="destination" id="destination" size="30" />
<input type="button" value="Search" onclick="showMap()" />
<input type="button" value="Reset" onclick="resetMap()" />
<div id="googleMap"></div>
<div id="textDirection"></div>
</form>
</body>
</html>

从上面的代码中,我有以下问题:
(1)当我单击“重置”按钮时,我搜索另一个地方并单击“搜索”按钮。但是,谷歌地图和文字方向不会显示如下图所示。

enter image description here 我应该如何修改它?

(2)当我第二次搜索位置时,文本方向路线重复显示如下图所示 enter image description here 我怎么才能让它只显示一次?

2 个答案:

答案 0 :(得分:2)

第一个问题:

因为你已经打电话了

document.getElementById("googleMap").style.display = 'none';
document.getElementById("textDirection").style.display = 'none';

因此下次不会显示。你需要在showMap()中设置元素显示。例如:

function showMap()
{
    document.getElementById("googleMap").style.display = 'inline';
    document.getElementById("textDirection").style.display = 'inline';
    ......
}

第二个问题:

您需要致电

directionsDisplay.setMap(map);
directionsDisplay.setPanel(document.getElementById('textDirection'));
函数initializeMap()中的

不应在showMap()函数中调用。您可以在正文initializeMap()上致电onload()。完整的答案在这里:

&#13;
&#13;
<html>
<head>
<script src="http://maps.googleapis.com/maps/api/js"></script>
<script type="text/javascript">
  
  var directionsDisplay;
  var directionsService;
  var map;
  
function initialize() 
{    
     directionsDisplay= new google.maps.DirectionsRenderer();
     directionsService = new google.maps.DirectionsService();
  
     var mapProp = 
     {
        zoom: 7,
        center: {lat: 41.85, lng: -87.65},
        mapTypeId : google.maps.MapTypeId.ROADMAP
     };

     map = new google.maps.Map(document.getElementById("googleMap"), mapProp);
     directionsDisplay.setMap(map);
     directionsDisplay.setPanel(document.getElementById('textDirection'));
}
function showMap()
{
    document.getElementById("googleMap").style.display = 'inline';
    document.getElementById("textDirection").style.display = 'inline';
    var start = document.getElementById('origin').value;
    var end = document.getElementById('destination').value;
    var directionsRequest = 
    {
        origin : start,
        destination : end,
        travelMode : google.maps.TravelMode.DRIVING
    }

    directionsService.route(directionsRequest, function(response, status)
    {
        if(status === google.maps.DirectionsStatus.OK)
        {
            directionsDisplay.setDirections(response);          
        }
        else
        {
            window.alert('Cannot'); 
        }
    });
}

function resetMap()
{
    document.getElementById("origin").value = '';
    document.getElementById("destination").value = '';
    document.getElementById("googleMap").style.display = 'none';
    document.getElementById("textDirection").style.display = 'none';
}  
</script>

<style>
#textDirection{
width: 300px;
height: 62%;
float: right;
overflow-y: auto;
margin-top: 1%;
margin-right: 29%;
}

#googleMap{
width : 50%;
height : 60%;
position : absolute;
top: 60px;
margin-left: 5px;
}
</style>
</head>

<body onload="initialize()">
<form action="showmap1.php" method="post">
From: <input type="text" name="origin" id="origin" size="30" />&nbsp;
To:<input type="text" name="destination" id="destination" size="30" />
<input type="button" value="Search" onclick="showMap()" />
<input type="button" value="Reset" onclick="resetMap()" />
<div id="googleMap"></div>
<div id="textDirection"></div>
</form>
</body>
</html>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

如果我理解了您的问题,那么您正在执行多次搜索,并希望DirectionsRenderer在每次搜索时都有一个清晰的平板。您应该能够删除地图并创建一个新实例以附加到div

if(status === google.maps.DirectionsStatus.OK)
{
    // clear the directionsDisplay
    directionsDisplay.setMap(null);
    directionsDisplay = new google.maps.DirectionsRenderer();
    directionsDisplay.setPanel(document.getElementById('textDirection'));

    directionsDisplay.setDirections(response);          
}
else
{
    window.alert('Cannot'); 
}