fitBounds и extend - появляются в совершенно другом месте

var classBounds = new google.maps.LatLngBounds();
var query = "";

query = "SELECT 'ROAD_NUMBER', 'geometry' FROM [TABLE_ID HERE] WHERE 'ROAD_NUMBER' CONTAINS IGNORING CASE '" + searchString + "' AND 'LINK_NUMBER' CONTAINS '" +searchStringLinkNo + "'";
var encodedQuery = encodeURIComponent(query);

// Construct the URL
var url = ['https://www.googleapis.com/fusiontables/v1/query'];
url.push('?sql=' + encodedQuery);
url.push('&key=[key]');
url.push('&callback=?');


// Send the JSONP request using jQuery
$.ajax({
    url: url.join(''),
    dataType: 'jsonp',
    success: function (data){

        var rows = data['rows'];

        if(rows){

            var classRoadGeo1       = rows[0][1].geometry.coordinates;
            var classRoadGeo2       = rows[rows.length - 1][1].geometry.coordinates;
            var classRoadGeoStart   = classRoadGeo1[0];
            var classRoadGeoEnd     = classRoadGeo2[classRoadGeo2.length - 1];

            var startHolder = classRoadGeoStart.toString();
            var endHolder = classRoadGeoEnd.toString();

            var bound1 = startHolder.split(",");
            var bound2 = endHolder.split(",");

            var coordinate1 = new google.maps.LatLng(bound1[1], bound1[0]);
            var coordinate2 = new google.maps.LatLng(bound2[1], bound2[0]);

            alert(bound1);
            alert(bound2);

            classBounds.extend(coordinate1);
            classBounds.extend(coordinate2);                

        }
        else{

            alert("Unable to locate any counter/classifier stations for the current selection.");
        }
    }
}); 

map.fitBounds(classBounds);

}

Весь код выше. Я взял геометрию из таблицы Fusion, преобразовал ее обратно в строку и сделал из нее объект LatLng. Однако, когда я запускаю fitBounds, я отправляюсь в Папа-Новую Гвинею, когда координаты фактически для Киамы в Сиднее, Австралия. Я не получаю ошибок. Есть идеи, что может быть не так?

1 ответ

Запрос ajax является асинхронным, поэтому при вызове map.fitBounds() границы еще не были расширены. Поместите последнюю строку "map.fitBounds(classBounds);" в конце вашего предложения if внутри функции успеха, и оно должно работать нормально.

Другие вопросы по тегам