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

Google Maps API and Google Maps location shows different location in PHP

我正在将我的客户网站与 Google APIs 集成,我的任务是使用用户的邮政编码(英国)来验证用户地址,并获取地址,我使用过 https://ideal-postcodes.co.uk/.

因此,当用户输入邮政编码时,ajax 请求将发送到此邮政编码 URL,其中包含用户输入的邮政编码。它 returns 来自该邮政编码的一组地址,用户选择其中一个。

现在,此邮政编码 URL 也 returns 该特定邮政编码的纬度和经度。对于下一步,我使用了 Google 地图 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

感谢任何帮助。谢谢。

对不起伙计们。我知道了。我只是错误地为源和目的地提供了纬度和经度值。就像源 A 有 latA 和 lonA,目的地 B 有 latB 和 lonB。但是我错误地把它写成源 A latA 和 lonA,目标 B 有 latb 和 lonA-> 这是我的错误。希望这对将来的人有帮助。谢谢