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 :

communication API Geoportail / KML / page HTML ?


Sujet :

IGN API Géoportail

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Autriche

    Informations forums :
    Inscription : Janvier 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut communication API Geoportail / KML / page HTML ?
    bonjour,

    je tâtonne toujours un peu... mon but: dans une API Géoportail:
    1. charger des fichiers KML (sortant direct de Google Earth) avec plusieurs "LineString"
    2. les faire "réagir" onmouseover tout en écrivant de l'info contenue dans le KML sur la page HTML (en bas de la carte).

    ceci marche ici: http://www.provence-guide.net/maps/i...ign_kml20.html cependant cette interaction passe par les styles d'Openlayers et vu que tout y est axé sur un "label", il n'y pas moyen de faire ça sans "label"... est-ce la bonne et unique manière de faire ça, ou bien y a-t-il mieux?

    et surtout j'aimerai:

    3. faire réagir les mêmes tracés "LineString" a partir d'une liste extérieure à l'API. là je coince définitivement avec l'approche des OpenLayers.Style...

    un peu dans ce genre là, mais visiblement ici les tracés sont dédoublés et en plus avec des coordonnées généralisées. on dirait que cette gestion est donc extérieure à l'API: http://www.vttrack.fr/map.php?zoom=4...opos|Sentiers|

    merci si vous connaissez un exemple de ce genre de communication...

    andré

  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
    Citation Envoyé par a666a666 Voir le message
    ceci marche ici: http://www.provence-guide.net/maps/i...ign_kml20.html cependant cette interaction passe par les styles d'Openlayers et vu que tout y est axé sur un "label", il n'y pas moyen de faire ça sans "label"... est-ce la bonne et unique manière de faire ça, ou bien y a-t-il mieux?
    Tu utilises les labels, alors que tu peux simplement utiliser les popups qui s'affiche lors de l'évènement "mouseover" qui appelle la méthode onSelect() de ta couche KML.


    Citation Envoyé par a666a666 Voir le message
    et surtout j'aimerai:

    3. faire réagir les mêmes tracés "LineString" a partir d'une liste extérieure à l'API. là je coince définitivement avec l'approche des OpenLayers.Style...
    Je ne comprends pas

    Citation Envoyé par a666a666 Voir le message
    un peu dans ce genre là, mais visiblement ici les tracés sont dédoublés et en plus avec des coordonnées généralisées. on dirait que cette gestion est donc extérieure à l'API: http://www.vttrack.fr/map.php?zoom=4&lat=45.213&lon=7.99805&layers=Google%20Physical|Topos|Sentiers|
    Il suffit de regarder le code, le fichier pFeature.js fait la généralisation à ce qu'il me semble. Ensuite, couches.js semble lui gérer les styles.

    Donc: oui, c'est extérieur à l'API

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Autriche

    Informations forums :
    Inscription : Janvier 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    bonjour

    Citation Envoyé par dgrichard Voir le message
    Tu utilises les labels, alors que tu peux simplement utiliser les popups qui s'affiche lors de l'évènement "mouseover"
    justement, les popups à l'intérieur de l'API, c'est ce que je ne veux pas. la carte sera petite et il y aura toujours des problèmes de place. à priori ceci pourrait marcher, mais je n'ai vraiment pas besoin ce ces "tooltips". n'y a-t-il pas moyen d'accrocher cet évènement à autre chose ?


    Citation Envoyé par dgrichard Voir le message
    Je ne comprends pas
    en gros mon KML chargé a un DOM. et de l’extérieur j'aimerai faire quelque chose dans ce genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementsbyTagName('Placemark')[6].style.borderColor='red'
    mais c'est visiblement pensé trop simple...


    Citation Envoyé par dgrichard Voir le message
    Il suffit de regarder le code, le fichier pFeature.js fait la généralisation à ce qu'il me semble. Ensuite, couches.js semble lui gérer les styles.
    le code est prohibitif. ce que les fichiers font à peu près, d'accord, mais je ne trouve pas les event-listeners du tableau de droite.

  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 a666a666 Voir le message
    justement, les popups à l'intérieur de l'API, c'est ce que je ne veux pas. la carte sera petite et il y aura toujours des problèmes de place. à priori ceci pourrait marcher, mais je n'ai vraiment pas besoin ce ces "tooltips". n'y a-t-il pas moyen d'accrocher cet évènement à autre chose ?
    Ok, quant on clique/survol sur un picto la méthode onSelect() est appelée ... Il faut surcharger cette méthode qui a en paramètre l'objet (Feature) sélectionné. Par défaut, l'API ouvre des popups. En écrasant cette méthode, tu fais ce que tu veux. Mais, au préalable, il faut aussi surcharger la méthode onFeatureInsert() qui elle crée les popups

    Grosso modo, dans l'API :

    * onFeatureInsert est la méthode codée dans Geoportal.Popup.Anchored.createPopUpForKMLFeature();
    * onSelect est la méthode codée dans Geoportal.Control.selectFeature.

    Citation Envoyé par a666a666 Voir le message
    en gros mon KML chargé a un DOM. et de l’extérieur j'aimerai faire quelque chose dans ce genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementsbyTagName('Placemark')[6].style.borderColor='red'
    mais c'est visiblement pensé trop simple...
    Surtout que ton arbre DOM a été transformé en un tableau de features dans ta couche KML

    Citation Envoyé par a666a666 Voir le message
    le code est prohibitif. ce que les fichiers font à peu près, d'accord, mais je ne trouve pas les event-listeners du tableau de droite.
    Certes, mais c'est du code instructif

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Autriche

    Informations forums :
    Inscription : Janvier 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    petits pas, mais le grand me manque encore...

    je charge mon KML et onFeatureInsert ça m'identifie les LineStrings chargés. dans l'exemple je les sors ligne par ligne sous la carte. bon.

    question 1, sachant que mes KMLs sortent de Google Earth et que les éléments contenus n'ont pas d'attributs "id": ce chargement est-il toujours séquentiel de haut en bas, l'ordre est-il toujours préservé ?

    grâce à myTracksLayer.features[cur] je peux accéder aussi par la suite à ceux-ci. bien.

    question 2: comment accéder à un feature par son ID du type "OpenLayers.Feature.Vector_257"? dans des exemples je vois toujours de boucles for...in pour y accéder.

    par la suite il me semble qu'on parle un peu de choses différentes, enfin c'est une impression floue...

    Citation Envoyé par dgrichard Voir le message
    Ok, quant on clique/survol sur un picto la méthode onSelect() est appelée ... Il faut surcharger cette méthode qui a en paramètre l'objet (Feature) sélectionné. Par défaut, l'API ouvre des popups. En écrasant cette méthode, tu fais ce que tu veux. Mais, au préalable, il faut aussi surcharger la méthode onFeatureInsert() qui elle crée les popups
    si je joue avec onSelect j'arrive à faire la même extraction de données qu'avec la fonction imbriquée dans StyleMap:temporary:context. si je fais ça de l'intérieur j'ai mon highlight de la ligne (passage au rouge), de l'extérieur non, j'ai juste mon extraction de données.
    cependant c'est le highlight que je veux initier de l'extérieur, si possible sans duplication d'objets et sans redraw total de la couche/carte.

    en gros j'aimerai appliquer renderIntent de l'extérieur de l'API à un feature KML spécifique grace à son ID interne.

    merci de confirmer/infirmer ces suppositions...

    andré

  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
    Pas sûr d'arriver à suivre tellement, il y a d'informations/questions ...

    Grosso modo :

    * OpenLayers gère des objets (OpenLayers.Feature.Vector), d'ailleurs peu importe leur source;

    * Toute action sur les objets / couches est gérée au travers des évènements portés par OpenLayers.Feature.Vector (e.g., "featureselected");

    * ces actions utilisent un « bus » qui contient l'objet en question.

    Donc:

    Dans l'API, il est possible d'utiliser le bus pour échanger avec l'extérieur (l'objet contient son ID par exemple).
    Inversement, si l'extérieur possède l'ID d'un objet, il peut utiliser OpenLayers.Layer.Vector.getFeatureById() ou la méthode plus générique getFeaturesBy().

    Cependant, comme indiqué, ces méthodes parcourent tous les objets de la couche ...

    Il faudrait donc stocker hors API directement l'objet lui-même.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Je me permets de "déterrer" un peu le sujet.

    Concernant votre dernière réponse DG Richard, comment fait-on pour faire le lien entre l'ID du genre "OpenLayers.Feature.Vector_257" renvoyé au clic sur le layer concerné et le GPX idoine que l'on a chargé ?

    En vous remerciant,

  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
    Citation Envoyé par yellowkitten Voir le message
    Concernant votre dernière réponse DG Richard, comment fait-on pour faire le lien entre l'ID du genre "OpenLayers.Feature.Vector_257" renvoyé au clic sur le layer concerné et le GPX idoine que l'on a chargé ?
    L'objet appartient à une couche via la propriété layer de l'objet ...

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Citation Envoyé par dgrichard Voir le message
    L'objet appartient à une couche via la propriété layer de l'objet ...
    Merci beaucoup, vous m'avez mis sur la voie, ça devait être le seul chemin que je n'avais pas testé. Je ne savais plus par quel bout prendre le problème.

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/04/2010, 17h33
  2. Centrage Geoportail sur une page html
    Par laguite51 dans le forum IGN API Géoportail
    Réponses: 3
    Dernier message: 27/03/2010, 21h39
  3. probleme communication entre getUrl flash et page html via ajax
    Par sooprano dans le forum Intégration
    Réponses: 0
    Dernier message: 08/07/2009, 16h00
  4. [MySQL] Communication base de données MySQL et page HTML / PHP
    Par kasse dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/01/2009, 20h39
  5. Communication : page HTML/port série
    Par dvedve dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 04/04/2007, 11h09

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