2014-03-07 37 views
0

我正在開發基於Here Maps的應用程序。保留地址發送地址的順序

用戶可以上傳.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") 
    } 
} 

的問題,這是它不會以與發送順序相同的順序返回地址。

例如,地理編碼前uploadedWaypoints數組:

  1. 1081布達佩斯,布萊哈盧伊佐TER
  2. 2119佩採爾,Lazar的維爾莫什utca街
  3. 1214布達佩斯,森特伊姆雷TER

後對地址進行地理編碼時會以完全隨機的順序返回:

例:

  1. 2119佩採爾,拉扎爾維爾莫什utca街
  2. 1081布達佩斯,布萊哈盧伊佐TER
  3. 1214布達佩斯,森特·伊姆雷TER

所以,我怎麼能進行地址解析所有這些地址的同時,保持它們在數組中的順序?

+0

你不能。您正在進行一系列單獨的HTTP請求;沒有辦法讓響應以任何特定的順序回來。您需要將它們與原始數據進行匹配,或者找到更適合您需求的批量API。 – kielni

回答

1

您可以使用jsoncallback參數創建請求,併爲每個請求動態生成不同的回調,以便您可以匹配您正在執行的每個請求。

參見文檔:

http://developer.here.com/rest-apis/documentation/geocoder/topics/resource-geocode.html

jsoncallback

的xs:串 - 指定用於包裹JSON響應用戶定義的函數的名稱。

此外,在客戶端進行1000次地理編碼操作還有很多工作要做,可能需要很長時間。此外還有與您使用的密鑰類型相關的限制,因此您可能會面臨在特定的24小時內可以執行的請求方面的限制。

您可能會感興趣的在這裏爲企業提供的批量地理編碼,在您的情況下會更好。

+0

謝謝。我終於與批處理API一起去了,謝謝你提到它! – PeterInvincible

0

async library似乎符合您的需求。

下面介紹如何實現它。

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 
      } 
); 

從文檔還引用:

...因爲這個功能適用迭代器並行存在 每個項目都不能保證迭代器功能將依次但是完整的, results array將與原始 陣列的順序相同。

只是顯示你的路怎麼走排序結果。理想情況下,您應該查看批量地理編碼服務。

HTH。