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 :

Conversions en UTM


Sujet :

IGN API Géoportail

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 35
    Points : 29
    Points
    29
    Par défaut Conversions en UTM
    Bonjour,

    On m'a demandé si il était possible d'afficher sous la carte les coordonnées en UTM. Les utilisateurs sont habitués à utiliser ce format notamment dans CartoExploreur et voudraient retrouver cette fonctionnalité.

    De mon coté j'ai fait quelques recherches mais j'avoue être un peu perdu en ce qui concerne les histoires de projection. J'ai compris que la France était divisée en plusieurs "zones" (30T,30U,...) et je crois avoir compris qu'il existe des projections spécifiques pour chaque "zone" (après avoir regardé le contenu de Proj4js.defs).
    Sans trop réfléchir j'ai codé rapidement une boucle qui fait les transformations dans toutes les projections disponibles et affiche les résultats, pour essayer de trouver la projection qui corresponds à ce que j'attends. Sans résultat aucun...

    J'ai du passer à coté de quelque chose, est-ce que l'un de vous peut m'expliquer comment réaliser la transformation nécessaire ? Mon but final serait de rajouter l'UTM dans le contrôle Geoportal.Control.Information.

    (Excusez moi pour les erreurs ou approximations en ce qui concerne les systèmes de projection, c'est quelque chose que je découvre).

  2. #2
    Membre averti Avatar de Zébulon-21
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Points : 315
    Points
    315
    Par défaut
    Pour la méthode "artisanale", au coup par coup, il y a évidemment CARTO, mais apparemment tu le savais déjà.

    Sinon, il y a une solution (payante) ici.

  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 Ajout des UTMs
    J'ai pas les éléments sous la main (j'suis pas boulot), mais grosso modo les étapes sont les suivantes (si on est pas en API étendue sinon les étapes 1, 2 ne sont pas nécessaires) :


    1. Récupèrer le registre IGNF sur PROJ4;
    2. Extraire les zones UTM sur la France (30, 31, 32). Attention, il y a les anciennes (sur NTF) et les nouvelles (sur RGF93);
    3. A la création de la carte 'geoportalLoad<INSTANCE>(), passer les identifiants des projections à la propriété 'displayProjection' ... Le tour est joué !

    Pour plus d'info, il faut jeter un oeil au code source dans le répertoire proj4js.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Merci pour cette réponse.
    J'étais donc sur la bonne piste mais le problème c'est surtout que je ne sais pas quelles sont les bonnes projections à utiliser. D'après ce document il me semble que les bonnes seraient UTM30W84 (EPSG:32630), UTM31W84 (EPSG:32631), UTM32W84 (EPSG:32632), qui ne sont pas incluses dans l'API.

    Quand je teste le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    geoportalLoadmap("GeoportalMapDiv", "normal", "FXX",false,["EPSG:32630","EPSG:32631","EPSG:32632"]);
    je peux voir que Proj4js essaye d'aller récuperer les fichiers correspondants sur mon serveur dans /defs, qui évidemment n'éxistent pas.

    J'ai récupéré les définitions correspondantes sur http://spatial-reference.org/ref/epsg/32630/ et placé les fichiers au bon endroit. Cette fois Proj4js les trouve mais ensuite c'est l'API entiere qui plante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: http://api.ign.fr/geoportail/api/js/1.0beta4/GeoportalExtended.js :: anonymous :: line 10854" data: no]
    J'ai résolu ça en rajoutant tout simplement les définitions juste avant l'appel à 'geoportalLoad<INSTANCE>()'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Proj4js.defs["EPSG:32630"] = "+title=UTM - 30 +proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +no_defs";
    Proj4js.defs["EPSG:32631"] = "+title=UTM - 31 +proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m +no_defs";
    Proj4js.defs["EPSG:32632"] = "+title=UTM - 32 +proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs";
    
    geoportalLoadmap("GeoportalMapDiv", "normal", "FXX",false,["IGNF:RGF93G","IGNF:GEOPORTALFXX","EPSG:32630","EPSG:32631","EPSG:32632"]);
    Maintenant je vais essayer de surcharger Geoportal.Control.Information pour n'avoir qu'un seul choix "UTM" et que le controle choisisse tout seul la bonne zone, j'ai vu sur spatial-reference que les zones représentaient 6°, avec la 30 allant de -6° à 0° et ainsi de suite.

  5. #5
    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 onfail() échoué ?
    Citation Envoyé par gfilliere Voir le message
    Quand je teste le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    geoportalLoadmap("GeoportalMapDiv", "normal", "FXX",false,["EPSG:32630","EPSG:32631","EPSG:32632"]);
    je peux voir que Proj4js essaye d'aller récuperer les fichiers correspondants sur mon serveur dans /defs, qui évidemment n'éxistent pas.
    Etonnant, si le chargement échoue via /defs, PROJ4JS est sensé tenter d'accéder (dans ce cas) à http://spatial-reference.org/ref/epsg/32630/proj4js/ qui retourne alors la chaîne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Proj4js.defs["EPSG:32630"] = "+proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +no_defs";
    Il semble donc que l'appel en cas d'échec de l'accès à /defs échoue ??
    Sous quel butineur es-tu ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    L'erreur apparait avec Firefox 3.5.1.
    C'est bien pendant l'appel http://spatial-reference.org que ça plante, plus particulierement sur le request.transport.send(null); (ligne 88 de OverloadedProj4js.js)

    Détail de l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: http://api.ign.fr/geoportail/api/js/1.0beta4/GeoportalExtended.js :: anonymous :: line 10854" data: no]
    J'ai testé sous Chrome ensuite (je n'ai plus de FF3 installé sur mon pc, j'essayerais d'en remettre un) et ça marche, il va bien chercher les defs sur spatial-reference. Par contre il n'y a pas de titre dans les defs basées là bas donc "null" s'affiche dans le contrôle de projection. Je vais rester donc avec ma solution de rajouter les defs à la main, dans tous les cas ça fait des requêtes en moins.

  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 PROJ4JS/spatial-reference.org
    Citation Envoyé par gfilliere Voir le message
    L'erreur apparait avec Firefox 3.5.1.
    C'est bien pendant l'appel http://spatial-reference.org que ça plante, plus particulierement sur le request.transport.send(null); (ligne 88 de OverloadedProj4js.js)
    C'est une piste, je vais effectuer des tests avec FF2.0/FF3.0 pour voir ...

    Citation Envoyé par gfilliere Voir le message
    Par contre il n'y a pas de titre dans les defs basées là bas donc "null" s'affiche dans le contrôle de projection. Je vais rester donc avec ma solution de rajouter les defs à la main, dans tous les cas ça fait des requêtes en moins.

    Je vais regarder cette portion du code, pour mettre dans ce cas, l'identifiant de la projection (i.e. EPSGxxxx).

    Merci pour les informations.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par dgrichard Voir le message
    Je vais regarder cette portion du code, pour mettre dans ce cas, l'identifiant de la projection (i.e. EPSGxxxx).
    Il suffit de remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    im= (p.proj.title !== null) ? p.proj.title : p.projCode;
    à la ligne 216 de Geoportal/Control/Projections.js et le tour est joué.

    Pour mes conversions UTM ça marche bien, j'arrive à charger automatiquement la zone correspondante qui convient (je charge les defs de l'ensemble des zones, "au cas où"). Je verrais pour diffuser le code si ça peut intéresser des gens plus tard.

    Ce que j'aimerais bien faire maintenant c'est afficher en plus des coordonnées le secteur UTM dans lequel on se situe (ex : 31T). Là il va falloir que je retouche le contrôle MousePosition, j'ai commencé à regarder rapidement et il me semble que ça va se jouer avec le format "PSS" mais je n'ai pas encore été plus loin.

  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
    Merci pour le code, je vais l'intégrer !

    Je serais intéressé par ta surcharge.

    C'est bien autour de setPSS() qui faut regarder.

  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 Correction surcharge PROJ4JS
    Citation Envoyé par gfilliere Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: http://api.ign.fr/geoportail/api/js/1.0beta4/GeoportalExtended.js :: anonymous :: line 10854" data: no]
    Apparamment, l'erreur est aussi liée à l'absence de proxy pour les requêtes Ajax. J'ai ajouté cela dans l'API et le test fonctionne sous FF2, alors qu'il ne fonctionnait pas avant!
    J'ai aussi mis à jour la documentation par rapport à cette thread (support de systèmes non présents dans l'API).

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par dgrichard Voir le message
    Je serais intéressé par ta surcharge.
    Je te ferais passer ça quand j'estimerais que c'est bon. Pour l'instant ça "marche" presque partout, ce qu'il me manque c'est la gestion des pôles Nord et Sud (j'ai découvert cet après-midi qu'il y avait des zones spéciales pour les pôles, voir sur cette image, mais je n'ai pas encore trouvé les codes EPSG correspondants aux zones A,B,Y et Z), et le fait que la bande X fasse 12 degrés au lieu des 8 standards. Ce n'est pas très important pour moi étant donné que mon app ne couvre (pour l'instant) que l'Ariège, mais bon...

    Là j'ai un problème avec le contrôle MousePosition, j'ai rajouté un PSS utm avec les valeurs suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    utm :{
        abscissa: '',
        ordinate: '',
        prefix: '<form id="__lamp__${id}" name="__lamp__${id}" action="javascript:void(null)"><b>Zone :</b> <input id="__zone__${id}" class="gpLong" type="text" value="${utmzone}" size="16"<b>@abscissa@ :</b> <input id="__lon__${id}" class="gpLong" type="text" value="${lon}" size="16"/>',
        separator: '&nbsp;&nbsp;<b>@ordinate@ :</b> <input id="__lat__${id}" class="gpLat" type="text" value="${lat}" size="16"/>',
        suffix: '</form>',
        defaultUnit: 1
    }
    et créé une méthode displayUTM() qui est basiquement une copie de displayEN() avec le calcul de la zone en plus. Le problème (surement un petit détail que j'ai raté) mais sur lequel j'ai passé un petit moment cet après-midi viens d'OpenLayers.String.Format, plus particuliere de cette portion de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var s= this.prefix + this.separator + this.getSuffix();
    var zone = "test";
    s= OpenLayers.String.format(
         s,
         {     'utmzone':zone,
                'lon':lon.replace(/ /g,"&nbsp;"),
                'lat':lat.replace(/ /g,"&nbsp;")
         });
    return s;
    Si on se réfère au PSS décrit plus haut l'input "__zone"__${id}" devrait avoir pour valeur "test". Et bien non, j'ai un magnifique "undefined" à la place (en tappant ce message j'ai vu qu'il y avait un autre appel à OpenLayers.String.format dans le initialize, je regarderais ça demain).

  12. #12
    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 Surcharge de Geoportal.Control.MousePosition
    Citation Envoyé par gfilliere Voir le message
    Je te ferais passer ça quand j'estimerais que c'est bon. Pour l'instant ça "marche" presque partout, ce qu'il me manque c'est la gestion des pôles Nord et Sud (j'ai découvert cet après-midi qu'il y avait des zones spéciales pour les pôles, voir sur cette image, mais je n'ai pas encore trouvé les codes EPSG correspondants aux zones A,B,Y et Z), et le fait que la bande X fasse 12 degrés au lieu des 8 standards. Ce n'est pas très important pour moi étant donné que mon app ne couvre (pour l'instant) que l'Ariège, mais bon...
    Ce sont en fait du "UNIVERSAL POLAR STEREOGRAPHIC", voir les codes EPSG semblent être 32661 pour le pôle nord et 32761 pour le pôle sud.

    Citation Envoyé par gfilliere Voir le message
    Si on se réfère au PSS décrit plus haut l'input "__zone"__${id}" devrait avoir pour valeur "test". Et bien non, j'ai un magnifique "undefined" à la place (en tappant ce message j'ai vu qu'il y avait un autre appel à OpenLayers.String.format dans le initialize, je regarderais ça demain).
    C'est lors du new Geoportal.Control.MousePosition() que le PSS est initialisé ... Il faut donc que ta surcharge surcharge l'objet Geoportal.Control.MousePosition.PSS via un appel à OpenLayers.Util.extend() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    OpenLayers.Util.extend(Geoportal.Control.MousePosition.PSS,utm);
    'utm' étant ton objet avec les propriétés abscissa, ordinate, prefix, separator, suffix, defaultUnit.

    Puis, tu étends Geoportal.Control.MousePosition (en fait ma première réponse était trop simpliste) :

    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
    Geoportal.Control.MousePositionWithUTM= OpenLayers.Class( Geoportal.Control.MousePosition, {
    
        /** surcharge de formatOutput() : gestion du cas 'utm' */
    
        /** surcharge de setPssKey() : gestion du cas 'utm' */
    
        /** ajout de displayUTM() */
    
        /**
         * Constant: CLASS_NAME
         * {String} *"Geoportal.Control.MousePositionWithUTM"*
         */
        CLASS_NAME: "Geoportal.Control.MousePositionWithUTM"
    });
    Une fois que tu obtiendras une classe stabilisée, on pourra regarder comment rendre le mécanisme plus simple (par exemple, par l'ajout dans le constructeur d'un paramètre [{'type' : callback}] ) !

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par dgrichard Voir le message
    Ce sont en fait du "UNIVERSAL POLAR STEREOGRAPHIC", voir les codes EPSG semblent être 32661 pour le pôle nord et 32761 pour le pôle sud.
    Merci, je vais regarder pour les prendre en compte.

    Citation Envoyé par dgrichard Voir le message
    C'est lors du new Geoportal.Control.MousePosition() que le PSS est initialisé ... Il faut donc que ta surcharge surcharge l'objet Geoportal.Control.MousePosition.PSS via un appel à OpenLayers.Util.extend()
    J'avais déjà fait une surcharge de Geoportal.Control.MousePosition.PSS qui fonctionnait, le problème venait bien de l'appel à OpenLayers.String.format(template, tokens,args) dans le constructeur, qui ne marche pas comme je m'y attendais : il me semblerait beaucoup plus logique que la methode cherche les tokens que l'on donne en param dans template et qu'elle effectue les remplacements si elle les trouve, mais c'est l'inverse qui se fait et elle remplace tous les "${xxx}" de template par le token équivalent, ou par "undefined" si elle ne le trouve pas. Je ne comprends pas pourquoi ce fonctonnement à été choisi.
    Typiquement dans le constructeur de Geoportal.Control.MousePosition on demande à remplacer '${lat}' par '${lat}' et '${lon}' par '${lon}'... J'ai simplement rajouté un token '${utmzone}' dans les paramètres du format pour que ça marche. Du coup même pour les PSS 'longlat' et 'proj' le token '${utmzone}' est envoyé, alors qu'il n'a aucun sens dans ce contexte... C'est pas grave, ça marche maintenant, mais ça ne me plait pas... (je sais pas si j'ai été très clair).

    Citation Envoyé par dgrichard Voir le message
    Puis, tu étends Geoportal.Control.MousePosition (en fait ma première réponse était trop simpliste)
    C'est la dessus que je vais travailler bientôt, pour l'instant j'ai fait ça à la va-vite et c'est assez moche, je redéfinit tout simplement Geoportal.Control.MousePosition avant l'appel à geoportalLoad<Instance>, n'ayant pas cherché trop loin encore comment faire ça proprement. La création de la classe MousePositionWithUTM comme tu l'as montré n'est pas compliquée, le problème étant surtout de faire en sorte que ce soit cette classe qui soit appelée dans Geoportal.Control.Information. Plutôt qu'une réécriture complete de la classe comme je le fait, peut-être qu'une ré-écriture partielle et un simple appel à OpenLayers.Util.extend( Geoportal.Control.MousePosition, MaClasseAvecLesChangements) pourrait suffire ?

  14. #14
    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 gfilliere Voir le message
    J'avais déjà fait une surcharge de Geoportal.Control.MousePosition.PSS qui fonctionnait, le problème venait bien de l'appel à OpenLayers.String.format(template, tokens,args) dans le constructeur, qui ne marche pas comme je m'y attendais : il me semblerait beaucoup plus logique que la methode cherche les tokens que l'on donne en param dans template et qu'elle effectue les remplacements si elle les trouve, mais c'est l'inverse qui se fait et elle remplace tous les "${xxx}" de template par le token équivalent, ou par "undefined" si elle ne le trouve pas. Je ne comprends pas pourquoi ce fonctonnement à été choisi.
    Typiquement dans le constructeur de Geoportal.Control.MousePosition on demande à remplacer '${lat}' par '${lat}' et '${lon}' par '${lon}'... J'ai simplement rajouté un token '${utmzone}' dans les paramètres du format pour que ça marche. Du coup même pour les PSS 'longlat' et 'proj' le token '${utmzone}' est envoyé, alors qu'il n'a aucun sens dans ce contexte... C'est pas grave, ça marche maintenant, mais ça ne me plait pas... (je sais pas si j'ai été très clair).
    Si, si !
    Le fait est que l'appel à OpenLayers.String.format() remplace toutes les occurences de ${xxx} en cherchant si xxx existe ! Du coup, pour lon, lat, je remplace par eux-même pour que les méthodes displayYYY() fassent elles le vrai remplacement de ${xxx} par la valeur de la position de la souris ...

    Citation Envoyé par gfilliere Voir le message
    C'est la dessus que je vais travailler bientôt, pour l'instant j'ai fait ça à la va-vite et c'est assez moche, je redéfinit tout simplement Geoportal.Control.MousePosition avant l'appel à geoportalLoad<Instance>, n'ayant pas cherché trop loin encore comment faire ça proprement. La création de la classe MousePositionWithUTM comme tu l'as montré n'est pas compliquée, le problème étant surtout de faire en sorte que ce soit cette classe qui soit appelée dans Geoportal.Control.Information. Plutôt qu'une réécriture complete de la classe comme je le fait, peut-être qu'une ré-écriture partielle et un simple appel à OpenLayers.Util.extend( Geoportal.Control.MousePosition, MaClasseAvecLesChangements) pourrait suffire ?
    Effectivement, ta démarche est meilleure en gardant le viewer par défaut. Je me placais dans l'idée que tu n'utilisais pas la classe Geoportal.Viewer.Default, mais une instance dans laquelle tu placais tes propres composants (du coup tu pouvais te passer du passage par geoportalLoad<Instance>).

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Le viewer par défaut me convient très bien en règle générale, je n'avais jusqu'à maintenant pas de raisons de le changer.

    J'ai une question de plus pour toi, lié aussi au Geoportal.Control.MousePosition. J'ai remarqué qu'en passant à un certain niveau de zoom (4, soit juste au dessus du "Pays", correspondant aux photos marquées NASA) le displayProjection passe automatiquement au "IGNF:RGF93G" sans changer la valeur du select, quelle que soit la projection sélectionnée avant.
    J'ai testé sur une page sans aucune modification de ma part, sélection de "Geoportail - France métropolitaine" comme displayProjection puis appel de setCenterAtLonLat(1.845817813, 42.719518084,4); : le select reste sur "Geoportail - France métropolitaine" mais l'affichage se fait en longitude / latitude en degrés décimaux.

    Bug ?

  16. #16
    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 gfilliere Voir le message
    J'ai une question de plus pour toi, lié aussi au Geoportal.Control.MousePosition. J'ai remarqué qu'en passant à un certain niveau de zoom (4, soit juste au dessus du "Pays", correspondant aux photos marquées NASA) le displayProjection passe automatiquement au "IGNF:RGF93G" sans changer la valeur du select, quelle que soit la projection sélectionnée avant.
    J'ai testé sur une page sans aucune modification de ma part, sélection de "Geoportail - France métropolitaine" comme displayProjection puis appel de setCenterAtLonLat(1.845817813, 42.719518084,4); : le select reste sur "Geoportail - France métropolitaine" mais l'affichage se fait en longitude / latitude en degrés décimaux.

    Bug ?
    Feature

    Je vais regarder, mais peux-tu m'indiquer quelle est la valeur que tu passes à geoportalLoad<Instance>() à la création de la carte ?

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function initGeoportalMap() {
    	geoportalLoadmap("GeoportalMapDiv", "normal", "FXX");
    	map.addGeoportalLayers();
    }
    J'aurais du mal à faire plus simple

  18. #18
    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 Bug corrigé
    Un copier/couiller malencontreux dans Geoportal.Control.Projections :

    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
        /**
         * Method: changeDisplayProjections
         * Redraw the control after the base layer changed in case of the display
         * projections have changed.
         *
         * Parameters:
         * evt - {Event} event fired
         *     evt.displayProjection holds the new projection
         */
        changeDisplayProjections: function(evt) {
            if (!evt) return;
            if (this.map && this.map.baseLayer && this.map.baseLayer.allowedDisplayProjections) {
                this.displayProjections= this.map.baseLayer.allowedDisplayProjections.slice(0);
                this.redraw();
            }
        },
    C'est donc corrigé sur la plate-forme de développement !

    Merci pour le retour

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    "Petit" changement de plan ici. Après avoir passé près d'une semaine à faire ces conversions à la demande d'un groupe d'utilisateur, il m'a été demandé hier aprem de désactiver complètement l'affichage des coordonnées et de l'échelle, bref du Geoportal.Control.Information, parce que "ça prends de la place sur la page et c'est pas si utile que ça". Meh. Des fois faut pas chercher à comprendre.

    Je vais quand même mettre au propre les sources histoire de les partager mais je ne rajouterais pas la gestion des pôles étant donné que c'est n'est plus une priorité pour mon projet.

    Merci de ton aide dgrichard, j'attendrais de diffuser les sources pour passer le sujet en "Résolu".

  20. #20
    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
    Dommage de ce changement de cap , mais l'utilisateur est roi

    Quant les sources seront publiées, on pourra les intégrer dans la classe Geoportal.Control.MousePosition en y mettant leur paternité (et l'ajout des pôles) !

Discussions similaires

  1. OPENLAYER Conversion vers UTM
    Par doudou_rennes dans le forum SIG : Système d'information Géographique
    Réponses: 1
    Dernier message: 10/06/2011, 13h14
  2. Programme Delphi de conversion de coordonnées GPS/UTM
    Par furious-kiki dans le forum Delphi
    Réponses: 4
    Dernier message: 10/01/2007, 11h19
  3. Conversion Latitude,Longitude en UTM pour débutant.
    Par Messie dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/04/2006, 18h37
  4. Conversion Lat/Long vers UTM
    Par efficks dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 12/12/2005, 17h13
  5. Réponses: 2
    Dernier message: 05/06/2002, 12h29

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