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 :

Géoportail étendu et Internet Explorer


Sujet :

IGN API Géoportail

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 141
    Points : 156
    Points
    156
    Par défaut Géoportail étendu et Internet Explorer
    Bonjour,

    j'essaie de mettre au point un outil simple permettant de récupérer les coordonnées lat/long d'un point.

    La page peut être consultée à l'adresse http://www.betechsud.com/GP.php.

    Pour IE8 la page semble "fonctionner", mais il m'a fallu séparer le code dans 2 fonction (initGeoportalMap() et continueGeoportalMap()), sous peine de ne pouvoir ajouter la couche "Pointeur" de type OpenLayers.Layer.Vector.

    Par contre les tests avec IE6 ou IE7 ne sont toujours pas satisfaisants : la page peut s'afficher correctement ou alors provoquer un bouclage fatal à Internet Explorer. J'aimerais au moins être compatible avec IE7.

    Merci pour vos conseils,
    Julien.

  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
    Citation Envoyé par betechsud Voir le message
    Pour IE8 la page semble "fonctionner", mais il m'a fallu séparer le code dans 2 fonction (initGeoportalMap() et continueGeoportalMap()), sous peine de ne pouvoir ajouter la couche "Pointeur" de type OpenLayers.Layer.Vector.
    La question fondamentale est pourquoi la construction simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    markersLayer= new OpenLayers.Layer.Vector("Pointeur", {styleMap: layerStyleMap, geometryType: "OpenLayers.Geometry.Point"});
    est remplacée par la construction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     markersLayer = OpenLayers.Util.Try(function() {
             return(new OpenLayers.Layer.Vector(
             "Pointeur" ,
             {
                styleMap: layerStyleMap,
                geometryType: "OpenLayers.Geometry.Point"
             }));});
      ...
      
    setInterval(continueGeoportalMap, 1000);
    Grosso modo, l'échec d'un new en Javascript peut être imputé à un manque de mémoire (au pire) ... le fait de relancer toutes les secondes ne va pas arranger la chose ?!
    Donc: il faudrait rechercher pourquoi sous IE6/7 la création échoue ...

    Le mieux est de récupérer les sources complètes et de débogguer pas à pas sous IE7 ...

    Peut être aussi qu'un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    try {
     markersLayer = new OpenLayers.Layer.Vector(
             "Pointeur" ,
             {
                styleMap: layerStyleMap,
                geometryType: "OpenLayers.Geometry.Point"
             });
    } catch(e) {
      alert(e);
    }
    donnerait une piste ...

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 141
    Points : 156
    Points
    156
    Par défaut
    Merci de vous être penché sur mon code.

    J'avais effectivement commencé par la construction simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    markersLayer= new OpenLayers.Layer.Vector("Pointeur", {styleMap: layerStyleMap, geometryType: "OpenLayers.Geometry.Point"});
    mais je me suis aperçu que cela provoquait l'erreur :
    Détails de l’erreur de la page Web

    Agent utilisateur : Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; GTB0.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; InfoPath.2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; OfficeLiveConnector.1.4; OfficeLivePatch.1.3; AskTB5.4)
    Horodateur : Sat, 1 May 2010 13:17:56 UTC


    Message*: Erreur non spécifiée.
    Ligne*: 97
    Caractère*: 157492
    Code*: 0
    URI*: http://api.ign.fr/geoportail/api/js/...talExtended.js
    Et lorsque j'écris le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    try {
     markersLayer = new OpenLayers.Layer.Vector(
             "Pointeur" ,
             {
                styleMap: layerStyleMap,
                geometryType: "OpenLayers.Geometry.Point"
             });
    } catch(e) {
      alert(e);
    }
    le message est : "[object Error]" . Ce n'est que lorsque toutes les dalles ont fini d'être affichées - et les dernières sont celles de la couche "parcelles cadastrales" - que la couche "Pointeur" se crée.

    Pour le problème plus sévère d'IE6 et IE7 je vais encore creuser la question.

  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
    Citation Envoyé par betechsud Voir le message
    J'avais effectivement commencé par la construction simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    markersLayer= new OpenLayers.Layer.Vector("Pointeur", {styleMap: layerStyleMap, geometryType: "OpenLayers.Geometry.Point"});
    mais je me suis aperçu que cela provoquait l'erreur :
    Cela ressemble à une autre erreur de OpenLayers.Renderer rapportée sous IE : échec à la création d'une couche vecteur. La seule solution est d'être certain que la carte soit chargée AVANT la création de la couche ...

    Pourrais-tu essayer quelque chose comme (sous IE seulement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     markersLayer = new OpenLayers.Layer.Vector(
             "Pointeur" ,
             {
                styleMap: layerStyleMap,
                geometryType: "OpenLayers.Geometry.Point",
                renderer: new OpenLayers.Renderer['VML']
             });
    Citation Envoyé par betechsud Voir le message
    Et lorsque j'écris le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    try {
     markersLayer = new OpenLayers.Layer.Vector(
             "Pointeur" ,
             {
                styleMap: layerStyleMap,
                geometryType: "OpenLayers.Geometry.Point"
             });
    } catch(e) {
      alert(e);
    }
    le message est : "[object Error]"
    C'est dommage qu'IE n'en dise pas plus ...

    Citation Envoyé par betechsud Voir le message
    Pour le problème plus sévère d'IE6 et IE7 je vais encore creuser la question.
    Je pense que tout cela est lié. Il faudrait y aller pas à pas en désactivant Google API (Geocoder) et ainsi de suite, histoire de vérifier qu'il n'y a pas d'incompatibilité quelque part.

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 141
    Points : 156
    Points
    156
    Par défaut
    J'ai testé le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     markersLayer = new OpenLayers.Layer.Vector(
             "Pointeur" ,
             {
                styleMap: layerStyleMap,
                geometryType: "OpenLayers.Geometry.Point",
                renderer: new OpenLayers.Renderer['VML']
             });
    L'erreur se produit toujours, mais l'ajout de la couche "Pointeur" se produit plus tôt : il n'est plus nécessaire que toutes les couches Géoportail se soient affichées pour voir apparaitre le marker.

    Merci pour le coup de main : je verrai lundi si celà a aussi un impact sur IE6/IE7.

  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 betechsud Voir le message
    L'erreur se produit toujours, mais l'ajout de la couche "Pointeur" se produit plus tôt : il n'est plus nécessaire que toutes les couches Géoportail se soient affichées pour voir apparaitre le marker.
    Proposition:

    Au lieu de construire le marqueur, faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    intervalID = setInterval(continueGeoportalMap, 1000);
    et déplacer le code de construction (style, layer) dedans.
    En début de continueGeoportalMap(), on put éventuellement faire sous IE:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if (intervalID) {
        clearInterval(intervalID);
        intervalID= null;
    }
    var vml;
    try {
        vml= new OpenLayers.Renderer['VML'];
    } catch (e) {
       intervalID = setInterval(continueGeoportalMap, 1000);
    }
    ...
    L'essentiel sera de comprendre pourquoi une telle erreur se produit ...

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 141
    Points : 156
    Points
    156
    Par défaut
    Bonjour,

    j'ai testé une version simplifiée, sans marqueur, dont voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    viewer = null;
    function initGeoportalMap()
    {
       geoportalLoadviewer("map","normal","FXX","IGNF:GEOPORTALFXX",['IGNF:WGS84G','IGNF:RGF93G','IGNF:LAMB1','IGNF:LAMB2','IGNF:LAMB3','IGNF:LAMB4','IGNF:LAMBE','IGNF:LAMB93']);
       if (viewer)
       {
          viewer.getMap().updateSize();
          viewer.getMap().setCenterAtLonLat(4.33375, 43.80915, 14);
    
          // Ajout des calques du GéoPortail
          viewer.addGeoportalLayers(['ORTHOIMAGERY.ORTHOPHOTOS:WMSC','GEOGRAPHICALGRIDSYSTEMS.MAPS:WMSC','CADASTRALPARCELS.PARCELS:WMSC'], {visibility:true});
       }
    }
    A l'adresse http://www.betechsud.com/GP.html la version de l'API est 1.0-e.
    A l'adresse http://www.betechsud.com/GP2.html, c'est la 1.0beta4-e.

    L'instruction "viewer.getMap().updateSize();" est une tentative pour que la taille de la carte en 800x600 soit respectée.

    Résultat :
    IE6/GP.html : Bouclage systématique d'Internet Explorer.
    IE6/GP2.html : Dimensions erronées de la carte au chargement.

    IE7/GP.html : Dimensions erronées de la carte au chargement.
    IE7/GP2.html : Dimensions erronées de la carte au chargement.

    IE8/GP.html : OK.
    IE8/GP2.html : Dimensions erronées de la carte au chargement.

    En début de continueGeoportalMap(), on put éventuellement faire sous IE:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if (intervalID) {
        clearInterval(intervalID);
        intervalID= null;
    }
    var vml;
    try {
        vml= new OpenLayers.Renderer['VML'];
    } catch (e) {
       intervalID = setInterval(continueGeoportalMap, 1000);
    }
    ...
    Résultats non probants : l'objet vml n'est jamais créé.

  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 betechsud Voir le message
    j'ai testé une version simplifiée, sans marqueur, dont voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    viewer = null;
    function initGeoportalMap()
    {
       geoportalLoadviewer("map","normal","FXX","IGNF:GEOPORTALFXX",['IGNF:WGS84G','IGNF:RGF93G','IGNF:LAMB1','IGNF:LAMB2','IGNF:LAMB3','IGNF:LAMB4','IGNF:LAMBE','IGNF:LAMB93']);
       if (viewer)
       {
          viewer.getMap().updateSize();
          viewer.getMap().setCenterAtLonLat(4.33375, 43.80915, 14);
    
          // Ajout des calques du GéoPortail
          viewer.addGeoportalLayers(['ORTHOIMAGERY.ORTHOPHOTOS:WMSC','GEOGRAPHICALGRIDSYSTEMS.MAPS:WMSC','CADASTRALPARCELS.PARCELS:WMSC'], {visibility:true});
       }
    }
    A l'adresse http://www.betechsud.com/GP.html la version de l'API est 1.0-e.
    Ok, peux-tu essayer ceci :

    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
    viewer = null;
    function initGeoportalMap()
    {
       /*[1]*/
       if (typeof(OpenLayers)=='undefined' || 
           typeof(Geoportal)=='undefined' ||
           typeof(Geoportal.Viewer)=='undefined') {
         setTimeout('initGeoportalMap()', 250);
         return;
       }
       geoportalLoadviewer("map","normal","FXX","IGNF:GEOPORTALFXX",['IGNF:WGS84G','IGNF:RGF93G','IGNF:LAMB1','IGNF:LAMB2','IGNF:LAMB3','IGNF:LAMB4','IGNF:LAMBE','IGNF:LAMB93']);
       if (viewer)
       {
         /*[2]*/
           //viewer.getMap().updateSize(); /*1.0 ne sert à rien */
          setTimeout('viewer.setSize(800,600);', 250);
           // Ajout des calques du GéoPortail
          viewer.addGeoportalLayers(['ORTHOIMAGERY.ORTHOPHOTOS:WMSC','GEOGRAPHICALGRIDSYSTEMS.MAPS:WMSC','CADASTRALPARCELS.PARCELS:WMSC'], {visibility:true});
    
          /*[3]*/
          var vml;
          try {
             vml= new OpenLayers.Renderer['VML'];
          } catch (e) {
             alert('onload pas encore levé ?-(');
          }
    
          // dernière opération : se centrer :
            viewer.getMap().setCenterAtLonLat(4.33375, 43.80915, 14);
        }
    }
    J'ai simplifié mais il faudrait libérer les timer sous IE ...

    Citation Envoyé par betechsud Voir le message
    A l'adresse http://www.betechsud.com/GP2.html, c'est la 1.0beta4-e.

    L'instruction "viewer.getMap().updateSize();" est une tentative pour que la taille de la carte en 800x600 soit respectée.
    Comme la 1.0bêta4 sera fermée en septembre ...

    Citation Envoyé par betechsud Voir le message
    Résultat :
    IE6/GP.html : Bouclage systématique d'Internet Explorer.
    L'API ne se charge pas. Est-ce que [1] n'arrange pas les choses ?

    Citation Envoyé par betechsud Voir le message
    IE7/GP.html : Dimensions erronées de la carte au chargement.
    Le calcul de taille foire sur IE7. Es-ce que [2] n'arrange pas les choses ?

    Citation Envoyé par betechsud Voir le message
    IE8/GP.html : OK.


    Citation Envoyé par betechsud Voir le message
    Résultats non probants : l'objet vml n'est jamais créé.
    En essayant maintenant [3] ?

Discussions similaires

  1. Api étendue et Internet Explorer 8
    Par lhapaipai dans le forum IGN API Géoportail
    Réponses: 2
    Dernier message: 23/06/2010, 10h36
  2. Internet Explorer
    Par remid1985 dans le forum IE
    Réponses: 3
    Dernier message: 22/01/2004, 13h52
  3. Créer un plug-in pour Internet Explorer
    Par giaco dans le forum C++Builder
    Réponses: 4
    Dernier message: 25/06/2003, 18h12
  4. URL d'Internet Explorer
    Par dbourni dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 06/12/2002, 08h56
  5. internet explorer
    Par numeror dans le forum Web & réseau
    Réponses: 2
    Dernier message: 22/07/2002, 09h23

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