谷歌地图API和谷歌地图位置显示在PHP中的不同位置

问题描述:

我正在将我的客户端网站与Google API集成,我有一项任务是使用用户的英国邮政编码验证用户地址,并获取地址,我已使用https://ideal-postcodes.co.uk/谷歌地图API和谷歌地图位置显示在PHP中的不同位置

所以,当一个用户输入一个邮政编码时,就会发送一个ajax请求到这个邮政编码的URL中,并附上用户输入的邮政编码。然后它从该邮编中返回一组地址,用户选择其中的一个。

现在,此邮编网址也会返回该特定邮政编码的经纬度。下一步,我使用了Google Maps API,它显示了从源到目的地的方向,距离和路线。

这一切都正常,但对于某些邮编,它显示错误的位置。

当我在Google地图中查看邮编时,它显示正常;因此不存在长期的经济问题。有相反的东西,我一直无法找到。

请帮我一把。我尝试过搜索和使用许多不同的编码方式,但仍然保持不变。

这是我的JS代码,其中我计算了多个距离。

var map; 
var latc; 
var lonc; 
var latd; 
var lond; 
var latr; 
var lonr; 
var directionsService; 
var directionsDisplay; 
var orgin; 
var destinations; 
var midway; 
var waypoints = []; 
var service; 
var stat = false; 
function initMap() 
{ 
    map = null; 
    waypoints=[]; 
    directionsDisplay = null; 
    directionsService = null; 
    orgin = ""; 
    destinations = ""; 
    latc = $("#lat").val(); 
    lonc = $("#lon").val(); 
    latd = $("#latd").val(); 
    lond = $("#lond").val(); 
    lonr = $("#lonr").val(); 
    latr = $("#latr").val(); 
    orgin = {lat: parseFloat(latc), lng: parseFloat(lonc)}; 
    if(latr==="0" && lonr==="0") 
    { 
     destinations = {lat: parseFloat(latd), lng: parseFloat(lond)}; 
    } 
    else 
    { 
     stat = true; 
     waypoints.push({ 
      location: new google.maps.LatLng(parseFloat(latd),parseFloat(lonr)), 
      stopover:true 
     }); 
     midway = {lat: parseFloat(latd), lng: parseFloat(lonr)}; 
     destinations = {lat: parseFloat(latr), lng: parseFloat(lonr)}; 
    } 
    console.log(orgin); 
    console.log(destinations); 
    directionsService = new google.maps.DirectionsService; 
    directionsDisplay = new google.maps.DirectionsRenderer; 
    map = new google.maps.Map(document.getElementById('map'), { 
     center: orgin, 
     zoom: 17, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 
    directionsDisplay.setMap(map); 
    calculateAndDisplayRoute(directionsService, directionsDisplay); 
} 
function calculateAndDisplayRoute(directionsService, directionsDisplay) 
{ 
     directionsService.route(
      { 
       origin: orgin, 
       destination: destinations, 
       waypoints: waypoints, 
       durationInTraffic: true, 
       optimizeWaypoints: true, 
       provideRouteAlternatives: true, 
       avoidHighways: false, 
       avoidTolls: false, 
       travelMode: google.maps.TravelMode.DRIVING 
      }, 
      function(response, status) 
      { 
       if (status === google.maps.DirectionsStatus.OK) { 
        directionsDisplay.setDirections(response); 
        distanceandduration(); 
       } 
       else 
       { 
        window.alert('Directions request failed due to ' + status); 
       } 
      } 
     ); 
} 
function distanceandduration() 
{ 
    if(latr==="0" && lonr==="0") 
    { 
     var a = new Array(orgin); 
     var b = new Array(destinations); 
    } 
    else 
    { 
     var a = new Array(orgin,midway); 
     var b = new Array(midway,destinations); 
    } 
    service = new google.maps.DistanceMatrixService(); 
    service.getDistanceMatrix({ 
     origins: a, 
     destinations: b, 
     travelMode: google.maps.TravelMode.DRIVING, 
     unitSystem: google.maps.UnitSystem.METRIC, 
     durationInTraffic: true, 
     avoidHighways: false, 
     avoidTolls: false 
    }, function (response, status) { 
     if (status == google.maps.DistanceMatrixStatus.OK && response.rows[0].elements[0].status != "ZERO_RESULTS") { 
      var distnumber = []; 
      var durationnumber = []; 
      var dvDistance = document.getElementById("showde"); 
      dvDistance.innerHTML = ""; 
      dvDistance.innerHTML = "<div class='row-fluid'><div class='control-group span12'><div class='controls'>"; 
      for(var i=0;i<response.rows.length;i++) 
      { 
       var distance = ""; 
       var duration = ""; 
       if(i===0) 
       {}else{ 
        dvDistance.innerHTML += "<br/>"; 
       } 
       distnumber[i] = Math.round(parseInt(response.rows[i].elements[i].distance.value)/1000); 
       durationnumber[i] = rectime(response.rows[i].elements[i].duration.value); 
       console.log(response.rows[i].elements[i].duration); 
       distance += response.rows[i].elements[i].distance.text; 
       duration += response.rows[i].elements[i].duration.text; 
       dvDistance.innerHTML += "<h2>Route "+(i+1)+"</h2>"; 
       dvDistance.innerHTML += "Distance: " + distance + "<br />"; 
       dvDistance.innerHTML += "Duration:" + duration; 
       dvDistance.innerHTML += "<hr>"; 
      } 
      dvDistance.innerHTML +="</div></div></div>"; 
      if(latr==="0" && lonr==="0") 
      { 
       enquirydetailreport(distnumber,durationnumber,'oneway'); 
      } 
      else 
      { 
       enquirydetailreport(distnumber,durationnumber,'return'); 
      } 
     } else { 
      alert("Unable to find the distance via road."); 
     } 
    }); 
} 
function rectime(sec) { 
    var hr = Math.floor(sec/3600); 
    var min = Math.floor((sec - (hr * 3600))/60); 
    sec -= ((hr * 3600) + (min * 60)); 
    sec += ''; min += ''; 
    while (min.length < 2) {min = '0' + min;} 
    while (sec.length < 2) {sec = '0' + sec;} 
    hr = (hr)?hr:'00'; 
    return hr+ ':' + min + ':' + sec; 
} 

而且注意,只有几个特定邮政编码发生此问题,邮编:

Example : Source : CW10 0QF 
Waypoint : G78 1EP 
Destination : CW10 0QF 

任何帮助表示赞赏。谢谢。

+0

我对你的问题做了一些副本编辑,试图帮助你得到更好的答案。 – sideshowbarker

对不起。我知道了。我刚刚为来源和目的地错误地提供了纬度和长度的值。像源A有latA和lonA,目标B有latB和lonB。但是由于我错误地将它写成了Source A latA和lonA,目标B有latb和lonA->这是我的错误。希望这将有助于未来的人。谢谢