0

我想要在Google地图中使用融合图层来将路由器的位置和状态显示为标记,其中标记的颜色告诉您其状态是什么。其结果是在融合表中的数据经常变化,这意味着该映射来刷新本身以显示在表中的变化如何刷新融合图层并过滤显示的标记

我管理在javascript使用以下代码来刷新层:

function refresh() 
{ 
    layer.setOptions({ 
      query: { 
       select: '\'location\'', 
       from: dbloc, 
       where: "location != " + (-1 * Math.floor(Math.random() * 10000000)).toString() 
      }, 
      styleId: styleNr, 
      map: map 
    }); 

} 

这个函数每10秒调用一次,并且在地图上显示所有标记时完美工作,但是当我想根据另一列(本例中为状态列)过滤标记时,什么都不会发生。

我尝试添加的过滤器,像这样的状态:

where: "location != " + (-1 * Math.floor(Math.random() * 10000000)).toString() + " and " + "status = " + selectedStatus 

我也试着将它们放在一个数组并把它传递到查询:

var refreshClause = "location != " + (-1 * Math.floor(Math.random() * 10000000)).toString(); 
var statusClause = "status = " + selectedStatus; 

where: [refreshClause, statusClause] 

可悲的是这两个唐”工作。

如果我使用条件按状态进行过滤,但没有刷新融合层所需的条件,则标记将按给定状态正确过滤。唯一的问题是,如果Fusion表中的数据改变,显示的标记不再改变。所以,如果我显示状态为1的标记并将标记更改为状态2,那么标记将保留在地图上而不是消除。

有什么我做错了还是有另一种方式?重要的是我可以过滤显示的标记,因为它们中会有很多标记,并且地图必须刷新才能显示路由器的当前状态。

任何想法?

+0

FusionTable的外观如何? “状态”是一列吗? – geocodezip

+0

状态是FusionTable中的一列,它包含数字1,2或3. 1在线,2离线,3未知。除此之外,FusionTable具有列Id,Customer_id和Location。 – Harrel

+0

它是“状态”还是“状态”(列名区分大小写)。 – geocodezip

回答

0

我设法通过使用REST-API测试我的查询来解决问题。事实证明,在“!=”替换为“NOT IN()”之后,“!=”部分导致了问题,我能够过滤标记并按照我想要的那样继续刷新它们。

新的查询看起来是这样的:

where: "Location NOT IN('" + (-1 * Math.floor(Math.random() * 10000000)).toString() + "')" + " AND Status = '" + selectedStatus + "'" 

感谢所有帮助球员。