【问题标题】:How to refresh fusion layer and filter displayed markers如何刷新融合层和过滤显示的标记
【发布时间】:2016-01-10 23:31:05
【问题描述】:

我想使用 Google 地图中的 Fusion 图层将路由器的位置和状态显示为标记,其中标记的颜色告诉您它的状态。因此 Fusion 表中的数据经常变化,这意味着地图必须自行刷新才能显示表中的变化

我设法在 javascript 中使用以下代码刷新了图层:

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

}

此函数每十秒调用一次,并且在显示地图上的所有标记时完美运行,但是当我想根据另一列(在本例中为状态列)过滤标记时,什么也没有发生。

我尝试为状态添加过滤器,如下所示:

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,则该标记会保留在地图上而不是消失。

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

有什么想法吗?

【问题讨论】:

  • 您的 FusionTable 是什么样的? “状态”是一列吗?
  • 状态是FusionTable中的一列,包含数字1、2或3。1在线,2离线,3未知。除此之外,FusionTable 还具有 Id、Customer_id 和 Location 列。
  • 是“状态”还是“状态”(列名区分大小写)。
  • "status" 小写 s
  • 那里可能有某种缓存处于活动状态,等待一段时间后是否得到正确的标记?

标签: javascript google-maps google-maps-api-3 google-fusion-tables


【解决方案1】:

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

新查询如下所示:

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

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    相关资源
    最近更新 更多