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 :

Génération de KML en fonction de l'emprise courante


Sujet :

IGN API Géoportail

  1. #1
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    379
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 379
    Points : 194
    Points
    194
    Par défaut Génération de KML en fonction de l'emprise courante
    Bonjour,
    J'ai à afficher des réseaux d'éléments qui peuvent être conséquents sur certaines communes (plusieurs milliers parfois)...ce qui serait très (trop) couteux en temps d'affichage...donc j'ai choisi de n'afficher que les éléments de premier niveau (voire deuxième niveau suivant leur dénombrement)...il faut voir cela comme des relations arborescentes entre des éléments.

    J'aimerais savoir s'il me serait possible (et si oui, comment) d'afficher contextuellement via une couche supplémentaire les éléments "fils" des éléments présents à l'affichage, i.e. visibles (généralement après zoom sur une portion de commune)...sachant que je connais dans ma base oracle leur géolocalisation...

    En gros et en résumé, j'aurais besoin de savoir les latitudes et les longitudes des points haut/gauche de la carte, et bas/droite de la carte pour sélectionner les éléments voulus ayant leur géolocalisation dans cet intervalle....le reste n'est pas du tout un pb pour ce qui est de générer le KML et l'afficher...à moins que vous me suggériez une autre méthode...je suis preneur.

    Suis-je assez clair ?

  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
    Complètement et plusieurs soluces pour cela :


    1. Tu as la possibilités d'avoir un WFS (Mapserver, Geoserver), tu joues avec les règles d'affichage => 1 seule couche, mais un paramètrage serveur ;
    2. Tu découpes tes KML en tuiles à différentes plages d'échelles. Tu utilises la possibilité de l'API de n'avoir q'une couche dans le Gestionnaire qui est l'ensemble des tuiles (couches élémentaires). Chaque couche élémentaire ayant sa plage, elle n'est affichée que si nécessaire. Chaque couche étant une tuile, elle ne sera requêtée que si l'emprise courante la touche. C'est plus complexe à mettre en oeuvre, mais ne nécessite pas un WFS ...

  3. #3
    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 j'ai bien compris, tu souhaites afficher des renseignements dans une plage de zoom bien précise. Ai-je bien compris?
    Tu peux t'en sortir, je crois, en utilisant astucieusement minZoomLevel:X,
    maxZoomLevel:Y dans un addLayer() de ton fichier kml portant ces renseignements secondaires. Ceux-ci ne seront affiché que quand le zoom sera compris entre X et Y. Pour peu que Y soit inférieur au niveau "zoom" appelé dans ton getMap().setCenterAtLonLat(lat,long,zoom) initial. Cela devrait répondre à tes besoins.
    Suis-je clair?

  4. #4
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    379
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 379
    Points : 194
    Points
    194
    Par défaut
    cmail :
    non, ce n'est pas cela...l'idéal (dans l'absolu) serait de ne voir qu'à grande échelle que les éléments de premier niveau...puis en zoomant de faire apparaitre les éléments de deuxième niveau en relation avec les éléments de premier niveau qui sont actuellement affichés...et éventuellement en zoomant plus afficher les éléments de troisième niveau reliés à ceux du deuxième niveau actuellement affichés...tout cela SEULEMENT sur la portion affichée sur la carte.

    Comme j'imagine que cela n'est pas possible...Pour des grosses communes (j'ai des fichiers KML entiers de près de 30Mo...donc l'affichage est impensable, j'ai essayé LOL) je pensais contourner le pb en ne générant que les éléments de premier niveau dans le KML...et de ne gérer qu'à la "demande utilisateur", via un click sur un bouton, les éléments liés de moindre niveau dans une autre couche KML après que ceux-ci ait fait la démarche de zoomer sur un quartier, voire une rue de la commune...
    Je me disais que cela serait bien de pouvoir récupérer les latitude, longitude min et max de la carte au moment de cet affichage pour extraire dynamiquement les infos de la BDD et générer le KML ad hoc...puis le charger.
    (mais comment récupérer ces coordonnées ??? est-ce possible ?)

    DGRichard :
    1- On oublie le WFS...juste KML
    2- Je veux bien...cela me semble très très intéressant comme approche (si j'ai au moins compris le principe) mais je ne sais pas trop comment faire...découper les KML en tuiles ???
    ...aurais-tu un exemple ?...même si ce n'est qu'un squelette ou un canevas de traitement...

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 124
    Points : 1 764
    Points
    1 764
    Par défaut Emprise de la carte affichée
    Je crois que le code suivant donne la réponse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      var map = viewer.getMap();
      map.setCenterAtLonLat( - 1.4981, 48.1308, 13);
      me = viewer.getMap().getExtent();
      a = me.toGeometry();
      oLinearRing = a.components[0];
      for(var i=0; i<oLinearRing.components.length; ++i) {
        oPoint = oLinearRing.components[i];
    		var pt = oPoint.clone();
    		pt.transform(map.getProjection(), map.displayProjection);
        console.log("getExtent %i lon:%s lat:%s", i, pt.x.toFixed(6), pt.y.toFixed(6));
      }

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 124
    Points : 1 764
    Points
    1 764
    Par défaut wiki.openstreetmap.org
    Pour openlayers, voici la réponse de openstreetmap
    http://wiki.openstreetmap.org/wiki/O...rs_Dynamic_KML

  7. #7
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    379
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 379
    Points : 194
    Points
    194
    Par défaut
    Je vais voir dès demain pour tester le code que tu m'as donné....

    Pour ce qui est du lien sur openstreetmap...je ne vois pas en quoi ce qui y est présenté pourrait m'aider ???

  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 Super overlays
    Citation Envoyé par Unusual Voir le message
    1- On oublie le WFS...juste KML
    2- Je veux bien...cela me semble très très intéressant comme approche (si j'ai au moins compris le principe) mais je ne sais pas trop comment faire...découper les KML en tuiles ???
    ...aurais-tu un exemple ?...même si ce n'est qu'un squelette ou un canevas de traitement...
    Mon idée est l'utilisation des super overlays vector en KML, ce que fait Geoserver/WFS ...

    J'ai fouillé le web et pas de réponses vraiment utiles ...

    Un canevas de traitement serait :

    1. Mettre les données sur une pyramide vecteur (par exemple, régions, départements, communes) sur une même emprise ;
    2. Mettre les niveaux de cette pyramide dans un format comme SHAPEFILE qui supporte via GDAL/ORG les requêtes par emprises;
    3. Se faire une grille pour chaque niveau de tuiles à créer (emprises);
    4. Pour chaque niveau, pour chaque tuile, extraire les données du SHAPEFILE du niveau selon l'emprise de la tuile (il y aura forcément des données redondantes);
    5. Transformer les tuiles SHAPEFILE en KML;
    6. Paramétrer l'interface (le plus long à mon avis!)

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 124
    Points : 1 764
    Points
    1 764
    Par défaut Autant pour moi
    Le titre m'a fait pensé à une adaptation de l'exemple Google Maps
    http://code.google.com/support/bin/a...y?answer=69906
    Et c'était une erreur, le script n'a de dynamique que le positionnement initial.

  10. #10
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    379
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 379
    Points : 194
    Points
    194
    Par défaut
    Je n'ai toujours pas eu le temps de tester le code fourni par mga_geo (pas avant 10 jours, je suis occupé à d'autres projets)...mais un peu dans la même veine, j'aurai voulu savoir s'il y avait un événement déclenché au changement de niveau de zoom (avant ou après le changement effectif)...pour effectuer un traitement à ces moments là...

  11. #11
    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 "zoomend" event
    Lors du changement de zoom, l'évènement "zoomend" est lancé. Il "suffit" donc d'enregistrement au niveau de la map un écouteur de cette évènement.

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 124
    Points : 1 764
    Points
    1 764
    Par défaut un exemple
    Facile non?
    http://atlasnw.free.fr/web/geoportai...s/emprise.html
    Bon, il reste le plus dur à faire, le côté serveur!

  13. #13
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    379
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 379
    Points : 194
    Points
    194
    Par défaut
    Merci mga_geo...c'est exactement ce dont j'avais besoin...

    Pas si compliqué que cela, effectivement ...mais faut bien connaitre les mécanismes d'openlayers/geoportail...ce qui n'est pas forcément donné

    Pour le côté serveur, pour moi, c'est le plus simple...

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

Discussions similaires

  1. [reporting] appeler une fonction statique du projet courant
    Par maa dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 15/10/2012, 13h52
  2. Fonction UTL_FILE : génération d'un CR/LF parasite
    Par strikerm59 dans le forum SQL
    Réponses: 0
    Dernier message: 26/03/2008, 09h37
  3. défaut des fonctions de génération de nombres aléatoire type rand()
    Par Christophe30 dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 17/02/2008, 20h21
  4. Fonction de génération aléatoire gaussienne
    Par Linio dans le forum Langage
    Réponses: 5
    Dernier message: 13/08/2007, 12h57
  5. Calcul en fonction de l'heure courante
    Par stefano dans le forum Delphi
    Réponses: 32
    Dernier message: 19/02/2007, 20h00

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