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 :

Niveau de détails en fonction du zoom/échelle


Sujet :

IGN API Géoportail

  1. #1
    Membre du Club Avatar de Mic75
    Homme Profil pro
    Développeur Frontend
    Inscrit en
    Janvier 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Frontend
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 143
    Points : 52
    Points
    52
    Par défaut Niveau de détails en fonction du zoom/échelle
    Bonjour,

    ma problématique est la suivante : j'ai un mapserver qui récupère des données (Open-Data) stockées dans une base PostGis et qui les sert via le protocole WFS. L'une des tables contient les arbres d'un arrondissement de Paris. Si je les affiche à un niveau de zoom trop faible, on ne distingue pas les arbres les uns des autres (cf image) et d'autre part la navigation sur la carte est saccadée du fait du très grand nombre d'éléments à afficher. L'affichage des arbres de façon indviduelle n'a de sens qu'à un niveau de zoom très élevé (cf image).

    Ma question est donc de savoir si il existe un mécanisme permettant de gérer le niveau de détail ?

    Actuellement, je désactive la couche si le niveau de zoom est trop faible (paramètres minZoomLevel et maxZoomLevel). Les problèmes avec cette solution sont :
    1. Les arbres n'apparaissent qu'à un certain niveau de zoom, ce qui peut surprendre l'utilisateur
    2. Quand le zoom est minimal, l'utilisateur ne sait pas où se situent les arbres, il ne les découvrent qu'en zoomant au bon niveau (il doit donc connaitre les zones d'arbres à l'avance)


    Existe-t-il un mécanisme permettant de gérer le nivellement des détails ? Pour ma part j'ai une idée de solution, mais qui me parait trop gourmande.
    J'attends donc vos suggestions avant de me lancer. Merci d'avance.
    Images attachées Images attachées   

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 442
    Points : 502
    Points
    502
    Par défaut
    Plusieurs sites web regroupent les icônes ; par exemple http://www.utagawavtt.com/gmap/geopo...rale-topos-vtt

  3. #3
    Membre du Club Avatar de Mic75
    Homme Profil pro
    Développeur Frontend
    Inscrit en
    Janvier 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Frontend
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 143
    Points : 52
    Points
    52
    Par défaut
    Justement, comment ce regroupement est-il effectué ?

  4. #4
    Membre du Club Avatar de Mic75
    Homme Profil pro
    Développeur Frontend
    Inscrit en
    Janvier 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Frontend
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 143
    Points : 52
    Points
    52
    Par défaut
    Voilà ma modif pour ajouter la stratégie Cluster.
    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
    var clusterStrategy = new OpenLayers.Strategy.Cluster({distance: 15, threshold: 3});
        
        var trees = viewer.getMap().addLayer(
            "WFS",
            'Trees',
            "http://localhost/cgi-bin/mapserv.exe?map=c%3A%5Cms4w%5Cdev%5Cwfs%5Cwfs.map&",
            {
                typename:'trees_wfs'	    			
            },
            {
                featurePrefix:'ms',
    	    featureNS:'http://mapserver.gis.umn.edu/mapserver',
    	    geometryName:'msGeometry',
                projection:'EPSG:2154',
                maxExtent:new OpenLayers.Bounds(653227.687500,6858349.000000, 657171.625000, 6861778.000000),
                styleMap:mstyle,
                visibility:true,
                strategies: [clusterStrategy]
    	}        
        );
    Cependant, la couche ne s'affiche plus. Quelqu'un aurait-il une idée de l'erreur ?

  5. #5
    Membre du Club Avatar de Mic75
    Homme Profil pro
    Développeur Frontend
    Inscrit en
    Janvier 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Frontend
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 143
    Points : 52
    Points
    52
    Par défaut
    Le paramètre strategies était mal placé. En le déplaçant au bon endroit la couche s'affiche à nouveau. Par contre la strategy n'est pas appliquée. Quelqu'un pourrait-il me donner une piste ?
    Voici le code mis à jour :

    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
    var s = new OpenLayers.Style({             
            strokeColor: '#794a31',
            pointRadius: 5,
            fillColor: '#00ce00'
        });
        var mstyle = new OpenLayers.StyleMap(s);
    
    var clusterStrategy = new OpenLayers.Strategy.Cluster({distance: 10, threshold: 3}); //je regroupe touts les points distant de moins de 10 pixels ,quand il y en au moins 3
    
    var trees = viewer.getMap().addLayer(
            "WFS",
            'Trees',
            "http://localhost/cgi-bin/mapserv.exe?map=c%3A%5Cms4w%5Cdev%5Cwfs%5Cwfs.map&",
            {
                typename:'trees_wfs',
                strategies: [clusterStrategy]
            },
            {
                featurePrefix:'ms',
    	    featureNS:'http://mapserver.gis.umn.edu/mapserver',
    	    geometryName:'msGeometry',
                projection:'EPSG:2154',
                maxExtent:new OpenLayers.Bounds(653227.687500,6858349.000000, 657171.625000, 6861778.000000),
                styleMap:mstyle,
                visibility:true    
    	}        
        );

  6. #6
    Membre averti
    Femme Profil pro
    Consultante SIG
    Inscrit en
    Mars 2011
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultante SIG

    Informations forums :
    Inscription : Mars 2011
    Messages : 233
    Points : 356
    Points
    356
    Par défaut
    Bonjour,
    Le paramètre stratégies était bien placé au départ.
    Quand tu l'as deplacé, ta couche s'affichait de nouveau car le paramètre strategies n'était plus pris en compte.
    Essayes d'ajouter la statégie fixed:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    strategies:[
       new OpenLayers.Strategy.Fixed(),
       new OpenLayers.Strategy.Cluster({distance: 10, threshold: 3})
    ]

  7. #7
    Membre du Club Avatar de Mic75
    Homme Profil pro
    Développeur Frontend
    Inscrit en
    Janvier 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Frontend
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 143
    Points : 52
    Points
    52
    Par défaut
    Ça fonctionne, merci beaucoup Zainab.
    Par curiosité, pourquoi faut-il utiliser la stratégie fixed en plus ?

  8. #8
    Membre averti
    Femme Profil pro
    Consultante SIG
    Inscrit en
    Mars 2011
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultante SIG

    Informations forums :
    Inscription : Mars 2011
    Messages : 233
    Points : 356
    Points
    356
    Par défaut
    La Stratégie Fixed permet de charger les données une fois: pas de rechargement de la couche après un déplacement, zoom...
    Dans la plupart des exemples OpenLayers que j'ai trouvé, les deux stratégies sont utilisées en même temps...
    http://openlayers.org/dev/examples/s...y-cluster.html
    Donc si j'ai bien compris, pour que la stratégie cluster fonctionne, il faut charger toutes les données d'un coup.
    lien qui explique comment fonctionne la stratégie cluster

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/04/2014, 10h01
  2. [AC-2003] Calcul en fonction d'une échelle
    Par techie59 dans le forum Modélisation
    Réponses: 2
    Dernier message: 26/04/2010, 10h37
  3. Niveau de détails d'un DC
    Par Sfaxiano dans le forum Diagrammes de Classes
    Réponses: 12
    Dernier message: 13/10/2008, 23h16
  4. Réponses: 10
    Dernier message: 23/10/2007, 09h45
  5. Fonction de zoom à partir d'une sélection souris
    Par mick74 dans le forum OpenGL
    Réponses: 2
    Dernier message: 13/08/2004, 21h41

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