OL3 앱에 geojson 레이어가있어 5 초마다 다시 그려야합니다 (지도에 움직임을 표시하기 위해).
어떻게합니까? Layer.redraw ()에 해당하는 항목을 찾을 수 없습니다.
OL3 앱에 geojson 레이어가있어 5 초마다 다시 그려야합니다 (지도에 움직임을 표시하기 위해).
어떻게합니까? Layer.redraw ()에 해당하는 항목을 찾을 수 없습니다.
답변:
다음은 GeoJSON 문서의 기능을 반환하는 웹 서비스에서 5 초마다 벡터 소스를 새로 고치는 방법입니다.
var vectorSource = new ol.source.Vector();
var geojsonFormat = new ol.format.GeoJSON();
window.setTimeout(function() {
$.ajax('http://example.com/data.json', function(data) {
var features = geojsonFormat.readFeatures(data
{featureProjection:"EPSG:3857"});
geojsonSource.clear();
geojsonSource.addFeatures(features);
});
}, 5000);
여기서 jQuery는 Ajax ( $.ajax
)를 통해 데이터를 요청하는 데 사용 되지만 원하는 라이브러리를 사용할 수 있습니다.
이 코드 스 니펫은지도의 투영이 "EPSG : 3857"(웹 메르카토르)이고 GeoJSON 문서의 좌표가 위도와 경도라고 가정합니다.
vectorSource
하고 geojsonSource
병합?
나는이 질문이 오래되었다는 것을 알고 있지만 마침내 오픈 레이어 3에서 레이어를 새로 고치는 솔루션을 찾았습니다.
다음과 같이 레이어 소스의 매개 변수를 업데이트해야합니다.
var source = yourLayer.getSource();
var params = source.getParams();
params.t = new Date().getMilliseconds();
source.updateParams(params);
updateParams
방법을 지원하는 것은 아닙니다 . OL3.18.2 단지 쇼가에 대한 ImageArcGISRest
, ImageMapGuide
, ImageWMS
, TileArcGISRest
과 TileWMS
, 그리고,에 대한 예 ol.source.Vector
.
으로 WFS 계층을 새로 고칠 수 있습니다 myLayer.getSource().clear()
.
clear()
기존 기능 을 호출 하면 맵에서 즉시 제거되며 HTTP 응답을받은 후에 만 다시 추가됩니다. VectorOptions#url
및에 대한 값을 지정하는 경우에 해당 됩니다 VectorOptions#loader
. 실시간 데이터의 경우 일부 WebSockets 또는 XHR 매직을 수동으로 수행 한 다음 호출 한 getSource().clear()
다음 getSource().addFeatures(...)
최종 사용자에게 더 잘 보일 수 있습니다.
OL2에서는 OL3에 추가되지 않은 레이어 새로 고침 전략을 사용했습니다. 아래는 ajax 요청을 사용하여 GeoJSON을 가져온 다음이를 읽고 소스에 추가하는 자체 호출 기능입니다.
var yourSource = new ol.source.GeoJSON();
//add this source to a layer, the layer to a map with a view etc
...
//now fetch the data
var fetchData = function () {
jQuery.ajax(url,
{
dataType: 'json',
success: function (data, textStatus, jqXHR) {
yourSource.clear(); //remove existing features
yourSource.addFeatures(yourSource.readFeatures(data));
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(errorThrown);
}
});
//call this again in 5 seconds time
updateTimer = setTimeout(function () {
fetchData();
}, 5000);
};
fetchData(); //must actually call the function!
도움이 되었기를 바랍니다.
이것은 레이어에 완벽하게 작동합니다.
layer.changed();
당 http://openlayers.org/en/latest/apidoc/ol.layer.Vector.html#changed
layer.changed();
레이어에 완벽하게 작동 하는 방법에 대해 조금 더 설명해야합니다 . 설명서 설명 Increases the revision counter and dispatches a 'change' event.
은 실제로 도움이되지 않습니다. changed () 메소드를 사용하면 5 초마다 맵 다시 그리기에 대한 질문에 어떻게 대답합니까?
layer.changed();
은 나에게 아무런 영향을 미치지 source.changed();
않았지만 트릭을 수행했습니다.