다시 그리기 표시를 위해 VectorSource Layer를 삭제하려고합니다. 문제는 매 3 초마다 setInterval 함수를 실행할 때 새 마커가 이전 마커와 중첩된다는 것입니다. 이전 마커는 삭제되지 않습니다.VectorLayer 삭제
나는 시도하고있다
map.getLayers(). 항목 (1) .getSource(). clear(); map.getLayers(). 항목 (1) .getSource(). getSource(). clear(); 하지만 작동하지 않습니다.
그래서 :
미 코드는 다음과 같습니다 다시 그리기에 대한
var vectorSource = new ol.source.Vector({
features: iconFeatures //add an array of features
});
var clusterSource = new ol.source.Cluster({
source: vectorSource,
distance: 40
});
var vectorLayer = new ol.layer.Vector({
source: clusterSource,
style: clusterStyle
});
// Maps
var map = new ol.Map({
controls: ol.control.defaults({
attributionOptions: /** @type {olx.control.AttributionOptions} */ ({
collapsible: false
})
}),
target: 'map', // The DOM element that will contains the map
renderer: 'canvas', // Force the renderer to be used
layers: [
// Add a new Tile layer getting tiles from OpenStreetMap source
new ol.layer.Tile({
source: new ol.source.OSM()
//source: new ol.source.OSM({
//crossOrigin: null,
//url: 'http://34.240.39.198/osm_tiles/{z}/{x}/{y}.png',
//}),
}),
vectorLayer,
],
// Create a view centered on the specified location and zoom level
view: new ol.View({
center: ol.proj.transform([-3.7467975, 40.3705281], 'EPSG:4326', 'EPSG:3857'),
zoom: 3,
maxZoom: 15,
minZoom:2,
//extent: [226838, 5084100, 255700, 5055200],
}),
/*interactions: ol.interaction.defaults({
dragPan: false
}),*/
});
그리고 기능은 다음과 같습니다
function get_traces(){
var token = $('meta[name="csrf-token"]').attr('content');
$.ajax({
type: "post",
url: "device_mapA",
typeData:'JSON',
data: {
'_method': 'POST',
'_token': token,
}, success: function (showdevice) {
removeAllMarkers();
iconFeatures = [];
showdevice[0].forEach(function(index) {
changeMarker(showdevice[0]); //this function redraw iconFeatures array correctly.
});
});
// console.log(iconFeatures);
var vectorSource = new ol.source.Vector({
features: iconFeatures //add an array of features
});
var clusterSource = new ol.source.Cluster({
source: vectorSource,
distance: 40
});
var vectorLayer = new ol.layer.Vector({
// source : vectorSource,
source: clusterSource,
style: clusterStyle
});
map.getLayers().item(1).getSource().clear();
map.getLayers().item(1).getSource().getSource().clear();
map.addLayer(vectorLayer);
map.getLayers().item(1).getSource().clear();
//console.log(map.getLayers().item(1).getSource()); It not working neither.
}
감사 :
는 (참조 배열을 복제) 단지의 getArray()와 슬라이스() 함수를 사용, 그런 일을 저를 해결합니다. 어떤 모범이 있습니까? 당신의 대답은 "something like that :" –어쨌든이 코드를 사용했습니다 : for (i = 0; i == 10; i ++) { map.getLayers(). item (i) .getSource(). 명확한(); map.getLayers(). item (i) .getSource(). getSource(). clear(); }. 그리고 일하지 않아. –