谷歌地图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
任何帮助表示赞赏。谢谢。
答
对不起。我知道了。我刚刚为来源和目的地错误地提供了纬度和长度的值。像源A有latA和lonA,目标B有latB和lonB。但是由于我错误地将它写成了Source A latA和lonA,目标B有latb和lonA->这是我的错误。希望这将有助于未来的人。谢谢
我对你的问题做了一些副本编辑,试图帮助你得到更好的答案。 – sideshowbarker