Nous avons développé une application ASP.NET qui fonctionne avec l'API Google Maps pour aider à la logistique et à la planification d'une petite compagnie maritime dans notre région. L'une des fonctionnalités est que l'entreprise saisisse une liste de clients et que le système regroupe toutes les adresses des clients en une série de points de cheminement, les envoie à Google et récupère les informations de direction pour l'itinéraire. Un problème que nous avons eu, c'est que beaucoup d'adresses dans notre base de données ne sont pas géniales et que souvent, Google Maps ne peut pas les traiter. Lorsque nous faisons cela, nous recevons un code d'erreur, mais je voudrais être en mesure de déterminer quel point de cheminement devait échouer (de cette façon, le client peut alors aller et corriger l'adresse dans la base de données).API Google Maps - Trouver un waypoint qui a causé une erreur
EDIT Voici un morceau de code qui gère l'initialisation et la gestion des erreurs en cours:
function initialize() {
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById("map"));
map.addControl(new GSmallMapControl());
gdir = new GDirections(map);
GEvent.addListener(gdir, "load", onGDirectionsLoad);
GEvent.addListener(gdir, "error", handleErrors);
if (document.getElementById("<%=hiddenWayPoints.ClientID %>").getAttribute("value") != '')
{
setDirections();
}
}
}
function setDirections() {
var waypoints = new Array();
var str = document.getElementById("<%=hiddenWayPoints.ClientID%>").getAttribute("value");
waypoints = document.getElementById("<%=hiddenWayPoints.ClientID %>").getAttribute("value").split(":");
gdir.loadFromWaypoints(waypoints, {getSteps:true});
}
function handleErrors(){
if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gdir.getStatus().code);
else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);
else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);
else if (gdir.getStatus().code == G_GEO_BAD_KEY)
alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);
else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);
else alert("An unknown error occurred.");
}
Le problème est que la méthode dans le GDirections objet ne semble pas LoadFromWayPoints() pour retourner le statut en fonction de chaque waypoint individuel, mais seulement de la liste entière (si l'un échoue, tout échoue). La seule vraie solution à laquelle je peux penser (sans effectuer de contrôles dans d'autres zones du système) est d'envoyer chaque waypoint à Google Maps dans une requête séparée et de vérifier sa validité avant d'envoyer toute la liste des waypoints pour l'objet GDirections, mais cela semble incroyablement inefficace (surtout lorsqu'il s'agit d'un plus grand nombre d'emplacements de clients).
Votre modification (que je suis en train de voir, désolé) a fourni de bien meilleures informations concernant mon problème particulier.Les deux points que vous avez soulevés étaient exactement ce qui me trottait dans la tête (en ce qui concerne les allers-retours supplémentaires si je le divise, et en vérifiant les adresses individuelles quand elles sont entrées ou sélectionnées pour la première fois). Ce que j'ai décidé est d'ajouter un bouton de vérification qui ne vérifiera que l'adresse individuelle qu'ils veulent (et seulement quand ils veulent). Cela permettra d'économiser beaucoup de contrôles inutiles, je crois. – TheTXI