gpt4 book ai didi

google-maps - Google Maps API - 查找导致错误的航点

转载 作者:行者123 更新时间:2023-12-03 07:42:39 26 4
gpt4 key购买 nike

我们一直在开发一个与 Google Maps API 配合使用的 ASP.NET 应用程序,以协助我们地区的一家小型航运公司进行物流和规划。其中一个功能是公司输入客户列表,系统会将所有客户地址打包为一系列航路点,发送给谷歌,并取回路线的方向信息。

我们一直遇到的一个问题是,我们数据库中的许多地址都不是很好,而且经常无法被谷歌地图处理。当我们这样做时,我们会收到一个错误代码,但我希望能够确定哪个航点是失败的(这样客户就可以去修复数据库中的地址)。

编辑 这是处理初始化和当前错误处理的代码块:

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.");

}

问题是 GDirections 对象中的 LoadFromWayPoints() 方法似乎不是基于每个单独的航点返回状态,而是仅从整个列表返回状态(如果一个失败,则全部失败)。

我能想到的唯一真正的解决方案(不在系统的其他区域执行检查)是在单独的请求中将每个航点发送到谷歌地图,并在发送 GDirections 对象的整个航点列表之前检查其有效性,但这似乎非常低效(尤其是在处理大量客户位置时)。

最佳答案

如果您使用 GClientGeocoder 对象来执行您的请求,那么您将为每个 getLocations 调用返回一个适当的响应代码:'

function logAddress (response)
{
if (!response || response.Status.code != 200)
{
// log the response.name and the response.Status.code
return;
}

// otherwise everything was fine
}

for (var i = 0; i < addresses.length; i++)
{
var geocoder = new GClientGeocoder ();
geocoder.getLocations (addresses[i], logAddress);
}

他们是 various response codes ,但我猜您想在收到 602 - 未知地址时通知用户。

编辑:

是的,对于整个路线请求,您只会收到一个 loadFromWaypoints 错误回调。您所做的不仅仅是一个简单的地理编码请求,您实际上是在为一系列地址值生成方向并将叠加层渲染到 map 上。我建议几个解决方案:
  • 您可以在 loadFromWaypoints 请求(如您所建议的那样)之前执行 getLocation 请求,然后使用为每个地址返回的纬度、经度数据作为 loadFromWayPoints 的参数。这将地理编码处理从 loadFromWayPoints 请求中分离出来,但为每个地理编码查找添加了额外的往返行程。当用户第一次输入地址时,这真的是你只想做一次的事情(见下)。
  • 当用户第一次输入地址信息时,您可以当时进行 GClientGeocoder getLocations 查找并获取纬度,经度与地址一起存储在您的数据库中。这样,如果用户输入的地址无法进行地理编码,那么您可以要求他们重新输入地址,或者让他们在谷歌地图上选择位置(并从中获取纬度、经度)。这并不能解决您现在拥有的地址数据的问题,但也许您可以编写一些代码来运行现有数据(离线)并标记数据库中无法进行地理编码的地址。
  • 关于google-maps - Google Maps API - 查找导致错误的航点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/773162/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com