小编use*_*126的帖子

OpenLayers 3重新加载图层

我正在使用OL3开发一个项目,我需要能够手动(通过按下按钮)或自动(基于时间)重新加载矢量图层,因为它们自上次加载后使用HTTP条件GET(304标题等)进行了更新.

我发现这个非常古老的帖子(https://gis.stackexchange.com/questions/333/how-to-dynamically-refresh-reload-a-kml-layer-in-openlayers)用于KML图层,但它似乎使用在OL3中找不到变量,我不确定它是否只允许加载自上次加载以来已修改过的文件.乍一看,即使文件尚未修改,也会强制执行完全重新加载.

API中似乎没有任何类似于OL3中的地图或图层对象的重新加载功能.有没有办法做到这一点?

更新1:

我在这个问题中找到了一种可能的方法来解决这个问题:https://gis.stackexchange.com/questions/125074/openlayers3-how-to-reload-a-layer-from-geoserver-when-underlying-data使用代码进行更改:

layer.getSource().updateParams({"time": Date.now()});
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此代码时,我收到错误:

TypeError: selectedLayer.getSource(...).updateParams is not a function
Run Code Online (Sandbox Code Playgroud)

在检查OL3的API参考时,似乎不存在这样的功能.最接近的是setProperties()或setAttributions().两者都不奏效.似乎并非所有图层类型都实现了getSource().

更新2:

refresh()重新加载磁贴,但似乎没有从服务器请求它们.相反,它似乎是从缓存(但不是HTTP缓存)加载.没有请求,没有HTTP 304或类似的东西.将尝试使用KML方法的变体并尽快发布结果.

更新3:

在尝试了很多不同的解决方案后,我不小心偶然发现了一些适用于矢量图层的东西.通过调用图层source.clear()函数然后调用Map.updateSize(),该图层将从其源URL自动重新加载.发出XHR GET请求,如果源文件已更改,将从文件重新加载.如果源文件未更改,则将发出304并且将从缓存重新加载源.

下面是一个应该使用此方法重新加载给定图层的函数:

function refreshLayer(selectedLayer)
{
    var selectedLayerSource = selectedLayer.getSource();

    if(selectedLayerSource instanceof ol.source.Vector)
    {
        //do vector reload
        selectedLayerSource.clear();
        map.updateSize();
    }
    else
    {
        //reload the entire page
        window.location.reload();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,似乎在前几次尝试(取决于浏览器)发送请求时,会发回200代码,但该层不反映任何更改.经过几次尝试(并重新加载页面几次),它可以工作.一旦它开始为一个图层工作,它就会在源文件发生变化时继续工作.有谁知道发生了什么事?

更新4:

使用Jonatas答案的改编我得到了更好的结果.重新加载时会立即弹出新功能.但是,旧功能不会从地图中删除,许多已移动位置的功能会在地图上显示两次.以下是我的代码:

function refreshSelectedLayer()
{
    console.log("This feature is still in the process of being implemented. Refresh may not actually occur.");

    var selectedLayerSource = …
Run Code Online (Sandbox Code Playgroud)

javascript openlayers-3

8
推荐指数
1
解决办法
6750
查看次数

使用 Gitkraken 的多个推送 URL

我正在尝试在 Gitkraken 中添加多个推送 URL,但似乎不起作用。在 Sourcetree 或命令行中我只需添加:

[remote "origin"]
   url = git@blah:blah/blah.git
   fetch = +refs/heads/*:refs/remotes/origin/*
   pushurl = git@blah:blah/blah.git
   pushurl = git@blah2:blah/blah.git
Run Code Online (Sandbox Code Playgroud)

当我通过命令行执行此操作时,Gitkraken 仅推送到最后一个存储库,并且在设置中它是显示的唯一推送 URL。仍然可以通过命令行工作,但使用 Gitkraken 的目的是我只需单击按钮,而不是每次都键入命令。有任何想法吗?

git gitkraken

4
推荐指数
1
解决办法
1325
查看次数

标签 统计

git ×1

gitkraken ×1

javascript ×1

openlayers-3 ×1