Si les utilisateurs créent une entité surfacique qui chevauche complètement une autre, comme celle-ci…
… Il n'y a aucun moyen de sélectionner la fonction intérieure, c'est-à-dire celle qui se chevauche. J'utilise actuellement un simple SelectFeature
comme celui-ci:
var select = new OpenLayers.Control.SelectFeature(
[this.annotationLayer, this.controlPointsLayer], {
hover: true,
renderIntent: "temporary"
}
);
this.map.addControl(select);
select.activate();
Mais évidemment, je ne peux l'obtenir que pour sélectionner la fonction extérieure. Quelle est la manière typique de gérer cela? Comment puis-je permettre à l'utilisateur de sélectionner également la fonction interne?
La solution la plus simple serait probablement de rendre la fonction externe uniquement sélectionnable dans la zone qui reste en soustrayant la fonction interne - mais je n'ai aucune idée de la façon de procéder.
Réponses:
Peu d'options. Certains plus fous :-) que d'autres. Les stratégies de base sont
==>
Activer la stratégie de clustering de fonctionnalités
Implémentez votre propre algorithme de clustering, donc lorsqu'un nouvel élément est ajouté ou modifié, votre algorithme se réexécute et effectue une vérification imbriquée pour la boucle et n * n (-1) vérifie ce qui chevauche ce qui - puis modifiez la propriété de la fonctionnalité pour configurer une liste de fonctionnalités qui se chevauchent, et lorsque l'utilisateur clique sur la fonctionnalité, affichez une liste de fonctionnalités qui se chevauchent et demandez à l'utilisateur de sélectionner ce sur quoi il voulait vraiment cliquer. Logique?
Au lieu d'implémenter une fonctionnalité au clic, implémentez simplement un gestionnaire de clic de carte entier. Et lorsque l'utilisateur clique, vérifiez à travers votre calque toutes les fonctionnalités qui se croisent - et s'il y en a une - affichez la fenêtre contextuelle de ce gars, et s'il y en a plusieurs, affichez une liste d'invites comme au n ° 2 ci-dessus. Si aucun ne se croise, ignorez-le.
Implémentez une option de clic droit pour «masquer» temporairement une fonctionnalité pour vous permettre d'accéder à la fonctionnalité masquée. Dès que le suivant est cliqué, réaffichez toutes les fonctionnalités cachées
Similaire au n ° 4, à l'intérieur de la fenêtre contextuelle de la fonctionnalité supérieure, ajoutez un élément de menu / lien pour «masquer» la fonctionnalité. Et procédez comme au n ° 4.
Similaire à # 4/5, implémentez un "déplacement temporaire" avec le bouton droit de la souris et cliquez sur la fonctionnalité pour la déplacer [rappelez-vous que c'est un ancien emplacement]. Ensuite, l'utilisateur clique sur la fonction inférieure et celle du haut revient à sa position d'origine.
la source