Google Fusion Table 使用 Fusion 进行查询TablesLayerOptions 的查询参数无效

Google Fusion Table Query using FusionTablesLayerOptions' query parameter not working

我的目标是根据 Fusion Table 的查询结果创建一个 google.maps.FusionTablesLayer。我有一个公开可用的 Google Fusion Table,它已经 "Enabled for Download"。我能够使用 Google Fusion Tables REST API 成功查询 table,如下所示(我会向 API 但没有足够的声誉)。以下查询在浏览器中有效:

https://www.googleapis.com/fusiontables/v2/query?sql=SELECT+start_lat+,+dir+FROM+1JUAkUL5H7IhU4QrmLuVQ65Tg2SNyI5Xqm3A7Nk1g+WHERE+dir=%27Northbound%27&key=AIzaSyBCjde_rx_Fe0v4G_vD-uI33M1o9toMF2A

我真正想要的是能够使用查询结果创建 Google Fusion Tables 图层对象。看起来最简单的方法是在 Google Fusion Tables 层对象的初始化期间提供上述查询作为参数(如 JavaScript FusionTablesLayer API)。然而,FusionTablesLayer 在初始化期间查询时无法显示如下:

northbound_hikers_start_layer = new google.maps.FusionTablesLayer({
  query: {
    select: 'start_lat',
    from: '1JUAkUL5H7IhU4QrmLuVQ65Tg2SNyI5Xqm3A7Nk1g',
    where: "dir = 'Northbound'"
  },
  heatmap: {
    enabled: true
  },
  suppressInfoWindows: false
});
我无法理解为什么 'where' 子句在将查询作为参数传递给 FusionTablesLayer 对象时失败,但 Fusion Tables REST API 查询有效在浏览器中很好。我已阅读 API,但有关此特定主题的页面出奇地不完整。有任何想法吗?我希望我可以在我正在使用的特定 API 中包含更多 link,但我的 Whosebug 声誉不足以 post 超过 2 个 URL。最终目标是一个 FusionTablesLayer,只有查询得到的数据。

编辑:当我删除 'where' 子句时,知道地图正确显示可能会有所帮助(这让我相信查询是问题所在)。我忘了说我确实为图层分配了一张地图,如下所示:

 $("button").click(function() {
   console.log(this.id + " button was pressed.");
   if (this.id == "toggle-at-centerline-button") {
     //Toggle AT Centerline Layer
     if (!toggle_at_centerline_button_pressed) {
       centerline_layer.setMap(map);
       toggle_at_centerline_button_pressed = true;
     } else {
       centerline_layer.setMap(null);
       toggle_at_centerline_button_pressed = false;
     }
   } else if (this.id == "toggle-at-shelter-button") {
     //Toggle AT Shelters Layer
     if (!toggle_at_shelter_button_pressed) {
       shelterLayer.setMap(map);
       toggle_at_shelter_button_pressed = true;
     } else {
       shelterLayer.setMap(null);
       toggle_at_shelter_button_pressed = false;
     } etc...
});

您需要设置 FusionTablesLayerOptionsmap 属性(或者至少在某个时候设置):

var northbound_hikers_start_layer = new google.maps.FusionTablesLayer({
  query: {
    select: 'start_lat',
    from: '1JUAkUL5H7IhU4QrmLuVQ65Tg2SNyI5Xqm3A7Nk1g',
    where: "dir = 'Northbound'"
  },
  heatmap: {
    enabled: true
  },
  suppressInfoWindows: false,
  map: map
});

proof of concept fiddle

代码片段:

function initialize() {
  var map = new google.maps.Map(
    document.getElementById("map_canvas"), {
      center: new google.maps.LatLng(39.232253, -76.640625),
      zoom: 4,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });
  var northbound_hikers_start_layer = new google.maps.FusionTablesLayer({
    query: {
      select: 'start_lat',
      from: '1JUAkUL5H7IhU4QrmLuVQ65Tg2SNyI5Xqm3A7Nk1g',
      where: "dir = 'Northbound'"
    },
    heatmap: {
      enabled: true
    },
    suppressInfoWindows: false,
    map: map
  });
}
google.maps.event.addDomListener(window, "load", initialize);
html,
body,
#map_canvas {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="map_canvas"></div>