IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IGN API Géoportail Discussion :

Recherche toponyme sur Acigné


Sujet :

IGN API Géoportail

  1. #1
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut Recherche toponyme sur Acigné
    Dans un souci de confronter nos expériences, ma page d'essai est outrageusement basée sur celle de mga_geo

    Sauf erreur de ma part, je constate que sur la commune de Acigné chère à certain:

    1. "bourgon", "blanche", "forge" ne donnent pas de résultat... Pourquoi?
    2. "croix", "rue", "ville", "pont", "haut" ne donnent pas de résultat. On pourrait supposer que ces termes génériques sont exclus de l'algorithme de recherche, mais si c'est le cas, il me semble que c'est une grave erreur .

    Par ailleurs, j'ai quelques difficultés à programmer l'affichage dans une fenêtre sous les deux boutons "Annuler" et "Rechercher" (Div de className: 'gpLUSResult') quand il y a plusieurs occurrences répondant à la recherche. Par exemple "Louvigné" ou "Ecures".
    J'essaye bien d'assembler les éléments originaux de
    Geoportal.Control.LocationUtilityService.GeoNames.prototype.LUSSuccess = function (request) {} dans la surcharge de mga_geo mais je m'épuise un peu...
    Si une âme charitable passait par là (à Acigné) ce serait sympa.

    Au plaisir de vous lire...
    Merci

  2. #2
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    Insistons.

    A la recherche de "louvigne" sur ma page d'essai il y a deux réponses:
    LUSsuccess
    LUSsuccess nb_features:50
    ... 0 ok:0 WKTOINT(-48340.3967524172 5349742.996647702)
    ... 1 ok:0 WKTOINT(126333.0224940769 4888750.951515248)
    ... 2 ok:1 WKTOINT(-115288.34936855333 5361348.0535629)
    ... 3 ok:0 WKTOINT(-70763.53143885318 4837134.997941166)
    ... 4 ok:1 WKTOINT(-115174.78773833152 5361697.040166537)
    ... 5 ok:0 WKTOINT(-102131.13873723622 5348772.958604929)
    Comment faire pour que .gpControlLocationUtilityServiceGeoNamesResults s'ouvre et se remplit de ces deux résultats?
    C'est au-dessus de mes limites en js que vous savez très bas!!!

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Regarde le code des exemples API, tu trouveras sûrement la réponse :

    * formulaire et recherche ;
    * géocodage.

  4. #4
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    Voici le résultat de mes longs errements

    Quand il y a une réponse>> affichage direct avec un cercle autour.
    Quand il y a plus d'une réponse (par exemple: "volamont")>> la liste s'affiche avec les ronds sur les différents lieux.
    Il y a encore plein de choses à revoir mais globalement cela me satisfait...

    Mais mon problème actuellement est le suivant:

    Je voudrai que la checkbox me permette soit de maintenir les différents cercles de recherche (cas actuel: là pas de problème ) soit de les effacer à chaque recherche .

    Cela me pose plusieurs problèmes (faut pas rire de mon ignorance, car je sens bien que cela doit être un truc classique et facile, mais mon ignorance en JS est très profonde!!! et j'ai beaucoup de mal à adapter les quelques exemples trouvés)
    1/ Je ne sais pas comment récupérer l'action sur la checkbox dans ce cas précis pour ne serait-ce qu'afficher dans la console un message adequat.

    Et les exemples donnés sont tellement sophistiqués que je m'y perd complètement.

    Quelques lignes de codes me seraient très utiles, après j'adapterai par tatonnement comme dab.

    Demain sera un autre jour, plein de promesse.

  5. #5
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    Pour relancer ma question.

    J'introduis ma checkbox de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     Geoportal.Control.LocationUtilityService.prototype.loadContent = function(form) {
        
             this.buildCheckboxField(form,{
                        id:'memo'
    		,checked:true
    		,callbacks:   {evt:'click',func:this.onSearchClick}.....
    Ensuite, je ne sais pas ??
    Mon premier sentiment serait de le faire dans une surcharge de Geoportal.Control.LocationUtilityService.GeoNames.prototype.onSearchClick par un vague
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (element.id.match(/^memo/)) {console.log("memo.checked est coché");}else {console.log("memo.checked est décoché" );}
    avec toutes les variantes autour...
    Mais comme le résultat est mauvais ....

  6. #6
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     var mem=OpenLayers.Util.getElement('memo' + this.id).value;
    if (mem.checked) {console.log("memo.checked est coché");}else {console.log("memo.checked est DEDEDEcoché" );}
    Ce codage semblerait plus logique, mais il manque encore un truc...

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Le bon evt est 'mouseup'

  8. #8
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    Le bon evt est 'mouseup'
    Je veux bien te croire mais avec 'click' c'est aussi ok, non? Enfin, je vois pas bien la différence, mais passons car mon problème était:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var mem=OpenLayers.Util.getElement('memo' + this.id).value;
    Maintenant, je détecte bien les actions sur la checkbox, mais...

    L'action sur la checkbox devrait alternativement créer une couche, ou la supprimer.
    Pour cela j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    evt:'click' ou mouseup,func:function() { var mem=OpenLayers.Util.getElement('memo' + this.id);
       			var  cercleLayer0 = new OpenLayers.Layer.Vector('Cercle');
    			viewer.getMap().addLayer(cercleLayer0);
    			if (!mem.checked) {
    				console.log("memo.checked est DEcoché");
    				//viewer.getMap().removeLayer(cercleLayer0,false);
    				cercleLayer0.destroy();}
    Mais mes codages en bleu sont inopérants... Un coup de pouce me serait utile...

  9. #9
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par cmail Voir le message
    Je veux bien te croire mais avec 'click' c'est aussi ok, non?
    J'ai eu des problèmes de portabilité avec click ...

    Citation Envoyé par cmail Voir le message
    Mais mes codages en bleu sont inopérants... Un coup de pouce me serait utile...
    Que signifie : « inopérants » à la lecture de ton morceau de code, tu crées une couche à chaque clic sur la checkbox (couche vide) et si la coche n'est pas active, tu la détruis ...

    Ecrit autrement; où gères-tu la persistance entre les clics ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ...
    if (mem.checked) {
      this.cl0= new OpenLayers.Layer(...);
    } else {
      if (this.cl0) {
        this.map.removeLayer(...)
        ths.cl0= null;
      }
    }

  10. #10
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    Merci pour ta patience. Et excuse moi pour mon insistance.

    Que signifie : « inopérants » à la lecture de ton morceau de code, tu crées une couche à chaque clic sur la checkbox (couche vide) et si la coche n'est pas active, tu la détruis ...
    La création est ok mais je n'arrive pas à la détruire. Inversement quand je la détruis, je n'arrive plus à la reconstruire.

    où gères-tu la persistance entre les clics
    persistance ??? Encore une notion que je ne comprends pas bien et donc qui va m'occuper l'esprit un bout de temps. Mais j'ai de grandes ambitions!
    Je vais repartir sur ton bout de code. A force cela devra aboutir...

  11. #11
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    Je tourne en rond du fait d'une très mauvaise compréhension (passagère, je l'espère). Je réénonce donc mon problème:

    J'aimerais par cochage (ou non) d'une checkbox dans la boite de recherche de toponyme, créer ou détruire une couche qui supporte la visualisation par traçage d'un cercle autour des résultats.

    Pour l'instant, le squelette de mon code traitant de ce sujet est :
    // surcharge de LocationUtilityService.prototype.loadContent
    Geoportal.Control.LocationUtilityService.prototype.loadContent = function(form) { this.buildCheckboxField(form,{
    id:'memo'
    ,checked:true
    ,callbacks: {evt:'click',function() { var mem=OpenLayers.Util.getElement('memo' + this.id);if (!mem.checked) {
    console.log("memo.checked est coché");
    ????
    } else {console.log("memo.checked est DEcoché");
    ????}}}]
    });
    this.buildButton(form,'search',this.onSearchClick);....}.....

    // surcharge de LocationUtilityService.GeoNames.prototype.LUSSuccess

    Geoportal.Control.LocationUtilityService.GeoNames.prototype.LUSSuccess = function (request) {.....


    .... for (var i= 0, ilen= features.length; i<ilen; i++) {
    var f= features[i];

    if (rechercheZone.containsPoint(f.geometry)) {//cmail

    var cercleOrigine = new OpenLayers.Geometry.Point(f.geometry.x,f.geometry.y );
    var styleCercle = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
    styleCercle.strokeColor = "red";
    styleCercle.strokeOpacity=.5;
    styleCercle.strokeWidth= 5;
    styleCercle.fillColor = "red";//"transparent";
    styleCercle.fillOpacity=.1;
    var cercleFeature = new OpenLayers.Feature.Vector(
    OpenLayers.Geometry.Polygon.createRegularPolygon( cercleOrigine, 250, 50, 0 ),
    null,
    styleCercle
    );
    cercleLayer.addFeatures( [cercleFeature] );......


    }//fin de surcharge de LocationUtilityService.GeoNames.prototype.LUSSuccess
    var cercleLayer = new OpenLayers.Layer.Vector('Résultats cerclés');
    viewer.getMap().addLayer(cercleLayer);
    ............
    Je bidouille au niveau des ????, mais soit je supprime bien cercleLayer, mais n'arrive plus à le recréer au prochain cochage de la checkbox, soit je le recrée à chaque cochage mais n'arrive pas à le supprimer...

  12. #12
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par cmail Voir le message
    Je tourne en rond du fait d'une très mauvaise compréhension (passagère, je l'espère). Je réénonce donc mon problème:

    J'aimerais par cochage (ou non) d'une checkbox dans la boite de recherche de toponyme, créer ou détruire une couche qui supporte la visualisation par traçage d'un cercle autour des résultats.

    Si tu regardes le code de Geoportal.Control.LocationUtilityService.Geocode, on utilise une couche vecteur avec une symbolisation simple pour faire cela.

    Ne faudrait-il pas partir de cela en les transposant à Geoportal.Control.LocationUtilityService.GeoNames ?

    La différence est l'affichage d'un seul point (sur le choix), mais tu n'es pas loin :

    * la couche résultat est créé une fois pour toute (à la construction du contrôle);
    * les résultats y sont stockés et mis en carto (avec la symbologie cercle que tu as effectué);
    * les résultats y sont retirés (destroyFeatures()) plutôt que de retirer la couche sur le clic chekcbox;

  13. #13
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    Si tu regardes le code de Geoportal.Control.LocationUtilityService.Geocode, on utilise une couche vecteur avec une symbolisation simple pour faire cela.
    J'ai sous les yeux Geoportal.Control.LocationUtilityService.Geocode de la version 1.1 et en effet l'air de famille est très proche de Geoportal.Control.LocationUtilityService.GeoNames... Ouf! cela facilite l'analyse! Mais si proche même que je ne vois pas d'appel à "une couche vecteur avec une symbolisation simple pour faire cela"...
    Il y a surement quelque chose qui m'échappe encore...
    Il est évident que si c'était le cas, je m'en inspirerai... et je devrais m'en sortir (enfin je l'espère!). Mais je cherche en vain "OpenLayers.Layer.Vector" ou quelque chose d'équivalent...

    Pour destroyFeatures(), je suis d'accord. C'était ma première piste mais comme je n'arrive même pas à maitriser ma couche vecteur, tu comprends mes difficultés à y maitriser des features. En affirmant cela, je ne dis pas de bêtise????

  14. #14
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    En décortiquant un peu pour t'aider :

    1/ Geoportal.Control.LocationUtilityService : le constructeur passe un OpenLayers.Layer.Vector ... C'est lors de la création de cette couche qu'une symbologie peut être mise en oeuvre

    2/ Geoportal.Control.LocationUtilityService.LUSSuccess() : la méthode parcourt le résultat de la recherche ; la table des résultats contient les futurs objets. Un filtre peut y être ajoutés (score, emprise, etc ...). Les objets pourraient être ajoutés là ...

    3/ Geoportal.Control.LocationUtilityService.onResultClick() : l'objet sélectionné est ajouté à la couche. Il suffit de remonter à l'étape précédente ...

    4/ sur le mouseup, l'objet pourrait être :
    a/ sélectionné (symbologie "select") ...
    b/ retiré (symbologie "delete")

    Voilà pour les pistes

  15. #15
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    Cette nuit la neige est tombée. J'en connais un (shama) qui doit être content!
    Mais ici, cela ne renforce pas le moral.

    @dgrichard
    Si je saisis grossièrement tes conseils et les assimile assez bien, j'ai encore beaucoup de mal à concrétiser, faute de base. Je viens d'acheter "javascript pour les nuls" chez amazon, sa lecture ne devra pas me faire du mal!

    Pour cette histoire de checkbox, je vais laisser tomber car cela me bouffe un temps incroyable pour un résultat médiocre.
    Merci (très sincèrement) pour ton attention et ta patience.

  16. #16
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    Je viens de reprendre ma page d'essai sur le moteur de recherche pour l'adapter à mes besoins. (Merci à dgrichard et à mga_geo sans qui rien n'aurait été possible).
    Cela pourra aider certains...

    Sinon, il me reste à activer la validation de la recherche à partir de la touche "Entrée" du clavier... Là encore, je tourne en rond et quelques conseils des plus pratiques me seraient utiles.
    Merci.

  17. #17
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par cmail Voir le message
    Sinon, il me reste à activer la validation de la recherche à partir de la touche "Entrée" du clavier... Là encore, je tourne en rond et quelques conseils des plus pratiques me seraient utiles.
    Merci.
    C'est dans la 1.2 maintenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
                OpenLayers.Event.observe(
                    form,
                    "keypress",
                    OpenLayers.Function.bind(function(evt) {
                        if (evt.keyCode==key || (key==13 && evt.keyCode==10)) {
                            return buttonCb.apply(this,[e,evt]);
                        }
                        return true;
                    },this)
                );
    form est la variable Javascript contenant le formulaire et buttonCb à la fonction appelée par l'élément du formulaire correspondant à l'envoi du formulaire (grosso modo: le onSubmit). key correspond au code que l'on veut intercepter (le retour chariot par exemple).

    A toi d'adapter

Discussions similaires

  1. Recherche filtrée sur site
    Par freud dans le forum ASP
    Réponses: 2
    Dernier message: 19/07/2005, 09h40
  2. recherche bouquin sur automation ole
    Par Alice9 dans le forum MFC
    Réponses: 3
    Dernier message: 26/05/2005, 01h38
  3. Recherche documentation sur les arbres
    Par Oberown dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 22/09/2004, 01h40
  4. recherche doc sur les courbe de bézier
    Par amaury pouly dans le forum OpenGL
    Réponses: 4
    Dernier message: 29/04/2003, 22h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo