Можно ли перебирать маркеры после применения запроса в FusionTablesLayer?

В настоящее время у меня есть фильтр, работающий с таблицей слияния, визуализируемой как слой карты, и я хочу изменить масштаб, чтобы наилучшим образом соответствовать всем данным при каждом изменении фильтра.

Я полагаю, что мне нужно подождать, пока запрос будет применен, а затем выполнить итерацию по маркерам, чтобы найти минимальное / максимальное значения x & y, и выполнить панорамирование к этому прямоугольнику, но я не вижу способа в API-интерфейсе Maps для доступа к маркерам слой.

У кого-нибудь есть идеи, как это сделать?

Ответы на вопрос(2)

нет. Для меня это один из недостатков работы с Fusion Tables через API Карт. Например. желая отобразить счетчик результатов моего последнего запроса. Но есть обходной путь с помощью «недокументированного» JSONP API для Fusion Tables. Я пользовался большим успехом, используя его, но я должен сказать Робину Крафт, что сообщил мне об этом API.http://www.reddmetrics.com/2011/08/10/fusion-tables-javascript-query-maps.html.

Вот некоторый код, который позволяет вам повторно выполнить ваш самый последний запрос с помощью запроса AJAX JSONP и делать то, что вы хотите, с результатами, такими как вычисление ограничивающего прямоугольника.Примечание: этот пример использует Jquery для вызовов AJAX JSONP. Этот пример создает отображение <table>, но может быть изменено при необходимости.

<script src="http:/,/code.jquery.com/jquery-1.7.1.min.js"></script> 

// Example call
getFTData(tableid, 'latitude,longitude', example_dataHandler);

<script>
// Globals same for all requests
var queryUrlHead = 'https://fusiontables.googleusercontent.com/fusiontables/api/query?sql=';
var queryUrlTail = '&jsonCallback=?'; // ? could be a function name

// getFTData()
// table_id - Fusion Table id MUST have public permissions
// col_list - comma separated list of FT column names
// successFunction - function to parse the CSV results (see exampleParser below)
//////////////////////////////
function getFTData(table_id, col_list, successFunction) {

    var query = "SELECT " + col_list + " FROM " + table_id;

    var queryurl = encodeURI(queryUrlHead + query + queryUrlTail);

    $.ajax({
        type: "GET",
        url:  queryurl,
        dataType: "jsonp",  // return CSV FustionTable response as JSON
        success: successFunction,
        error: function () {alert("AJAX ERROR for " + queryurl ); }
    });
}
function example_dataHandler(d) {
    // get the actual data out of the JSON object
    var cols = d.table.cols;
    var rows = d.table.rows;
    var row_count = 0;
    var results = '<table border="1" cellpadding="4">';
    results += '<tr>';
    for (var i = 0; i < cols.length; i++) {
        results += '<th>' + cols[i] + '</th>';
    }
    results += '</tr>';
    // loop through all rows to add them to the map
    for (var i = 0; i < rows.length; i++) {

        // Per the expected columns
        results += '<tr>';
        for(j=0; j < rows[i].length; j++)
        {
            results += '<td>' +  rows[i][j] + '</td>';
        }
        results += '</tr>';
        row_count++;
    }
    results += '</table>';
    results += '<br />';

    results += 'Row Count: ' + row_count + '<br />';;
    document.getElementById("program_select").innerHTML = results;
}

</script>

Поскольку получение количества последних возвращенных строк таблицы Fusion является обычным явлением, я добавляю фрагмент кода, как это сделать.

<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>

<script type="text/javascript">
var tableid = 3167783

var where = "WHERE type = 9";

getFTCount(current_table_id, where, displayCount);

// Globals same for all request
var queryUrlHead = 'https://fusiontables.googleusercontent.com/fusiontables/api/query?sql=';
var queryUrlTail = '&jsonCallback=?'; // ? could be a function name

///////////////////////////////
// Get Counts from Fusion Tables.
// table_id required
// where  optional  "WHERE column == 'value' " where clause for count()
// successFunction callback required
///////////////////////////////
function getFTCount(table_id, where, successFunction) {
    if(!table_id){
        alert("table_id required."); 
        return;
    }
    if(!successFunction){
        alert("successFunction callback required.");
        return;
    }
    var query = "SELECT count() FROM " + table_id;
    if(where){
        query += ' ' + where;
    }

    var queryurl = encodeURI(queryUrlHead + query + queryUrlTail);

    $.ajax({  
        type: "GET",
        url:  queryurl,
        dataType: "jsonp",  // return CSV FustionTable response as JSON
        success: successFunction,
        error: function () {alert("AJAX ERROR for " + queryurl ); }
    });
}

function displayCount(d) {
    var count = d.table.rows[0]; 
    alert(count);
}
</script>

то используйте sql api таблицы слияния, чтобы найти значения Max / Min для Lat и Lng соответственно:

https://www.googleapis.com/fusiontables/v1/query?sql=SELECT  
MINIMUM(Lat) AS MinLat, MAXIMUM(Lat) AS MaxLat,
MINIMUM(Long) AS MinLong, MAXIMUM(Long) AS MaxLong
FROM <table_id>

Смотрите здесь для получения полной информации о API:https://developers.google.com/fusiontables/docs/v1/sql-reference, (Одна вещь, которую нужно помнить, это ecodeURI это заявление SQL)

Это возвращает значения для массива json. И, как я уверен, вы знаете, используйте эти значения, чтобы установить параметры «center» и «zoom» вашей карты.

Ваш ответ на вопрос