Google Elevation API - 拆分多个提升请求

时间:2015-06-29 19:26:00

标签: google-maps google-maps-api-3 google-api

我正在尝试将一个很大的提升请求拆分为多个请求,以避免每个请求中的1sec / request和512 coords限制。

我面临的问题是我的请求的回复并不总是按顺序收到。使用setInterval足够可靠吗? 以下是以错误顺序收到的导致问题的响应示例(在使用setInterval之前): https://www.dropbox.com/s/x00jdnprj6w7lga/correctMap.png?dl=0

这是我最新的代码:

function getCourseElevationData() {

    var path = bikePathCoordinates; //Bunch of lat,long coords
//  numberRequestToDo = Math.ceil(path.length/512); //TODO: split request in multiple 512 pack (google quotas)
    numberRequestToDo = 2; //Temporary for testing
    currentRequestNumber = -1; //will be at 0 on first call to get512Elevation
    arrayOfRequest = [];

    //1
    var ptrStart= 0;
    var pathSliced = path.slice(ptrStart, ptrStart+512);
    arrayOfRequest.push(pathSliced);

    //2
    ptrStart += 512;
    pathSliced = path.slice(ptrStart, ptrStart+512);
    arrayOfRequest.push(pathSliced);

    timerElevation = setInterval(request512Elevation, 1000);  //1sec
}

//---------------------------------------------------------
function request512Elevation() {

    alert("request512Elevation");

    // Still has request to be done
    if (currentRequestNumber+1 < numberRequestToDo) {

        if (!lastRequestElevationFailed) {
            currentRequestNumber++;
        }
        get512Elevation(arrayOfRequest[currentRequestNumber], currentRequestNumber);
    }
    // All request completed!
    else {
        clearInterval(timerElevation);
    }
}


//------------------------------------------------------------------------------------------------
function get512Elevation(pathSliced, requestNumber) {

    alert("get512PointsElevation" + requestNumber);

    var locationElevationRequest = {
            'locations': pathSliced
            }

    elevator.getElevationForLocations(locationElevationRequest, function (results, status) {

        alert("ResponseReceived for request:" + requestNumber + ", status" + status + " result length:" +  results.length);
        if (status != google.maps.ElevationStatus.OK) {
            lastRequestElevationFailed = true;
            return;
        }
        lastRequestElevationFailed = false;
        var elevations = results;
        // Extract the elevation samples from the returned results
        for (var i = 0; i < results.length; i++) {
         elevationPath.push(elevations[i].location);
        }
        for (var i = 0; i < results.length; i++) {
            dataElevation.addRow(['', elevations[i].elevation]);
        }

        //last reply received? if yes, we can display the elevation graph
        if (currentRequestNumber+1 == numberRequestToDo) {
            chart.draw(dataElevation, chartOptions);
        }
        //TODO: how to make sure response are received in correct order (1,2,3)? setInterval reliable enough?
     });
}

0 个答案:

没有答案