Javascript 保留为地理编码发送的地址顺序

Javascript 保留为地理编码发送的地址顺序,javascript,asynchronous,geocoding,here-api,Javascript,Asynchronous,Geocoding,Here Api,我正在开发一个基于Here Maps的we应用程序 用户可以上载.xls电子表格文件以规划方向。这些文件最多可以有1000个地理位置正确的地址 如果我是正确的,为了能够使用这些地址规划路线,我首先需要使用以下地图的地理编码服务对它们进行地理编码: function geoCodeUploadedAddresses() { for(var i = 0; i< uploadedWaypoints.length; i++) { nokia.places.search.manag

我正在开发一个基于Here Maps的we应用程序

用户可以上载.xls电子表格文件以规划方向。这些文件最多可以有1000个地理位置正确的地址

如果我是正确的,为了能够使用这些地址规划路线,我首先需要使用以下地图的地理编码服务对它们进行地理编码:

function geoCodeUploadedAddresses() {
    for(var i = 0; i< uploadedWaypoints.length; i++) {
     nokia.places.search.manager.geoCode({
     searchTerm :  uploadedWaypoints[i],
     onComplete:  onGeocodeComplete
    }); 
    }

}

function onGeocodeComplete(data, requestStatus, requestId) {
    if (requestStatus == "OK") {        
        console.log(data);
    } else if(requestStatus == "ERROR") {
        console.log("error")
    }
}
函数geocodeuploadeddress(){
对于(变量i=0;i
问题是,它不会按照发送的顺序返回地址

例如,地理编码前的
uploadedWaypoints
数组:

  • 1081布达佩斯,布拉哈卢伊扎
  • 2119佩塞尔,拉扎尔·维尔莫斯·乌特卡
  • 1214布达佩斯,Szent Imre tér
  • 地理编码后,地址以完全随机的顺序返回:

    例:

  • 2119佩塞尔,拉扎尔·维尔莫斯·乌特卡
  • 1081布达佩斯,布拉哈卢伊扎
  • 1214布达佩斯,Szent Imre tér

  • 那么,我如何对所有这些地址进行地理编码,同时保持它们在数组中的相同顺序呢

    您可以使用
    jsoncallback
    参数创建请求,并为每个请求动态生成不同的回调,这样您就可以匹配正在执行的每个请求

    请参阅文档:

    jsoncallback

    xs:string-指定用于包装JSON响应的用户定义函数的名称

    此外,在客户端进行1000次地理编码操作需要大量工作,而且可能需要很长时间。此外,与您使用的密钥类型相关的限制也存在,因此您可能会面临在特定24小时内可以执行的请求方面的限制

    您可能会对“此处为企业提供”中的批处理地理编码感兴趣,因为它更适合您的情况。

    似乎适合您的需要

    下面是如何实现它的

    var getGeoCode = function(waypoint, callback) {
        nokia.places.search.manager.geoCode({
            searchTerm :  waypoint,
            onComplete:  function(data, requestStatus, requestId) {
                             if (requestStatus == "OK") {        
                                 callback(null, data);
                             } else if(requestStatus == "ERROR") {
                                 // You can either call with error to break pending calls or some error value - callback({error : requestStatus});
                                 console.log("error");
                                 callback(null, data);
                             }
                             // You need to callback on other cases too.
                         }
        });
    };
    
    
    async.map(uploadedWaypoints, 
              getGeoCode,
              function(err, results){
                   // results is now an array of geocodes for each address
              }
    );
    
    同时引用文件:

    。。。由于此函数将迭代器并行应用于每个项 不能保证迭代器函数将按顺序完成, 但是,结果数组的顺序将与原始数组的顺序相同 数组

    只是告诉你如何得到有序的结果。理想情况下,您应该研究批量地理编码服务


    嗯。

    你不能。您正在进行一系列单独的HTTP请求;没有办法让回复以任何特定的顺序返回。您需要将它们与原始数据相匹配,或者找到更适合您需要的批处理API。谢谢。我终于开始使用批处理API了,谢谢你提到它!