2012-03-19 89 views
2

我目前有一個過濾器,用於渲染爲地圖圖層的融合表格,並且我希望在濾鏡更改時縮放以適合所有數據。在FusionTablesLayer中應用查詢後,是否可以遍歷標記?

我想我需要等到查詢被應用,然後遍歷標記以找到最小/最大x位置並平移到該矩形,但我在地圖api中看不到方法訪問圖層的標記。

任何人都有一個想法如何做到這一點?

回答

0

簡短的回答是否定的。對我來說,這是通過Maps API處理Fusion Tables的缺點之一。例如。想要顯示我最近查詢的結果數。但是,通過「無證」的JSONP API可以解決Fusion Tables的問題。我使用它取得了巨大的成功,但我必須相信Robin Kraft通知我這個API。 http://www.reddmetrics.com/2011/08/10/fusion-tables-javascript-query-maps.html

下面是一些代碼,它允許您通過AJAX JSONP請求重新執行最近的查詢,並根據結果執行所需的操作,例如計算邊界框。 注意:本示例使用JQuery作爲AJAX JSONP調用。此示例創建一個<表>顯示,但可以根據需要進行修改。

<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 Table行的計數是常見的,因此我添加了一個如何執行該操作的代碼段。

<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> 
1

如果你的數據是在一個融合的表,然後使用融合表的SQL API找到最大值/最小值VAL的緯度和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數組。正如我確定你知道的那樣,使用這些值來設置地圖的「中心」和「縮放」參數。