Javascript 在mapbox gl js中刷新单个矢量平铺zoomlayer的解决方法是什么?

Javascript 在mapbox gl js中刷新单个矢量平铺zoomlayer的解决方法是什么?,javascript,mapbox-gl-js,Javascript,Mapbox Gl Js,我有一个由矢量平铺点组成的数据源。当我当前在客户端上添加一个新点时,服务器会将其添加到数据库中,并使用sequalize中的afterhook运行一个命令,该命令会更新所有相关ZoomLayer的相关分幅。然后它显示在我的客户端的所有zoomlayer中(在添加点后放大和缩小时),因此它正常工作,除了添加点的zoomlayer上,因为该平铺尚未刷新。。。例如,当您刷新页面时,它最终会出现 由于目前您可以刷新客户端中的各个磁贴,因此我需要设法解决这个问题。如何做到这一点?当然最好不要刷新 设置如下

我有一个由矢量平铺点组成的数据源。当我当前在客户端上添加一个新点时,服务器会将其添加到数据库中,并使用sequalize中的afterhook运行一个命令,该命令会更新所有相关ZoomLayer的相关分幅。然后它显示在我的客户端的所有zoomlayer中(在添加点后放大和缩小时),因此它正常工作,除了添加点的zoomlayer上,因为该平铺尚未刷新。。。例如,当您刷新页面时,它最终会出现

由于目前您可以刷新客户端中的各个磁贴,因此我需要设法解决这个问题。如何做到这一点?当然最好不要刷新

设置如下所示:

  • 底图:来自服务器a的矢量平铺源
  • 数据点:来自服务器B的向量磁贴源,它是一个独立的 底图上名为“数据点”的图层
代码
您的主要问题可能是浏览器已经缓存了矢量分幅,但它们的内容已经更改。您可以通过添加无意义的参数,用稍微不同的URL替换矢量平铺源来解决这个问题

例如:

  map.removeSource('osm') ;
  map.addSource('osm', {    
    "type": "vector",
    "tiles": ["https://tile.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.mvt?api_key=vector-tiles-LM25tq4&update=" + Math.random()]
  });


单击地图以刷新数据源。它确实有点闪烁。您可以通过禁用“重新绘制”一秒钟左右,或使用其他技术来掩盖该行为来解决此问题。

请出示您的code@JGallardo我把它加在问题的末尾。很抱歉,我无法正确获取缩进以使其显示为代码。。。通常这没问题,但是这个承诺让我头疼!也许你知道怎么做?我不明白“当我当前在我的客户机上添加一个新点时,服务器会更新相关的磁贴。”-你使用什么代码“添加一个新点”,为什么会导致服务器做任何事情?我编辑了这个问题,希望能回答你的问题。还明确表示,我所说的是ZOOMlayers,如果适用的话。@SteveBennettㄹ 有什么想法吗?我还看到了你提出的其他问题——以及答案——有些相似!?看起来不错。实际上,我成功地设置了一个禁止缓存的缓存控制头,这是可行的。但由于缓存本身很好,所以您的解决方案会更好。添加Math.random()时遇到的问题是,我得到了一个CORS错误:请求的资源上不存在“Access Control Allow Origin”头。我会看看我是否能解决这个问题。啊,在我的例子中,我需要加上问号,然后加上Math.random()。现在效果很好!是的,因此当您不控制tileserver时,它们描述的功能更为重要。但是当你这样做的时候,这很好!
  map.removeSource('osm') ;
  map.addSource('osm', {    
    "type": "vector",
    "tiles": ["https://tile.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.mvt?api_key=vector-tiles-LM25tq4&update=" + Math.random()]
  });