2015-04-01 56 views
0

我已經定期使用Google Fusion Tables幾年了,雖然我還是個新手。Fusion Tables Layer查詢永久性瓷磚加載問題

我最近被指控在地理空間關係中查詢我的一個表格。我發現了一個很好的例子,它的功能與我需要的完全一樣,並且使用我的tableId更新了代碼,確保位置列完全相同(拼寫,大寫等),但是當我嘗試更新地圖圖層時,它給我一個永久的「數據可能仍然在加載,拖動或刷新找出!」在瓷磚上。我的表是公開的,數據可下載...我不確定我錯過了什麼。

我很難過。我已經包含了下面的代碼,並簡單地使用//來禁用示例中的tableid。

任何援助/建議將不勝感激! 〜妮可

<html> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 

<title>Austin TX Delivery Locations</title> 

<style> 
    body { font-family: Arial, sans-serif; padding: 0px; margin: 0px; } 
    #map_canvas { height: 80%; width:100%; } 
#query{font-family:courier;} 

</style> 

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript"> 

var tableid = '11QnfV_1v3N5GQs70e13SRxGR6_zYOSFJlCpMuD3C'; 
//var tableid = 790805; 

function initialize() { 

    map = new google.maps.Map(document.getElementById('map_canvas'), { 
    center: new google.maps.LatLng(30.35, -97.70), 
    zoom: 10, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 

    google.maps.event.addListener(map, 'click', function(event) { 
    latlng = event.latLng; 
    updateQuery(); 
    }); 

    query = { 
     select: 'address', 
     from: tableid 
    } 
    layer = new google.maps.FusionTablesLayer(tableid); 
    layer.setMap(map); 

} 


function updateQuery(){ 
    var limit = document.getElementById('limit').value; 
    var lat = parseInt(latlng.lat() * 1000)/1000; 
    var lng = parseInt(latlng.lng() * 1000)/1000; 
    query = "SELECT address FROM " + tableid; 
    query += " ORDER BY ST_Distance(address, LatLng(" + lat + ',' + lng + "))"; 
    query += " LIMIT " + limit; 
    layer.setQuery(query); 
    document.getElementById('query').innerHTML = layer.getQuery(); 
} 

</script> 
</head> 
<body onLoad="initialize()"> 
    <div id="map_canvas"></div> 
    <input type="text" id="limit" value="50" onChange="javascript:updateQuery()"/> 
    <div id="query"></div> 
</body> 
</html> 
+0

工作示例在哪裏? – geocodezip 2015-04-01 20:47:11

回答

0

當你看到「」數據仍然可以被加載。」消息,它通常意味着你的查詢是無效的。

你舉的例子有一個古老的‘數字’表的編號,語法新的 「加密」 中的表ID是不同的(並且作爲currently documented

 
Constructor           Description 
FusionTablesLayer(options:FusionTablesLayerOptions) A layer that displays data from a Fusion Table. 

變化:

query = { 
    select: 'address', 
    from: tableid 
} 
layer = new google.maps.FusionTablesLayer(tableid); 
layer.setMap(map); 

要:

query = { 
    select: 'address', 
    from: tableid, 
}; 
layer = new google.maps.FusionTablesLayer({query: query }); 
layer.setMap(map); 

而且在updateQuery查詢到:

query = { 
    select: 'address', 
    from: tableid, 
    limit: limit, 
    orderBy: ST_Distance(address, LATLNG(" + lat + ',' + lng + "))" 
} 
layer.setQuery(query); 

working fiddle

代碼片段:

var tableid = '11QnfV_1v3N5GQs70e13SRxGR6_zYOSFJlCpMuD3C'; 
 
//var tableid = 790805; 
 
var latlng; 
 

 
function initialize() { 
 

 
    map = new google.maps.Map(document.getElementById('map_canvas'), { 
 
    center: new google.maps.LatLng(30.35, -97.70), 
 
    zoom: 10, 
 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
 
    }); 
 

 
    google.maps.event.addListener(map, 'click', function(event) { 
 
    latlng = event.latLng; 
 
    updateQuery(latlng); 
 
    }); 
 

 
    query = { 
 
    select: 'address', 
 
    from: tableid 
 
    }; 
 
    layer = new google.maps.FusionTablesLayer({ 
 
    query: query 
 
    }); 
 
    layer.setMap(map); 
 

 
} 
 
google.maps.event.addDomListener(window, 'load', initialize); 
 

 
function updateQuery(latlng) { 
 
    var limit = document.getElementById('limit').value; 
 
    query = { 
 
    select: 'address', 
 
    from: tableid, 
 
    limit: limit, 
 
    orderBy: 'ST_Distance(address, LATLNG(' + latlng.lat() + ',' + latlng.lng() + '))' 
 
    } 
 
    layer.setQuery(query); 
 
    var queryObj = layer.getQuery() 
 

 
    var queryStr = "from:" + queryObj.from + "<br>"; 
 
    queryStr += "select:" + queryObj.select + "<br>"; 
 
    queryStr += "limit:" + queryObj.limit + "<br>"; 
 
    queryStr += "orderBy:" + queryObj.orderBy + "<br>"; 
 

 
    document.getElementById('query').innerHTML = queryStr; 
 
}
html, 
 
body { 
 
    font-family: Arial, sans-serif; 
 
    padding: 0px; 
 
    margin: 0px; 
 
    height: 100%; 
 
    width: 100%; 
 
} 
 
#map_canvas { 
 
    height: 80%; 
 
    width: 100%; 
 
}
<script src="https://maps.googleapis.com/maps/api/js"></script> 
 
<div id="map_canvas"></div> 
 
<input type="text" id="limit" value="50" onChange="javascript:updateQuery()" /> 
 
<div id="query"></div>

+0

非常感謝你@geocodezip!我完全忽略了FusionTablesLayer({query:query}); 剩下的一個問題。當我運行代碼並點擊地圖上的一個點來引用Lat/Lng以更新查詢時,由於ST_Distance的順序似乎沒有正確觸發,因爲地圖顯示的是隨機的50個位置而不是最近的鄰居Lat/Lng點選擇。我錯過了什麼?作爲一個測試,我將代碼編寫爲一個具有設置限制和設置Lat/Lng的簡單查詢,並刪除了查詢更新函數,並且我仍然得到了一個隨機的50個位置,而不是最近的鄰居。幫幫我? – user1532547 2015-04-06 15:50:55

+0

我的例子中有幾個錯誤。固定的,更新的小提琴和代碼片段(orderby應該是orderBy,LatLng應該是LATLNG,在orderBy子句中缺少「)」)。 – geocodezip 2015-04-06 17:16:00

+0

謝謝!謝謝!謝謝! – user1532547 2015-04-06 17:26:27