2015-04-01 2 views
0

Периодически я использую таблицы Google Fusion в течение нескольких лет, хотя я все еще новичок.Fusion Tables Layer Query проблемы с постоянной поломкой плитки

Недавно мне было поручено запросить одну из моих таблиц относительно геопространственных отношений. Я нашел отличный пример, который функционирует точно так, как мне это нужно, и обновил код с помощью моего 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

ответ

0

Когда вы видите сообщение «» Данные по-прежнему может быть нагружением.»Это обычно означает, что ваш запрос является недействительным.

Вашего примера имеет старый„числовой“идентификатор таблицы. Синтаксис новые "зашифрованными" таблица идентификаторов отличается (и как 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); 

To:

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

+0

В моем примере было несколько ошибок. Исправлена, обновлялась скрипка и фрагмент кода (orderby должен быть orderBy, LatLng должен быть LATLNG, отсутствует ")" в предложении orderBy). – geocodezip

+0

Спасибо! Спасибо! Спасибо! – user1532547