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 :

Position de la souris en UTM


Sujet :

IGN API Géoportail

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 130
    Points : 1 765
    Points
    1 765
    Par défaut Position de la souris en UTM
    J'ai repris des exemples pour afficher sur un clic la position dans diverses coordonnées. Pour les données naturalistes, on utilise souvent des carrés de 10x10km en LIIe, UTM et Lambert93.
    Si l'affichage en UTM fonctionne bien, je n'arrive pas à le récupérer par script pour l'afficher dans un popup.
    Ma page de test: http://atlasnw.free.fr/geoportail/ex...beta5/bzh.html

    Le bout de code qui fait partiellement le travail:
    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
      trigger: function (e) {
    		var position = '';
        var lonlat= this.map.getLonLatFromViewPortPx(e.xy).transform(this.map.getProjection(), OpenLayers.Projection.CRS84);
        var point =  new OpenLayers.Geometry.Point(lonlat.lon,lonlat.lat);
        this.LIIe = new OpenLayers.Projection('IGNF:LAMBE');
        this.RGF93G = new OpenLayers.Projection('IGNF:RGF93G');
        this.LAMB93 = new OpenLayers.Projection('IGNF:LAMB93');
        var pt = point.clone();
        pt.transform(OpenLayers.Projection.CRS84, this.LIIe);
    		position += 'LIIe:'+ pt.x.toFixed(0) + ';' + pt.y.toFixed(0);
        pt = point.clone();
        pt.transform(OpenLayers.Projection.CRS84, this.RGF93G);
    		position +="\nRGF93:" + pt.x.toFixed(6) + ';' + pt.y.toFixed(6);
        pt = point.clone();
        pt.transform(OpenLayers.Projection.CRS84, this.LAMB93);
    		position += "\nLAMB93:"+ + pt.x.toFixed(0) + ';' + pt.y.toFixed(0);
        var zeros = "000";
    		var carreL93 = 'E';
    		carreL93 += String(zeros+ Math.floor(pt.x/10000)).slice(-3);
    		carreL93 += 'N';
    		carreL93 += String(zeros+ Math.floor(pt.y/10000)).slice(-3);    
    		position +="\ncarreL93:" + carreL93;
        alert( position );
      }

  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
    Peux-tu être plus explicite sur « je n'arrive pas à le récupérer par script pour l'afficher dans un popup » ?

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 130
    Points : 1 765
    Points
    1 765
    Par défaut Précisions
    A partir d'un point
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var point =  new OpenLayers.Geometry.Point(lonlat.lon,lonlat.lat);
    je voudrais pouvoir mettre dans le popup le même affichage que dans la barre d'état.
    Il y a donc quelque part dans le code de l'API ou d'OL ce qu'il faut!
    Typiquement la fonction lookupUTMZone doit faire une partie du travail mais je ne vois pas comment la mettre en oeuvre...

    Dans le cas "bzh", cette solution marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // pour l'UTM
      pt = point.clone();
    //  pt.transform(OpenLayers.Projection.CRS84,OpenLayers.Projection.MGRS_UTM);
      pt.transform(OpenLayers.Projection.CRS84, new OpenLayers.Projection("EPSG:32630"));
    
      position += "\nUTM:"+ + pt.x.toFixed(0) + ';' + pt.y.toFixed(0);

  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
    J'ai rajouté ceci dans l'API pour aider :

    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
    /**
     * APIMethod: getUTMZone
     * Return the UTM zone from a given latitude.
     *
     * Parameters:
     * lat - {Number} the latitude.
     *
     * Returns:
     * {String} the UTM zone from 1 to 60.
     */
    OpenLayers.Projection.getUTMZone= function(lat) {
        var s= ''+(Math.floor(lat/6)+31);
        return s;
    };
    Du coup, tu peux faire quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    pt= point.clone();
    var upCode= "EPSG:32"+(pt.lat<0? "7":"6")+OpenLayers.Projection.getUTMZone(pt.lat);
    var uprj= new OpenLayers.Projection(upCode);
    pt.transform(OpenLayers.Projection.CRS84,uprj);
    position += "\nUTM:"+ + pt.x.toFixed(0) + ';' + pt.y.toFixed(0);
    Sinon, voici la documentation de la méthode OpenLayers.Projection.getMGRSZone :

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    /**
     * APImethod: getMGRSZone
     * Return the UTM zone and latitude band for a given longitude, latitude as
     * explained in * http://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system :
     *      Latitude bands
     *
     *      Latitude bands are not a part of UTM, but rather a part of MGRS.
     *      They are however sometimes used.
     *
     *      Latitude bands
     *
     *      Each zone is segmented into 20 latitude bands. Each latitude band is 8
     *      degrees high, and is lettered starting from "C" at 80° S, increasing
     *      up the English alphabet until "X", omitting the letters "I" and "O"
     *      (because of their similarity to the numerals one and zero). The last
     *      latitude band, "X", is extended an extra 4 degrees, so it ends at 84°
     *      N latitude, thus covering the northernmost land on Earth. Latitude
     *      bands "A" and "B" do exist, as do bands "Y" and Z". They cover the
     *      western and eastern sides of the Antarctic and Arctic regions
     *      respectively. A convenient mnemonic to remember is that the letter "N"
     *      is the first letter in the northern hemisphere, so any letter coming
     *      before "N" in the alphabet is in the southern hemisphere, and any
     *      letter "N" or after is in the northern hemisphere.
     * *      Notation
     *
     *      The combination of a zone and a latitude band defines a grid zone. The
     *      zone is always written first, followed by the latitude band. For
     *      example (see image, top right), a position in Toronto, Canada, would
     *      find itself in zone 17 and latitude band "T", thus the full grid zone
     *      reference is "17T". The grid zones serve to delineate irregular UTM
     *      zone boundaries. They also are an integral part of the military grid
     *      reference system.
     *
     *      A note of caution: A method also is used that simply adds N or S
     *      following the zone number to indicate North or South hemisphere (the
     *      easting and northing coordinates along with the zone number supplying
     *      everything necessary to geolocate a position except which hemisphere).
     *      However, this method has caused some confusion since, for instance,
     *      "50S" can mean southern hemisphere but also grid zone "50S" in the
     *      northern hemisphere.
     *
     *      Exceptions
     *
     *      These grid zones are uniform over the globe, except in two areas. On
     *      the southwest coast of Norway, grid zone 32V is extended further west,
     *      and grid zone 31V is correspondingly shrunk to cover only open water.
     *      Also, in the region around Svalbard, the four grid zones 31X, 33X,
     *      35X, and 37X are extended to cover what would otherwise have been
     *      covered by the seven grid zones 31X to 37X. The three grid zones 32X,
     *      34X and 36X are not used.
     *
     *      See also:
     *      http://en.wikipedia.org/wiki/Military_grid_reference_system
     *
     *      Polar regions
     *
     *      In the polar regions, a different convention is used. South of
     *      80°S, UPS South (Universal Polar Stereographic) is used instead of a
     *      UTM projection. The west half-circle forms a grid zone with
     *      designation A; the east half-circle forms one with designation B; see
     *      figure 3. North of 84°N, UPS North is used, and the west half-circle
     *      is Y, the east one is Z; see figure 4. Since the letters A, B, Y, and
     *      Z are not used for any latitude bands of UTM, their presence in an
     *      MGRS coordinate, with the omission of a zone number, indicates that
     *      the coordinates are in the UPS system.
     *
     *      The lettering scheme for 100,000 m squares is slightly different in
     *      the polar regions. The row letters go from A to Z, omitting I and O.
     *      The column letters use a more restricted alphabet, going from A to Z
     *      but omitting I, O, D, E, M, N, V, W; the columns are arranged so that
     *      the rightmost column in grid zone A and Y has column letter Z, and the
     *      next column in grid zone B or Z starts over with column letter A. The
     *      restricted column alphabet for UPS ensures that no UPS square will be
     *      adjacent to a UTM square with the same identification.
     *
     *      In the polar regions, there is only one version of the lettering
     *      scheme.
     *
     *      See also:
     *      http://en.wikipedia.org/wiki/Universal_Polar_Stereographic_coordinate_system
     *      http://fr.wikipedia.org/wiki/Fichier:Utm-zones.jpg
     *
     * Parameters:
     * zone - {String} UTM zone
     * ll - {<OpenLayers.LonLat>} longitude, latitude
     *
     *
     * Returns:
     * {String}
     */

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 130
    Points : 1 765
    Points
    1 765
    Par défaut Ordre des couches
    Afin de disposer de l'affichage de la position même si la couche KML est affichée, il faut "descendre" cette couche dans le gestionnaire de couches.

    J'essaye avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    viewer.getMap().raiseLayer(kt,-1);
    mais la couche reste a sa place

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 130
    Points : 1 765
    Points
    1 765
    Par défaut Test avec setLayerIndex
    Une variante avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    viewer.getMap().setLayerIndex(kt,0);
    donne un affichage totalement perturbé des couches: le nom ne correspond plus à la couche!

  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 mga_geo Voir le message
    Afin de disposer de l'affichage de la position même si la couche KML est affichée, il faut "descendre" cette couche dans le gestionnaire de couches.

    J'essaye avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    viewer.getMap().raiseLayer(kt,-1);
    mais la couche reste a sa place
    De nouveau qu'entends-tu par « disposer de l'affichage de la position ... il faut "descendre" cette couche ...» ?

    Sur ton exemple, le clic affiche bien les coordonnées indépendamment de l'affichage de la grille ou me trompe-je ?

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 130
    Points : 1 765
    Points
    1 765
    Par défaut Ne jamais fournir de beta à ses utilisateurs
    J'ai contourné le problème en remplaçant les "<Polygon>" par des "<LineString>" dans le fichier kml. Je n'ai plus la possibilité d'avoir un Popup sur le clic à l'intérieur d'un carré mais mes utilisateurs préfèrent cela à modifier l'ordre des couches dans le panneau "Couches".

    J'avais présenté cette page mercredi soir et j'ai eu tout de suite cette demande.

    Donc mes excuses pour avoir modifier ma page de test...

    J'ai remis une version sur http://atlasnw.free.fr/geoportail/ex...a5/bzh_v1.html

Discussions similaires

  1. nom d'un controle et position de la souris
    Par manu80000 dans le forum Langage
    Réponses: 1
    Dernier message: 12/01/2006, 17h12
  2. [C#]Drag & Drop, problème de position de la souris
    Par debug dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/10/2005, 14h06
  3. Position de la souris
    Par abcd dans le forum Langage
    Réponses: 10
    Dernier message: 31/03/2005, 19h09
  4. Déterminer la position de la souris
    Par genteur slayer dans le forum Composants VCL
    Réponses: 6
    Dernier message: 16/06/2003, 12h01
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 21h07

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