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 :

Problème sélection couche


Sujet :

IGN API Géoportail

  1. #1
    Membre régulier
    Homme Profil pro
    Webmaster perso, Géomatique travail
    Inscrit en
    Janvier 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster perso, Géomatique travail
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2012
    Messages : 79
    Points : 70
    Points
    70
    Par défaut Problème sélection couche
    Bonjour,

    J'ai un problème pour cliquer sur différentes couches KML.
    J'ai essayé d'appliquer la solution de la discussion : http://www.developpez.net/forums/d11...he-inferieure/

    Mais je n'y arrive pas. Le problème vient de la déclaration des couches : les kml sont affichés à la demande de l'utilisateur en fonction de leur présence dans un répertoire de travail.

    Voici le lien de mon fichier : http://randonnee.pedestre85.free.fr/...temp-v13-2.php.
    Je ne sais pas :

    1/ comment donner des noms aux couches ajoutées
    kmlLayer = viewer.getMap().addLayer(...


    2/ Ajout d'un contrôle de sélection auquel on va indiquer la liste des couches gérées:
    var selectOpts=viewer.getMap().getPopupDefaults('KML');

    var select_multi= new OpenLayers.Control.SelectFeature([?????], selectOpts);
    viewer.getMap().addControl(select_multi);

    3/ Activer ce contrôle:
    select_multi.activate();

    Où placer les lignes 2 - 3

    Olivier

  2. #2
    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
    Sur 1/ pourquoi ne pas donner comme nom le nom du kml sans '.kml'

    Sur 2/ il faudrait collecter les couches KML ajoutées via addLayer("KML",...) en passant ABSOLUMENT l'option preventDefaultBehavior:true (dans un premier temps, on pourra affiner plus tard sur quelle fonctionnalité désactiver). Puis avec les couches KML collectées, on les passe OpenLayers.Control.SelectFeature()

  3. #3
    Membre régulier
    Homme Profil pro
    Webmaster perso, Géomatique travail
    Inscrit en
    Janvier 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster perso, Géomatique travail
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2012
    Messages : 79
    Points : 70
    Points
    70
    Par défaut pas glop
    bonjour,
    J'ai pas phosphoré à l'aide d'exemple de multicouche

    Mon problème était de créer des couches à l'aide de fichier kml stocké dans un répertoire : je liste les fichiers du répertoire (php) et je les affiche (javascript).
    J'arrive à lister et créer les couches mais quand je veux les rendre sélectionnable là pas moyens
    si je mets le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var select_multi= new OpenLayers.Control.SelectFeature([couche0,couche1,couche2],selectOpts);
    La multi-sélection est opérationnelle.
    si je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var select_multi= new OpenLayers.Control.SelectFeature([kmltab],selectOpts);
    çà bug
    pourtant :alert(kmltab) me donne : couche0,couche1,couche2
    Le lien du fichier

    http://randonnee.pedestre85.free.fr/...temp-v13-3.php

    Il doit y avoir encore une solution simpliste que moi mécréant informatique ne trouve pas.

    Olivier

  4. #4
    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 momo8508 Voir le message
    Il doit y avoir encore une solution simpliste que moi mécréant informatique ne trouve pas.
    Ce ne sont pas les noms des couches, mais les variables qu'il faut mettre dans le tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var couche0= ...;
    kmltab.push(couche0);
    et non pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var couche0= ...;
    kmltab[0]= "couche0";

  5. #5
    Membre régulier
    Homme Profil pro
    Webmaster perso, Géomatique travail
    Inscrit en
    Janvier 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster perso, Géomatique travail
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2012
    Messages : 79
    Points : 70
    Points
    70
    Par défaut ben j'avais essayé mais pas réussi
    voici le lien avec la solution testée : http://randonnee.pedestre85.free.fr/...temp-v13-3.php

    Cela ne marche pas

    Cela vient sans doute du fait que je crée le code en php ?!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     <?php
        
       for($j=0; $j<sizeof($tabkml); $j++) {
       echo'var couche'.$j.' = viewer.getMap().addLayer("KML",tabkml['.$j.'],"temp/"+tabkml['.$j.']+".kml",{styleMap:styles,visibility: true,panMapIfOutOfView:false,minZoomLevel: 2,maxZoomLevel: 16},{formatOptions:{extractStyles:false}});';  
       echo 'kmltab.push(couche'.$j.');';
       }
             
      ?>
    Olivier

  6. #6
    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 momo8508 Voir le message
    Cela vient sans doute du fait que je crée le code en php ?!!
    Ben oui ...

    1/ Corrige
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var select_multi= new OpenLayers.Control.SelectFeature([kmltab],selectOpts);
    en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var select_multi= new OpenLayers.Control.SelectFeature(kmltab,selectOpts);
    sans les [], kmltab est un tableau

    2/ Indique à addLayer() de ne pas créer les contrôleurs de sélection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo 'var couche'.$j.' = viewer.getMap().addLayer("KML",tabkml['.$j.'],"temp/"+tabkml['.$j.']+".kml",{styleMap:styles,visibility: true,panMapIfOutOfView:false,minZoomLevel: 2,maxZoomLevel: 16},{formatOptions:{extractStyles:false},preventDefaultBehavior:true});';
    3/ Affine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo 'var couche'.$j.' = viewer.getMap().addLayer("KML",tabkml['.$j.'],"temp/"+tabkml['.$j.']+".kml",{styleMap:styles,visibility: true,panMapIfOutOfView:false,minZoomLevel: 2,maxZoomLevel: 16},{formatOptions:{extractStyles:false},preventDefaultBehavior:{onFeatureInsert:false}});';
    4/ j'ai des erreurs dans ta page sous firebug ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    b.renderer is undefined
    Geoportal.Control.MeasureToolbar is not a constructor
    charge donc l'API étendue pour avoir les outils de mesure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    http://api.ign.fr/geoportail/api/js/1.3/GeoportalExtended.js

  7. #7
    Membre régulier
    Homme Profil pro
    Webmaster perso, Géomatique travail
    Inscrit en
    Janvier 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster perso, Géomatique travail
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2012
    Messages : 79
    Points : 70
    Points
    70
    Par défaut
    Bonjour,
    J'ai fait tes modifications. Cela marche bien sur!
    Je désire modifier désormais les popup

    J'ai essayé avec la fonction function kmlLoadend()

    http://randonnee.pedestre85.free.fr/...temp-v13-5.php
    Je lance bien kmlloadend mais plus de modification de la fenetre d'info et en plus les couches "moulinent"

    J'ai essayé par un autre moyen via les popup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var select_multi= new OpenLayers.Control.SelectFeature(kmltab, {onSelect: onFeatureSelect, onUnselect: onFeatureUnselect});
    cela marche mais si je dé-selectionne la couche puis la re-sélectionne
    ou si elle n'est pas visible au lancement (hors cadre)et quand je me déplace vers la zone d'affichage, j'ai la fenetre de base à savoir toute les informations du kml...
    Ce que je ne veux pas.
    Mon fichier :
    http://randonnee.pedestre85.free.fr/...temp-v13-3.php

    Olivier

  8. #8
    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
    Je comprends pas, peux-tu être plus explicite (quitte à faire plusieurs scénarios simples)

  9. #9
    Membre régulier
    Homme Profil pro
    Webmaster perso, Géomatique travail
    Inscrit en
    Janvier 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster perso, Géomatique travail
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2012
    Messages : 79
    Points : 70
    Points
    70
    Par défaut scénarios
    essai 1
    j'appelle la fonction kmlloadend
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     echo'var couche'.$j.' = viewer.getMap().addLayer("KML",tabkml['.$j.'],"temp/"+tabkml['.$j.']+".kml",{styleMap:styles,visibility: true,panMapIfOutOfView:false,eventListeners:{"loadend":kmlLoadend},minZoomLevel: 2,maxZoomLevel: 16},{formatOptions:{extractStyles:false},preventDefaultBehavior:{onFeatureInsert:false}});';
    la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    function kmlLoadend() {
      
      var liste_ilots='';
      var exploitation='';
      var PT=0;
      var PP=0;
      var CER=0;
      var AC=0;
      var AU=0;
      var PROT=0;
      var OLEA=0;
      var MAIS=0;
      var GEL=0;
      var surftotale=0;
      var surfaceculture="";
      //affiche l'ensemble de parcelles
      viewer.getMap().zoomToExtent(kmltab.getDataExtent());
      
      // baisse le niveau de zoom de 1 pour meilleur affichage
         //var zoom=viewer.getMap().getZoom();
         // zoom=zoom-1;
         // viewer.getMap().zoomTo(zoom);
      
       for (var i= 0, nbF = kmltab.features.length; i<nbF; i++) {
        if ( ! kmltab.features[i].attributes ) {
          continue;
        }
         for ( var k in kmltab.features[i].attributes ) {
          delete kmltab.features[i].attributes['ident'];
        }
    // les clé a conserver
        var cles = /(Num_ilot|Surf_ilot|PT|PP|CER|MAIS|OLEA|PROT|AU|AC|GEL|code_MAJ)/;
        for ( var k in kmltab.features[i].attributes ) {
          if ( ! cles.test(k) ) {
            delete kmltab.features[i].attributes[k];
            continue;
          }
          if ( kmltab.features[i].attributes[k].value == 0 ) {
            delete kmltab.features[i].attributes[k];
          }
        }
      }// fin for i
    }//fin fonction
    voici le résultat !
    Nom : explication 1.JPG
Affichages : 77
Taille : 126,9 Ko


    http://randonnee.pedestre85.free.fr/...temp-v13-5.php

    essai 2 : je passe par la création de popup.

    à première vue cela fonctionne
    Nom : explication 2.1.JPG
Affichages : 79
Taille : 118,8 Ko
    j'ai une popup sur chaque kml.
    si je navigue sur la carte en faisant sortir le kml de la zone de visibilité puis je reviens sur le kml, quand je clique dessus, j'ai la fenêtre d'informations de base avec toutes les informations du kml. iden couche déselectionné dans menu gestion des couches
    Nom : explication 2.2.jpg
Affichages : 85
Taille : 144,5 Ko
    le résultat
    Nom : explication 2.3.jpg
Affichages : 80
Taille : 134,1 Ko
    http://randonnee.pedestre85.free.fr/...temp-v13-3.php
    voilà le problème

    Personnellement, j'aime mieux l'affichage kmlloadend.
    Olivier

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 130
    Points : 1 765
    Points
    1 765
    Par défaut
    Les urls ne fonctionnent pas

  11. #11
    Membre régulier
    Homme Profil pro
    Webmaster perso, Géomatique travail
    Inscrit en
    Janvier 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster perso, Géomatique travail
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2012
    Messages : 79
    Points : 70
    Points
    70
    Par défaut urls rectifiées
    je les avais copié du message précèdent...

  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
    3 fois la même erreur et kmlLoaded n'est donc jamais appelé complètement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    kmltab.getDataExtent is not a function line 163 in http://randonnee.pedestre85.free.fr/pacage/outil-affichage-rep-temp-v13-5.php
    en fait remplace kmltab par this dans kmlLoaded

    Au passage, tu as deux fois l'API qui est chargée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script type="text/javascript" src="http://api.ign.fr/geoportail/api/js/1.3/Geoportal.js"></script>
    <script type="text/javascript" src="http://api.ign.fr/geoportail/api/js/1.3/GeoportalExtended.js"></script>

  13. #13
    Membre régulier
    Homme Profil pro
    Webmaster perso, Géomatique travail
    Inscrit en
    Janvier 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Webmaster perso, Géomatique travail
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2012
    Messages : 79
    Points : 70
    Points
    70
    Par défaut
    this
    je ne connaissais pas son utilisation : de la prog orienté objet ?

    Au passage, tu as deux fois l'API qui est chargée :
    Je pensais que l'une était complémentaire de l'autre... il y a encore du chemin à faire.....

    C'est résolu quand même

    Olivier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème sélection de features dans plusieurs couches
    Par momo8508 dans le forum IGN API Géoportail
    Réponses: 4
    Dernier message: 25/09/2012, 17h14
  2. Problème sélection MAX() et GROUP BY
    Par nicolep dans le forum Requêtes
    Réponses: 7
    Dernier message: 12/06/2007, 12h47
  3. [VB.NET] Problème sélection de ligne dropdownlist
    Par Azephel dans le forum ASP.NET
    Réponses: 5
    Dernier message: 16/03/2007, 10h44
  4. ComboBox : problème sélection sensible à la casse
    Par pataguillon dans le forum MFC
    Réponses: 3
    Dernier message: 13/03/2007, 16h34
  5. [RegEx] Problème sélection données entre balises
    Par raptorman dans le forum Langage
    Réponses: 3
    Dernier message: 17/12/2006, 21h39

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