2016-09-21 2 views
1

У меня есть карта с векторным слоем с некоторыми функциями.Как отменить выбор функции после выбора всех

var map = new ol.Map({ 
    view: mapManager.zoomedView(), 
    target: 'map-business', 
    layers: [ 
    new ol.layer.Tile({ 
     source: new ol.source.OSM() 
    }) 
    ] 
}) 
var vectorSource = new ol.source.Vector(); 

var feats; 
$.get("/test.geojson", function(data) { 
    vectorSource.addFeatures(new ol.format.GeoJSON().readFeatures(data)) 
    feats = new ol.format.GeoJSON().readFeatures(data) 
}); 
var vectorLayer = new ol.layer.Vector({ 
    source: vectorSource, 
    style: new ol.style.Style({ 
    fill: mapManager.defaultFill(), 
    stroke: mapManager.defaultStroke() 
    }) 
}); 

map.addLayer(vectorLayer); 

Затем добавить избранную взаимодействие, потому что я хочу, чтобы отменить/выберите функции

var selectSingleClick = new ol.interaction.Select({ 
    condition: ol.events.condition.click, 
    toggleCondition: ol.events.condition.click, 
    style: new ol.style.Style({ 
    fill: mapManager.selectFill(), 
    stroke: mapManager.selectStroke() 
    }) 
}); 

map.addInteraction(selectSingleClick); 

Теперь я хочу, чтобы выбрать все функции по умолчанию

var selectableFeatures = selectSingleClick.getFeatures() 
selectableFeatures.push(feats[i]) 

Это нормально, все мои функции выбраны по умолчанию. Проблема в том, что я не могу отменить мои функции. Если я нажму на функцию, функция снова будет выбрана.

+0

Как насчет каждый раз, когда усечение ваши selectableFeatures, прежде чем делать выбор? –

+0

@TengMa Но следует ли использовать ol.interaction.Select? – elyrico

+0

Любая обратная связь ...? –

ответ

0

Я хотел бы сделать что-то вроде:

var vectorSource = new ol.source.Vector({ 
    format: new ol.format.GeoJSON, 
    url: '/test.geojson' 
}); 

var vectorLayer = new ol.layer.Vector({ 
    source: vectorSource, 
    // ... 
}); 

map.addLayer(vectorLayer); 

var featuresInteraction = new ol.Collection(); 
var selectSingleClick = new ol.interaction.Select({ 
    features: featuresInteraction, // <-- pushing and removing from/to this collection variable 
    // ... 
}); 
map.addInteraction(selectSingleClick); 

// GeoJSON was async loaded, so wait until is ready 
vectorSource.once('addfeature', function(evt) { 
    // add to select collection 
    featuresInteraction.extend(vectorSource.getFeatures()); 

    // some time later to remove selected 
    window.setTimeout(function() { 
    featuresInteraction.clear(); 
    }, 2000); 
}); 
+0

С помощью этого решения я не могу отменить выбор функций по отдельности. На самом деле это то, что я пытаюсь сделать. С вашим ответом я могу только отменить выбор всех функций isn'it? – elyrico

Смежные вопросы