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 :

Récupération d'une image pour MapXTreme à partir de WMTS


Sujet :

IGN API Géoportail

  1. #1
    Membre à l'essai
    Profil pro
    cadre
    Inscrit en
    Février 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : cadre

    Informations forums :
    Inscription : Février 2005
    Messages : 16
    Points : 20
    Points
    20
    Par défaut Récupération d'une image pour MapXTreme à partir de WMTS
    Bonjour,

    Je cherche à afficher un carte dans mapxtreme à partir de tuiles provenant des services wmts (en passant par un serveur php).

    Je récupère bien l'ensemble des tuiles qui couvrent la zone à afficher avec lesquelles je constitue une image complète, mais quand j'essaye de découper et de redimensionner cette image pour avoir le résultat final, c'est la cata.
    Est-ce qu'il y a des formules de conversion à appliquer ?

    Pour mes tests, mapxtreme me demande l'emprise suivante (à priori en degrés) : 5.705125, 45.165066, 5.753764, 45.202228
    pour une image finale de taille 924, 706 (en pixels).

    Après conversion en coordonnées epsg:3857, j'obtiens une emprise qui est la suivante : 635091.60991197, 5647545.2902181, 640506.07862467, 5653414.5293224

    J'utilise un zoom de niveau 15, qui semble être le plus adapté pour cette résolution (au passage, comment calculer la résolution de manière fiable ?).
    Avec ce niveau de zoom, il me faut récupérer 5x6 tuiles pour couvrir toute la zone.
    Il s'agit des tuiles 16903 à 16907 pour les colonnes, et 11761 à 11766 pour les lignes.

    Première question : comment se fait-il qu'après conversion des coordonnées et récupération des tuiles, je me retrouve avec une image en 1340x1500, donc plus haute que large ? Logiquement je m'attends à avoir l'inverse.

    J'essaye ensuite de "découper" mon image tuilée (en 1340x1500) pour copier la partie voulue dans mon image de destination (celle en 924x706). Pour cela je fais de bêtes règles de 3 en fonction de l'emprise voulue et de l'emprise des tuiles, mais ça ne colle pas du tout. Le ratio de la découpe est très loin de 924/706.

    Deuxième question : mais pourquoi donc ?

    Si quelqu'un pouvait éclairer ma lanterne, ce serait volontiers car je suis un peu perdu...

    Merci d'avance !!!

  2. #2
    Membre chevronné Avatar de gcebelieu
    Homme Profil pro
    Ingénieur Géographe et Cartographe
    Inscrit en
    Novembre 2010
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Géographe et Cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1 106
    Points : 1 843
    Points
    1 843
    Par défaut
    Citation Envoyé par nepaim Voir le message
    Bonjour,
    Première question : comment se fait-il qu'après conversion des coordonnées et récupération des tuiles, je me retrouve avec une image en 1340x1500, donc plus haute que large ? Logiquement je m'attends à avoir l'inverse.
    la projection web mercator (EPSG:3857) "étire" les cartes en y et ce de plus en plus fortement lorsqu'on s'éloigne de l'équateur. Il est donc pas étonnant que votre emprise plus large que haute en coordonnées géographiques se retrouve plus haute que large une fois transformée en epsg:3857

  3. #3
    Membre chevronné Avatar de gcebelieu
    Homme Profil pro
    Ingénieur Géographe et Cartographe
    Inscrit en
    Novembre 2010
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Géographe et Cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1 106
    Points : 1 843
    Points
    1 843
    Par défaut
    Citation Envoyé par nepaim Voir le message
    J'utilise un zoom de niveau 15, qui semble être le plus adapté pour cette résolution (au passage, comment calculer la résolution de manière fiable ?).
    cette page vous donne les résolutions des tuiles en fonction du niveau de zoom.

  4. #4
    Membre à l'essai
    Profil pro
    cadre
    Inscrit en
    Février 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : cadre

    Informations forums :
    Inscription : Février 2005
    Messages : 16
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par gcebelieu Voir le message
    la projection web mercator (EPSG:3857) "étire" les cartes en y et ce de plus en plus fortement lorsqu'on s'éloigne de l'équateur. Il est donc pas étonnant que votre emprise plus large que haute en coordonnées géographiques se retrouve plus haute que large une fois transformée en epsg:3857
    J'avoue que j'ai du mal à comprendre :
    Si la projection en web mercator étire la carte, les tuiles que je récupère en WMTS restent bien proportionnées.
    Et comment je fais pour découper mon image constituée des tuiles pour obtenir une image correspondant à l'emprise de départ ?

    Au passage, quelle est l'emprise globale de la couche WMTS de Géoportail ? Quand on fait un GetCapabilities, il y a indiqué (-180, -90, 180, 90), mais j'ai vu dans une autre discussion que ces valeurs étaient fausses.

    Merci pour les réponses

  5. #5
    Membre à l'essai
    Profil pro
    cadre
    Inscrit en
    Février 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : cadre

    Informations forums :
    Inscription : Février 2005
    Messages : 16
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par gcebelieu Voir le message
    cette page vous donne les résolutions des tuiles en fonction du niveau de zoom.
    En fait ce qu'il me manque c'est comment calculer la résolution en fonction de l'emprise et de la taille de l'image pour ensuite en déduire le niveau de zoom

  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 nepaim Voir le message
    Si la projection en web mercator étire la carte, les tuiles que je récupère en WMTS restent bien proportionnées.
    Parce que c'est nous qui les avons calculé correctement

    Citation Envoyé par nepaim Voir le message
    Et comment je fais pour découper mon image constituée des tuiles pour obtenir une image correspondant à l'emprise de départ ?
    C'est un problème de reprojection d'images : de ce que je comprends l'espace cible est du géographique et l'espace source du web mercator. Connaissant l'emprise cible, on déduit l'emprise source ... Comme tu l'as fait. Pour le reste, il faut connaître la résolution cible

    Citation Envoyé par nepaim Voir le message
    Au passage, quelle est l'emprise globale de la couche WMTS de Géoportail ? Quand on fait un GetCapabilities, il y a indiqué (-180, -90, 180, 90), mais j'ai vu dans une autre discussion que ces valeurs étaient fausses.
    Les données source peuvent avoir une emprise mondiale, mais le monde selon le Web Mercator de GOOGLE a une emprise : -180,-82.5,180,82.5 au delà, les y sont à l'infini ...

  7. #7
    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 nepaim Voir le message
    En fait ce qu'il me manque c'est comment calculer la résolution en fonction de l'emprise et de la taille de l'image pour ensuite en déduire le niveau de zoom
    Tu peux t'inspirer d'OpenLayers :

    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
        getZoomForExtent: function(extent, closest) {
            var viewSize = this.map.getSize();
            var idealResolution = Math.max( extent.getWidth()  / viewSize.w,
                                            extent.getHeight() / viewSize.h );
    
            return this.getZoomForResolution(idealResolution, closest);
        },
    
        getZoomForResolution: function(resolution, closest) {
            var zoom, i, len;
            if(this.map.fractionalZoom) {
                var lowZoom = 0;
                var highZoom = this.resolutions.length - 1;
                var highRes = this.resolutions[lowZoom];
                var lowRes = this.resolutions[highZoom];
                var res;
                for(i=0, len=this.resolutions.length; i<len; ++i) {
                    res = this.resolutions[i];
                    if(res >= resolution) {
                        highRes = res;
                        lowZoom = i;
                    }
                    if(res <= resolution) {
                        lowRes = res;
                        highZoom = i;
                        break;
                    }
                }
                var dRes = highRes - lowRes;
                if(dRes > 0) {
                    zoom = lowZoom + ((highRes - resolution) / dRes);
                } else {
                    zoom = lowZoom;
                }
            } else {
                var diff;
                var minDiff = Number.POSITIVE_INFINITY;
                for(i=0, len=this.resolutions.length; i<len; i++) {
                    if (closest) {
                        diff = Math.abs(this.resolutions[i] - resolution);
                        if (diff > minDiff) {
                            break;
                        }
                        minDiff = diff;
                    } else {
                        if (this.resolutions[i] < resolution) {
                            break;
                        }
                    }
                }
                zoom = Math.max(0, i-1);
            }
            return zoom;
        },
    Les résolutions étant celles données par gcebelieu

  8. #8
    Membre à l'essai
    Profil pro
    cadre
    Inscrit en
    Février 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : cadre

    Informations forums :
    Inscription : Février 2005
    Messages : 16
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par dgrichard Voir le message
    C'est un problème de reprojection d'images : de ce que je comprends l'espace cible est du géographique et l'espace source du web mercator. Connaissant l'emprise cible, on déduit l'emprise source ... Comme tu l'as fait. Pour le reste, il faut connaître la résolution cible
    Ben la résolution cible je la connais, mais ça colle pas
    J'essaye de faire un simple découpage de l'image source, en considérant l'emprise source (soit l'emprise cible convertie en mercator) et l'emprise des dalles qui "couvrent" l'emprise source, le tout avec un redimensionnement par rapport à la résolution cible. Et au final, j'ai une image toute applatie
    Après, je me demande si les coordonnées que je récupère au départ sont bonnes.
    Si j'arrive à avoir du web mercator en cible, logiquement ça va me retourner des coordonnées comprises dans -180,-82.5,180,82.5. Mais à partir de ça, comment je fais la conversion pour récupérer les dalles correspondantes ?


    Merci pour le calcul du zoom, je vais voir ce que ça donne en utilisant ces formules.

  9. #9
    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 nepaim Voir le message
    Ben la résolution cible je la connais, mais ça colle pas
    C'est la résolution (si j'ai bien compris) en géographique, pas en web mercator ...

    Citation Envoyé par nepaim Voir le message
    J'essaye de faire un simple découpage de l'image source, en considérant l'emprise source (soit l'emprise cible convertie en mercator) et l'emprise des dalles qui "couvrent" l'emprise source, le tout avec un redimensionnement par rapport à la résolution cible. Et au final, j'ai une image toute applatie
    Tu as l'emprise en web mercator, la taille de l'image donc tu as la résolution source. Tu as l'emprise en géographique, la taille de l'image et le tableau précédent de donner la résolution cible. Par contre, comme on travaille en tuile, on a plus de tuiles que l'image finale n'en nécessite ...
    Autre artefact, la taille de l'image finale change avec la latitude

    Citation Envoyé par nepaim Voir le message
    Après, je me demande si les coordonnées que je récupère au départ sont bonnes.
    Si j'arrive à avoir du web mercator en cible, logiquement ça va me retourner des coordonnées comprises dans -180,-82.5,180,82.5. Mais à partir de ça, comment je fais la conversion pour récupérer les dalles correspondantes ?
    J'utiliserai, puisque tu as Mapserver, une source GDAL (client WMTS) en web mercator pour afficher une couche en géographique ...

  10. #10
    Membre à l'essai
    Profil pro
    cadre
    Inscrit en
    Février 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : cadre

    Informations forums :
    Inscription : Février 2005
    Messages : 16
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par dgrichard Voir le message
    Tu as l'emprise en web mercator, la taille de l'image donc tu as la résolution source. Tu as l'emprise en géographique, la taille de l'image et le tableau précédent de donner la résolution cible. Par contre, comme on travaille en tuile, on a plus de tuiles que l'image finale n'en nécessite ...
    Autre artefact, la taille de l'image finale change avec la latitude
    Pfiouuu, pas simple tout ça, surtout la dernière phrase...
    Dans ce que j'ai fait, l'emprise en web mercator est calculée à partir de l'emprise géographique. Du coup je ne vois pas trop à quoi sert le tableau, à part pour calculer l'échelle et déterminer la couche à utiliser pour la récupération des tuiles.
    En faisant comme ça j'obtiens une emprise du style
    636447.70394882, 5650549.7129101, 636770.41915263, 5650840.165223 et après je fais comme dans le descriptif technique pour récupérer les tuiles qui permettent de couvrir toute la zone.



    Citation Envoyé par dgrichard Voir le message
    J'utiliserai, puisque tu as Mapserver, une source GDAL (client WMTS) en web mercator pour afficher une couche en géographique ...
    Et non, je n'ai pas de MapServer. Juste un composant basé sur MapXtreme qui ne supporte pas nativement le WMTS, et mes petits doigts aidés de mes faibles connaissances en SIG
    Pour prendre un exemple concret, si j'arrive à obtenir dès le départ une emprise en web mercator (donc dans l'emprise globale -180,-82.5,180,82.5), comment je fais pour récupérer la tuile qui couvre le point (au hasard) -45, -37 ?

    Encore merci pour toutes les réponses !

  11. #11
    Membre chevronné Avatar de gcebelieu
    Homme Profil pro
    Ingénieur Géographe et Cartographe
    Inscrit en
    Novembre 2010
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Géographe et Cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1 106
    Points : 1 843
    Points
    1 843
    Par défaut
    Citation Envoyé par nepaim Voir le message
    Pour prendre un exemple concret, si j'arrive à obtenir dès le départ une emprise en web mercator (donc dans l'emprise globale -180,-82.5,180,82.5), comment je fais pour récupérer la tuile qui couvre le point (au hasard) -45, -37 ?
    ça, c'est expliqué dans cette page

Discussions similaires

  1. [MySQL] Récupération d'une image JPEG a partir d'une bdd MySQL
    Par YOSAIKAN dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 26/11/2008, 21h04
  2. [Delphi 6] Récupération d'une image stocké dans une table
    Par bchass dans le forum Bases de données
    Réponses: 4
    Dernier message: 20/12/2006, 14h48
  3. [FLASH 5]un bouton dans une image pour revenir sur une scene
    Par patato valdes dans le forum Flash
    Réponses: 7
    Dernier message: 28/04/2004, 20h21
  4. [C#] Récupération d'une image depuis une table SQL Server
    Par borgfabr dans le forum Accès aux données
    Réponses: 10
    Dernier message: 08/04/2004, 13h20
  5. generer une image bitmap a partir d'une scene OGL
    Par FreshLog dans le forum OpenGL
    Réponses: 4
    Dernier message: 01/07/2003, 11h29

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