如何刷新融合层和过滤显示的标记

How to refresh fusion layer and filter displayed markers

本文关键字:过滤 显示 融合 何刷新 刷新      更新时间:2023-09-26

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

是我做错了什么还是有别的办法?重要的是,我可以过滤显示的标记,因为会有很多标记,地图必须刷新自己,以显示路由器的当前状态。

任何想法?

我设法通过使用REST-API测试我的查询来解决这个问题。原来是"!"="零件导致问题,更换后"!=" with "NOT IN()"我能够过滤标记并按我的意愿不断刷新它们。

新的查询看起来像这样:

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

谢谢大家的帮助。