2016-07-28 45 views
0

我的目标是根据Fusion Table的查询结果创建google.maps.FusionTablesLayer。我有一个公开的Google Fusion Table已被“启用下载”。我可以使用Google Fusion Tables REST API成功查询表格(我会提供一个指向API的链接,但没有足够的信誉)。以下查询适用于浏览器:使用FusionTablesLayerOptions的查询参数不起作用的Google Fusion Table查询

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 
 
});
我无法理解为什么“其中”子句传递查询作为参数传递给FusionTablesLayer会对象时失败,但Fusion Tables REST API查询在浏览器中正常工作。我已经阅读了API,但关于这个特定主题的页面却令人惊讶地不完整。有任何想法吗?我希望我可以包含更多指向我正在使用的特定API的链接,但是我的StackOverflow声誉不够高,无法发布超过2个网址。最终目标是只有通过查询获得的数据的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... 
 
});

回答

0

你需要设置的FusionTablesLayerOptions(或至少在某些时候将其设置)的map属性:

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>

+0

对不起,我忘了提,我有地图属性当按下显示按钮在稍后设置。我上面的代码在我删除'where'子句时正常工作。它只有在存在没有任何东西出现的'where'子句的情况下。我将编辑原始问题以反映这些信息。 – campellcl

+0

感谢您的“概念证明小提琴”,我发现了错误。查询正在工作(正如你的小提琴所显示的那样),我正在用'where:'dir ='Southbound'“''测试显示器。我的表格太大,所以数据不会作为查询可访问的100,000条记录的一部分返回。结果“北行”查询成功,“南行”查询看起来失败。我已将问题标记为已回答,因为您的小提琴显示了正在工作的查询的示例,导致我意识到自己的错误。我希望别人觉得这很有用。感谢您的工作示例! – campellcl

+0

这就是为什么在问题中提供[mcve]很重要。 – geocodezip