Ok, passez le contrôle ModifyFeature
et juste crochet dans le contrôle SelectFeature
de garder une trace des fonctions sélectionnées, puis utilisez le DragControl
pour manipuler les points sélectionnés en même temps.
Exemple de l'instanciation de commande:
var drag = new OpenLayers.Control.DragFeature(vectors, {
onStart: startDrag,
onDrag: doDrag,
onComplete: endDrag
});
var select = new OpenLayers.Control.SelectFeature(vectors, {
box: true,
multiple: true,
onSelect: addSelected,
onUnselect: clearSelected
});
Exemple de fonctions de gestion d'événements:
/* Keep track of the selected features */
function addSelected(feature) {
selectedFeatures.push(feature);
}
/* Clear the list of selected features */
function clearSelected(feature) {
selectedFeatures = [];
}
/* Feature starting to move */
function startDrag(feature, pixel) {
lastPixel = pixel;
}
/* Feature moving */
function doDrag(feature, pixel) {
for (f in selectedFeatures) {
if (feature != selectedFeatures[f]) {
var res = map.getResolution();
selectedFeatures[f].geometry.move(res * (pixel.x - lastPixel.x), res * (lastPixel.y - pixel.y));
vectors.drawFeature(selectedFeatures[f]);
}
}
lastPixel = pixel;
}
/* Featrue stopped moving */
function endDrag(feature, pixel) {
for (f in selectedFeatures) {
f.state = OpenLayers.State.UPDATE;
}
}
Merci pour cela - ça marche aussi pour moi, attendez-vous qu'une fois les caractéristiques ont été traînés, ils ne sont plus « sélectionnables » dans la zone de sélection, et ne peuvent pas être déplacés à nouveau. Avez-vous eu ce problème? –
Merci pour l'exemple clair, il m'a fallu presque une journée pour trouver un exemple simple sur le glisser et les événements. Celui-ci est génial! Je ne l'utilise pas pour plusieurs fonctionnalités, mais pour 1. – Marco
Trouvé, utilisé et cela fonctionne :). Donc, un grand MERCI! – elrado