Google API正在计算无效地址的距离

时间:2016-02-28 17:10:08

标签: javascript google-maps jsp geolocation

我已经使用Google Maps API实现了一个程序来计算从当前位置到目标位置的距离,但是当我传递无效时,地址就像" asdfff,gurgaon,haryana &#34 ;它不存在,它正在计算这个位置的距离,理想情况下也应该抛出错误。

请帮助纠正此问题

<html>
    <%
try
{
    String address="asdfff,gurgaon,haryana";
    %>
    <body onLoad="getLocation()">



        <p id="demo"><font face=calibri color=blue>Please wait..We are calculating the distance from <%=address%> to your current location..</font></p>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script>

var x = document.getElementById("demo");

function getLocation() {

    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(showPosition);
    } else { 
        x.innerHTML = "Geolocation is not supported by this browser.";        
    }
}

function showPosition(position) {


var geocoder = new google.maps.Geocoder();
var address = "<%=address%>";

geocoder.geocode( { 'address': address}, function(results, status) {

  if (status != google.maps.GeocoderStatus.OK) {
var xx = document.getElementById("demo");
xx.innerHTML = '<font face=calibri color=red size=5><br> <br><br><b>Sorry, Unable to find out the destination.</b></font>';
        }
  if (status == google.maps.GeocoderStatus.OK) {

    var latitude = results[0].geometry.location.lat();
    var longitude = results[0].geometry.location.lng();
    var R = 6371;
    var dLat = (latitude-position.coords.latitude) * (Math.PI/180);
    var dLon = (longitude-position.coords.longitude) * (Math.PI/180);
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos((position.coords.latitude) * (Math.PI/180)) * Math.cos((latitude) * (Math.PI/180)) * Math.sin(dLon/2) * Math.sin(dLon/2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    var d = R * c; 

function displayLocation(latitude,longitude,distance,adr){
        var request = new XMLHttpRequest();
        var method = 'GET';
//      var sourcelocation = "london";
        var url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='+latitude+','+longitude;
        var async = true;

        request.open(method, url, async);
        request.onreadystatechange = function(){
          if(request.readyState == 4 && request.status == 200){
            var data = JSON.parse(request.responseText);
            var address = data.results[0];
            //sourcelocation = address.formatted_address;

            var xx = document.getElementById("demo");
            var time = distance/50;
            xx.innerHTML = '<font face=calibri color=green size=4><br> <b>Your Current Location :</b><br>'+address.formatted_address+'<BR><br><b>Destination Address:</b><br>'+adr+'<br><BR><b>Calculated distance from your location:</b><br>'+distance+' Km<br><br><b>Estimated time by Car:<br></b>'+time+' Hrs</font>';

          }

        };
            var retresults = "Source Location :"+address.formatted_address+" Destination Address:"+adr+" Distance:"+distance+" km";

        request.send();
      return retresults;

      };

var adr = address;
var home = displayLocation(position.coords.latitude,position.coords.longitude,d.toFixed(2),adr); 
} 

}
        ); 

}
</script>
<%
} catch (Exception e)
{
    out.println("<font face=calibri color=red>Oops. There is some problem to find out the address details</font>");
}
%>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

地理编码器结果包含属性partial_match

如果设置了true,则表示完整提供的地址与返回的位置不匹配。

使用此属性检查完整地址是否为&#34;无效&#34;(至少谷歌未知)