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 :

Version 1.0beta5: couche wms-c & Multi-fournisseurs


Sujet :

IGN API Géoportail

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 94
    Points : 55
    Points
    55
    Par défaut Version 1.0beta5: couche wms-c & Multi-fournisseurs
    Bonjour,

    Curieusement à contrario des couches WMS et WFS les couches WMS-C ne suivent pas lorsqu'on change de fournisseur. Je veux dire par là qu'elle est présente avec le fond de carte IGN mais si je passe sous OSM ou Google elle ne fait plus partie de la liste.

    Est-ce normal ?

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 27
    Points : 35
    Points
    35
    Par défaut
    question liée : la propriété nativeResolutions est actuellement mandatory. Mais ne pourrait-elle pas être déduite de la baselayer ? Ce laisse penser http://api.ign.fr/geoportail/api/doc...iveResolutions si j'ai bien compris ?

    Edit : en pratique ça a l'air pas si simple..;ces
    spec http://wiki.osgeo.org/wiki/WMS_Tilin...Recommendation et http://wiki.osgeo.org/wiki/Tile_Map_..._Specification
    semblent préciser que les résolutions devraient être publiées par le serveur WMS à une requête GetCapabilitites... mais en pratique TileCache de MetaCarta ne le fait pas par exemple

    Merci,

  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
    Citation Envoyé par shama Voir le message
    Bonjour,

    Curieusement à contrario des couches WMS et WFS les couches WMS-C ne suivent pas lorsqu'on change de fournisseur. Je veux dire par là qu'elle est présente avec le fond de carte IGN mais si je passe sous OSM ou Google elle ne fait plus partie de la liste.

    Est-ce normal ?
    Oui ... et non


    • Oui : les caches tuilés du Géoportail sont en une seule projections (équidistantes cylindriques). Un changement de fournisseurs (qui sont en général sous Mercator Sphérique) fait disparaître l'accès à ce cache;
    • Non : il faudrait calculer un cache en Mercator Sphérique pour que les WMS-C restent

  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 Profil WMS-C
    Citation Envoyé par Florent13 Voir le message
    question liée : la propriété nativeResolutions est actuellement mandatory.
    Non : si elle n'est pas définie, l'API utilise resolutions.

    Citation Envoyé par Florent13 Voir le message
    Mais ne pourrait-elle pas être déduite de la baselayer ?
    Non, comme tu l'indiques il faudrait analyser les capacités du service pour récupérer les résolutions. Et seules les projections compatibles seraient prises en compte.
    Notre idée est de dire :

    1. Une couche WMS-C est exposée en projection XXXPRJ avec une pyramide de résolutions XXXPYR;
    2. La carte est en projection MAPPRJ avec une pyramide de résolutions calculée à partir de la baseLayer courante.

    Deux projections sont dites compatibles s'il existe deux coefficients Kx, Ky tels que la taille des tuiles de la première projection ont systèmatiquement, un rapport Kx sur la longueur et Ky sur la largeur respectivement. Sous ces conditions, il est possibles d'afficher les tuiles nativement en XXXPRJ en MAPPRJ

    L'objet de nativeResolutions et nativeProjection est de stocker les projections natives côté serveur, alors qu'OpenLayers gère resolutions et projection comme étant les projections internes de la couche.

    De notre côté, les capacités du serveur donnent les résolutions, mais comme on n'utilise pas une projection mondialement connue (géographique sur WGS84 ou Mercator Sphérique comme Google), il faudrait que l'on rajoute les éléments de définitions définis ici ...

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 94
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par dgrichard Voir le message
    Oui ... et non


    • Oui : les caches tuilés du Géoportail sont en une seule projections (équidistantes cylindriques). Un changement de fournisseurs (qui sont en général sous Mercator Sphérique) fait disparaître l'accès à ce cache;
    • Non : il faudrait calculer un cache en Mercator Sphérique pour que les WMS-C restent

    ATTENTION je parlais ici d'une couche WMS-C personnelle en EPSG:4326 (pas une couche Geoportail) qui correspond à un cache d'une couche WMS qui fonctionne correctement qq soit la projection du baselayer.

  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 shama Voir le message
    ATTENTION je parlais ici d'une couche WMS-C personnelle en EPSG:4326 (pas une couche Geoportail) qui correspond à un cache d'une couche WMS qui fonctionne correctement qq soit la projection du baselayer.
    Même combat, pour que la couche reste active, il faut :

    1. que la projection des tuiles soit compatibles (si tu as Mercator Sphérique, il faut que ton cache soit exposable en Mercator Sphérique et pas en géographique);
    2. que le callback gère cela correctement (c'est pas le cas actuellement car j'ai pas géré les projections possibles dans le cas du WMS-C). Néanmoins, tu peux appliquer la règle des WMS-C Géoportail : deux couches cachées une en EPSG:4326 et une en Mercator Sphérique

    C'est pas gagné, mais cela devrait te permettre d'avancer ...

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 27
    Points : 35
    Points
    35
    Par défaut
    Merci pour la réponse

    En fait ce qui est un peu décevant en l'état, c'est que avec shama on parvient a afficher une même couche WMS en EPSG:4326 sur base layers INGF et Mercator.... mais dès que l'on passe à WMS-C tout devient plus statique...

    d'ailleurs je suis même pas persuadé que l'on soit obligé d'utiliser une layer WMS-C pour accéder à un WMS caché par tilecache ?
    Une layer WMS devrait aussi faire l'affaire ? (Cf ta réponse sur nativeResolutions vs resolutions ?)

    Autre remarque: une déclaration WMS-C avec projection 900913 plante ligne 97 de GeoportalExtended.js (22-11 release), je t'envoie une url de test...

  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 Florent13 Voir le message
    d'ailleurs je suis même pas persuadé que l'on soit obligé d'utiliser une layer WMS-C pour accéder à un WMS caché par tilecache ?
    Une layer WMS devrait aussi faire l'affaire ? (Cf ta réponse sur nativeResolutions vs resolutions ?)
    WMS-C/TileCache : même combat : tuiles de taille fixe pré-calculées ou calculées à la volée avec mise en cache pour les requêtes suivantes. On peut faire plusieurs caches dans plusieurs projections. Pour faire une visu, on utilise n tuiles

    WMS: image de taille non fixe, mais éventuellement limité en taille maximale. Possibilité de reprojection à la volée et de mise en cache.

    Les premiers sont ultra-performants, mais nécessite un pré-calcul.
    Les seconds sont à géométrie (projection) variables mais explose sous la charge (à infrastructure identique avec TileCache/WMS-C/TMS).

    Donc, oui tu peux remplacer l'un par l'autre (OL fait des requêtes tuilés dans tous les cas sauf que dans le cas WMS, tu te prends plein de requêtes "simultannées")... et tu charges ton infrastructure par des reprojections éventuellement lourde.

    Ce remplacement peut se concevoir pour du vecteur (pas trop lourd), mais pour de l'image ...

  9. #9
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 94
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par dgrichard Voir le message
    Même combat, pour que la couche reste active, il faut :

    1. que la projection des tuiles soit compatibles (si tu as Mercator Sphérique, il faut que ton cache soit exposable en Mercator Sphérique et pas en géographique);
    2. que le callback gère cela correctement (c'est pas le cas actuellement car j'ai pas géré les projections possibles dans le cas du WMS-C). Néanmoins, tu peux appliquer la règle des WMS-C Géoportail : deux couches cachées une en EPSG:4326 et une en Mercator Sphérique

    C'est pas gagné, mais cela devrait te permettre d'avancer ...
    Pour continuer sur le sujet ET SANS parler de multi-fournisseur de base layer, si je dé-zoom et que je tombe en projection Miller alors la couche WMSC n'est plus projetée au bon endroit. (alors que c'est OK en FXX)

    Je vous remet ici la définition de la déclaration de la couche WMS-C côté javascript si jamais j'ai fait une boulette :
    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
    viewer.getMap().addLayer(
      'WMS-C',
      'Exemple WMS-C',
      '/tc/tilecache.cgi?',
      {
        layers: 'test_wmsc',
        format: 'image/png',
        transparent: true
      },
      {
        projection: new OpenLayers.Projection('EPSG:4326'),
        nativeResolutions: [1.40625, 0.703125,0.3515625,0.17578125,0.087890625,0.0439453125,0.02197265625,0.010986328125,0.0054931640625,0.00274658203125,0.001373291015625,0.0006866455078125,0.00034332275390625,0.000171661376953125,0.0000858306884765625,0.00004291534423828125,0.000021457672119140625,0.0000107288360595703125,0.00000536441802978515625,0.000002682209014892578125,0.0000013411045074462890625],
        maxExtent: new OpenLayers.Bounds(-180,-90,180,90),
        units: 'degrees',
        maxZoomLevel: 12,
        opacity: 0.7,
        extractAttributes: false,
        visibility: true
      }
    );

  10. #10
    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 Geoportal.Layer.WMSC
    Globalement, il me faut modifier cette méthode :

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
        /**
         * APIMethod: changeBaseLayer
         * Listener of the map's event 'changebaselayer'.
         *      Reproject its maxExtent according to the new
         *      base layer if it is not a base layer itself.
         *
         * Parameters:
         * evt - {Event} the 'changebaselayer' event.
         *
         * Context:
         * layer - {<OpenLayers.Layer>} the new baseLayer
         * baseLayer - {<OpenLayers.Layer>} the old baseLayer
         *
         * Returns:
         * {Boolean} true to keep on, false to stop propagating the event.
         */
        changeBaseLayer: function(evt) {
            if (OpenLayers.Layer.prototype.changeBaseLayer.apply(this,arguments)===false) {
                return false;
            }
            if (!this.isBaseLayer) {
                // Geoportal's layers
                if (this.GeoRM) {
                // for each layer if its projection is compatible with the
                // new baseLayer : proceed (displayInLayerSwitcher to true). Otherwise,
                // hide it (displayInLayerSwitcher to false and visibility to false).
                if (this.getCompatibleProjection(evt.layer)!=null) {
                    if (this.aggregate==undefined) {
                        this.displayInLayerSwitcher= true;
                    }
                    if (typeof(this.savedStates[evt.layer.id])=='object') {
                        if (this.savedStates[evt.layer.id].opacity!=undefined) {
                            this.opacity= undefined;//force update
                            this.setOpacity(this.savedStates[evt.layer.id].opacity);
                        }
                        this.setVisibility(this.savedStates[evt.layer.id].visibility);
                    } else {
                        //no need to update opacity ...
                        this.setVisibility(this.getVisibility() && this.calculateInRange());
                    }
                    return true;
                }
                //saved state:
                if (this.getCompatibleProjection(evt.baseLayer)!=null) {
                    if (!this.savedStates[evt.baseLayer.id]) {
                        this.savedStates[evt.baseLayer.id]= {};
                    }
                    this.savedStates[evt.baseLayer.id].visibility= this.getVisibility();
                    this.savedStates[evt.baseLayer.id].opacity= this.opacity;
                }
                if (this.aggregate==undefined) {
                    this.displayInLayerSwitcher= false;
                }
                this.setVisibility(false);
            }
            } else {// other providers
               //TODO: change resolutions acording with new projection
               //FIXME: where to get these new resolutions ?
               //FIXME: new width/height for tiles ?
            }
            return true;
        },
    Mais surtout celle-là :

    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
        /**
         * Method: getCompatibleProjection
         * Check whether the layer's projection is displayable with the given base layer.
         *
         * Params:
         * blayer - {<OpenLayers.Layer>} the baseLayer to compare with.
         *      if none, use current baseLayer from the map.
         *
         * Returns:
         * {<OpenLayers.Projection>} if compatible, undefined if not relevant, null otherwise.
         */
        getCompatibleProjection: function(blayer) {
            var lproj= OpenLayers.Layer.prototype.getCompatibleProjection.apply(this,arguments);
            if (lproj==null) {
                return lproj;//may be null or undefined
            }
            if (blayer==null) {
                blayer= this.map.baseLayer;
                if (blayer==null) { return undefined; }
            }
            var bproj= blayer.getNativeProjection();
            if (lproj.isCompatibleWith(bproj)) {
                // the layer's extent has to intersect the baselayer's extent (if it exists)
                var x= this.restrictedExtent || this.maxExtent;
                if (!x) {
                    return lproj;
                }
                if (this.map==null) {
                    x= x.clone().transform(lproj,bproj);
                }
                if (blayer.maxExtent.containsBounds(x,true,true) ||
                    x.containsBounds(blayer.maxExtent,true,true)) {
                    return lproj;
                }
            } else {
                // fetch eventual projections supported by WMS-C
                // FIXME: where ? into srs (Array of String) as for WMS/WFS ...
            }
            return null;
        },
    Le code actuel de cette classe suppose que pour chaque projection de chaque fournisseur, on a mis une couche WMS-C de même nom (seules projection, resolutions et éventuellement tileSize sont modifiés)...

    J'avais écrit que cela ne tombait pas sous le clavier

Discussions similaires

  1. Version 1.0beta5: couche wfs & Multi-fournisseurs
    Par shama dans le forum IGN API Géoportail
    Réponses: 4
    Dernier message: 04/12/2009, 13h58
  2. Version 1.0beta5-2009-11-22: couche wfs
    Par mga_geo dans le forum IGN API Géoportail
    Réponses: 3
    Dernier message: 24/11/2009, 15h28
  3. Version 1.0beta5-2009-11-14: couche wms
    Par mga_geo dans le forum IGN API Géoportail
    Réponses: 4
    Dernier message: 22/11/2009, 12h20
  4. Version 1.0beta5-2009-11-14: couche kml
    Par mga_geo dans le forum IGN API Géoportail
    Réponses: 2
    Dernier message: 22/11/2009, 12h19
  5. pre 1.0beta5: couche wfs
    Par mga_geo dans le forum IGN API Géoportail
    Réponses: 6
    Dernier message: 01/09/2009, 20h50

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