我目前有一個過濾器,用於渲染爲地圖圖層的融合表格,並且我希望在濾鏡更改時縮放以適合所有數據。在FusionTablesLayer中應用查詢後,是否可以遍歷標記?
我想我需要等到查詢被應用,然後遍歷標記以找到最小/最大x位置並平移到該矩形,但我在地圖api中看不到方法訪問圖層的標記。
任何人都有一個想法如何做到這一點?
我目前有一個過濾器,用於渲染爲地圖圖層的融合表格,並且我希望在濾鏡更改時縮放以適合所有數據。在FusionTablesLayer中應用查詢後,是否可以遍歷標記?
我想我需要等到查詢被應用,然後遍歷標記以找到最小/最大x位置並平移到該矩形,但我在地圖api中看不到方法訪問圖層的標記。
任何人都有一個想法如何做到這一點?
簡短的回答是否定的。對我來說,這是通過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>
如果你的數據是在一個融合的表,然後使用融合表的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數組。正如我確定你知道的那樣,使用這些值來設置地圖的「中心」和「縮放」參數。