我正在将客户网站与Google API集成在一起,我的任务是使用用户的邮政编码(UK)验证用户地址,并使用https://ideal-postcodes.co.uk/来获取地址。。
因此,当用户输入邮政编码时,会将带有用户输入的邮政编码的ajax请求发送到该邮政编码URL。然后从该邮政编码中返回一组地址,然后用户选择其中一个。
现在,该邮政编码URL还返回该特定邮政编码的经度和纬度。对于下一步,我使用了Google Maps API,该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->这是我的错误。希望这对以后的人有所帮助。谢谢
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句