初学者融合表查询...两列位置和st_distance

时间:2013-05-05 05:05:26

标签: javascript sql select google-fusion-tables

我正在修改一个google示例模板,尝试构建一个查询,该查询在表中找到用户输入城市的最近位置。在这个例子中,我只想将lat和lon以及最近的表位置的“id”输出到用户输入的城市。首先,我使用我的LATITUDE列作为位置,因为它已在表格中以两列位置进行地理编码。奇怪的是,当我提醒该变量时,它只显示纬度而不是纬度/经度坐标。我认为自从LATITUDE充当两列位置后,它将返回一个纬度/经度。

所以当我在进入城市后按下“开始”按钮后运行这个简单的查询时:

 var queryList = [];
              queryList.push("SELECT LATITUDE,LONGITUDE FROM ");
              queryList.push(tableid);

然后提醒值,在弹出窗口中,它工作正常:http://greenandtheblue.com/whentoplant/test_query_geocode.html,提醒表中的一个纬度和经度...我希望它会。

但是当我尝试使用st_distance时,我没有得到任何关于它正在工作的建议。

queryList.push("ORDER BY ST_DISTANCE(LATITUDE, LATLNG("+coordinate.lat()+","+coordinate.lng()+")) LIMIT 1");

http://greenandtheblue.com/whentoplant/test_query_geocode_notworking.html

我更喜欢这种查询方法......看起来更简单:

query: {
            select: 'LATITUDE',
            from: tableid
          },

但是我从示例中收集到了我需要将第二个查询(当我推送时执行时)放在一个排序数组中,这使得它更复杂。

我希望这是一个足够明确的问题。谢谢你的帮助。

沙德

1 个答案:

答案 0 :(得分:1)

如果我像这样进行查询:

queryList.push("SELECT STATION,STATION_NAME,ELEVATION,LATITUDE FROM ");
queryList.push(tableid);
 //query seems to work when I comment out the line below.
 queryList.push("ORDER BY ST_DISTANCE(LATITUDE, LATLNG("+coordinate.lat()+","+coordinate.lng()+")) LIMIT 1");
 var query = encodeURIComponent(queryList.join(' '));
 var gvizQuery = new google.visualization.Query(
    'http://www.google.com/fusiontables/gvizdata?tq=' + query);

 gvizQuery.send(function(response) {
    var datatable = response.getDataTable();
    var header = 'No results';
    var content = 'Sorry, no store delivers here.';
    if (datatable && (datatable.getNumberOfRows() > 0)) {
       header = datatable.getValue(0, 0);
       content = datatable.getValue(0, 1)+"<br>Station:"+datatable.getValue(0,0)+"<br>Elevation:"+datatable.getValue(0,2);
    }
    infoWindow.setContent('<h3>' + header + '</h3>' +
       '<p>' + content + '</p>');
    infoWindow.setPosition(coordinate);
    infoWindow.open(map);
  });

对我而言works

改变:

var query = encodeURIComponent(queryList.join(''));  // empty string

为:

var query = encodeURIComponent(queryList.join(' ')); // single space