Tôi có một lớp Geojson trong ứng dụng OL3 mà tôi muốn vẽ lại cứ sau 5 giây (để hiển thị chuyển động trên bản đồ).
Tôi phải làm nó như thế nào ? Không thể tìm thấy tương đương với Layer.redraw ().
Tôi có một lớp Geojson trong ứng dụng OL3 mà tôi muốn vẽ lại cứ sau 5 giây (để hiển thị chuyển động trên bản đồ).
Tôi phải làm nó như thế nào ? Không thể tìm thấy tương đương với Layer.redraw ().
Câu trả lời:
Đây là cách bạn có thể làm mới nguồn vectơ cứ sau 5 giây, từ các tính năng trả về dịch vụ web trong tài liệu GeoJSON:
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 được sử dụng ở đây để yêu cầu dữ liệu thông qua Ajax ( $.ajax
), nhưng rõ ràng bạn có thể sử dụng thư viện bạn chọn.
Đoạn mã này cũng giả định rằng các phép chiếu của bản đồ là "EPSG: 3857" (trình duyệt web) và tọa độ trong tài liệu GeoJSON là kinh độ và vĩ độ.
vectorSource
và geojsonSource
được sáp nhập?
Tôi biết rằng câu hỏi này đã cũ nhưng cuối cùng tôi đã tìm thấy một giải pháp để làm mới một lớp trên openlayers 3.
Bạn phải cập nhật thông số của nguồn lớp như thế này:
var source = yourLayer.getSource();
var params = source.getParams();
params.t = new Date().getMilliseconds();
source.updateParams(params);
updateParams
phương pháp; OL3.18.2 chỉ hiển thị nó cho ImageArcGISRest
, ImageMapGuide
, ImageWMS
, TileArcGISRest
và TileWMS
, và không cho, ví dụ như, ol.source.Vector
.
Bạn có thể làm mới một lớp WFS với myLayer.getSource().clear()
.
clear()
bất kỳ tính năng hiện có nào sẽ bị xóa khỏi bản đồ ngay lập tức và chỉ được thêm lại sau khi nhận được phản hồi HTTP. Điều này đúng cho cả việc chỉ định một giá trị cho VectorOptions#url
và cho VectorOptions#loader
. Đối với dữ liệu thời gian thực, thủ công thực hiện một số phép thuật WebSockets hoặc XHR và sau đó gọi getSource().clear()
theo sau getSource().addFeatures(...)
có thể tốt hơn cho người dùng cuối.
Với OL2, tôi đã sử dụng chiến lược làm mới lớp chưa được thêm vào OL3. Dưới đây là chức năng tự gọi sẽ sử dụng yêu cầu ajax để tìm nạp GeoJSON và sau đó đọc nó và thêm nó vào nguồn.
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!
Hi vọng điêu nay co ich.
Điều này hoạt động hoàn hảo cho các lớp:
layer.changed();
theo http://openlayers.org/en/latest/apidoc/ol.layer.Vector.html#changed
layer.changed();
hoạt động hoàn hảo (ly) cho các lớp. Mô tả tài liệu Increases the revision counter and dispatches a 'change' event.
không thực sự hữu ích. Làm thế nào để sử dụng phương thức thay đổi () trả lời câu hỏi liên quan đến việc vẽ lại bản đồ cứ sau 5 giây?
layer.changed();
không có tác dụng đối với tôi, nhưng source.changed();
đã thực hiện các mẹo.
Không cần phải làm mới một cách rõ ràng. Mỗi khi bạn cập nhật nội dung của một lớp, bản đồ sẽ được làm mới yêu cầu hiển thị khung mới.
Để buộc kết xuất bằng tay bạn có map.render()
và map.renderSync()
phương pháp.