Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Tue 07 August 2012 16:30

drouchi
Participant occasionnel
Date d'inscription: 16 Jun 2010
Messages: 32

OpenLayer et Internet Explorer

Bonjour a tous!!

Voici plusieurs jours que je me tape le chignon par terre afin de resoudre cette immonde probleme sur IE9, j'espere vraiment que quelau'un pourra m'aider.

J'ai dc mis en place un server web afin de pouvoir avoir une carte en ligne --> PostgreSql, Mapnik, Tilecache et OpenLayer2.11. Jusque la tout va bien.
J'ai par la suite voulu afficher mes differents "Point Of Interest" pour qu'ils soient cliquable. J'ai dc creer des GML. Le probleme arrive dès maintenant: Toutes mes couches s'affiche parfaitement avec FireFox, Chrome, Safari, Opera......... mais probleme avec??? vous l'avez devinez: Internet Explorer. (Ne marche pas sur IE8 et 9). Mon fond de carte s'affiche mais seulement 2 couches GML s'affiche sur 6.

J'ai dc commencé à utiliser le Developer tool d'IE9. Sur les couches qui ne s'affichent pas, cet outil me trouve une erreur dans le OpenLayer.js.
SCRIPT5007: Unable to get value of the property 'getElementsByTagNameNS': object is null or undefined C'est a la ligne 674 character 78 : if(node.getElementsByTagNameNS)

Quelqu'un aurait'il une idée pour debugger Internet Explorer (ou OpenLayer) car malheureusement celui-ci est utilisé par plus de 60% des internauts.

Tout mes espoirs reposent sur vous!!

Cordialement


Drouchi

Hors ligne

 

#2 Wed 08 August 2012 18:06

VianneyD
Participant assidu
Date d'inscription: 30 May 2011
Messages: 153

Re: OpenLayer et Internet Explorer

Bonjour,

Juste une suggestion :
Ne faut il pas ajouter des parenthèses/paramètres à getElementsByTagNameNS(), pour qu'il l'interprète comme une méthode ?

Dernière modification par VianneyD (Wed 08 August 2012 18:11)


Vianney Dugrain

Hors ligne

 

#3 Wed 08 August 2012 19:57

michel56
Participant assidu
Lieu: Lorient
Date d'inscription: 14 Jul 2012
Messages: 474

Re: OpenLayer et Internet Explorer

Bonjour,

J'ai également eu des problèmes entre OL et ie.

Dans mon cas, le problème venait de l'ossature du fichier HTML
Test comme ça.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>

Dernière modification par michel56 (Wed 08 August 2012 20:04)


Opérateur cartographique & DAO & PHP.

Hors ligne

 

#4 Thu 09 August 2012 11:26

drouchi
Participant occasionnel
Date d'inscription: 16 Jun 2010
Messages: 32

Re: OpenLayer et Internet Explorer

Merci Michel56 mais ce n'est pas un problem d'ossature. J'avais deja vu ça sur certain forum.
Dans mon cas j'ai certaines couches qui s'affiche et pas d'autre alors que les données viennent de la meme table, j'ai juste un identifiant qui change.

VianneyD: merci pour la suggestion mais ce netais qu'un morceau de code donner par le developer tool d'IE9 tirer de OpenLayer.js, dc oui il y a des parametres.

Hors ligne

 

#5 Thu 09 August 2012 14:14

michel56
Participant assidu
Lieu: Lorient
Date d'inscription: 14 Jul 2012
Messages: 474

Re: OpenLayer et Internet Explorer

Tu as peut-être trop d'enregistrement dans certaines requêtes.


Opérateur cartographique & DAO & PHP.

Hors ligne

 

#6 Thu 09 August 2012 16:24

drouchi
Participant occasionnel
Date d'inscription: 16 Jun 2010
Messages: 32

Re: OpenLayer et Internet Explorer

C'est ce que je pensais mais en essayant de reduire le nombre d'enregistrement pour une requete j'ai tjrs le meme pb.

Hors ligne

 

#7 Thu 09 August 2012 17:43

michel56
Participant assidu
Lieu: Lorient
Date d'inscription: 14 Jul 2012
Messages: 474

Re: OpenLayer et Internet Explorer

sans voir les GMLet le code OpenLayers c'est pas facile.


Opérateur cartographique & DAO & PHP.

Hors ligne

 

#8 Thu 09 August 2012 18:07

drouchi
Participant occasionnel
Date d'inscription: 16 Jun 2010
Messages: 32

Re: OpenLayer et Internet Explorer

Je ne sais pas si cela pourra aider mais voici les pages demandé.
Voici mon script pour la creation du GML. J'utilise le meme pour 4 categories different, je change juste le "places.ptID"



<?php
    include('../../config.php');

    echo '<?xml version="1.0" encoding="ISO-8859-1"?>'."\n";
    echo '<wfs:FeatureCollection
        xmlns:ms="http://mapserver.gis.umn.edu/mapserver"
        xmlns:wfs="http://www.opengis.net/wfs"
        xmlns:gml="http://www.opengis.net/gml"
        xmlns:ogc="http://www.opengis.net/ogc"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd http://mapserver.gis.umn.edu/mapserver http://aneto.oco/cgi-bin/worldwfs?SERVI … HEMA"
    >'."\n";

    $reponse = mysql_query("SELECT MIN( pla_lon ) AS min_lon, MIN( pla_lat ) AS min_lat, MAX( pla_lon ) AS max_lon, MAX( pla_lat ) AS max_lat FROM places WHERE pla_lat <>0 AND pla_lon <>0");
    $donnees = mysql_fetch_array($reponse);
   
      echo '<gml:boundedBy>'."\n";
          echo '<gml:Box srsName="EPSG:4326">'."\n";
              echo '<gml:coordinates>'.$donnees['min_lon'].',
                                    '.$donnees['max_lat'].',
                                    '.$donnees['max_lon'].',
                                    '.$donnees['min_lat'].
                '</gml:coordinates>'."\n";
        echo '</gml:Box>'."\n";
      echo '</gml:boundedBy>'."\n";   
      
      
      
      $sql_stars  = 'SELECT ';
      $sql_stars .= 'places.plaID ,';
      $sql_stars .= 'places.pla_name, ';
      $sql_stars .= 'places.pla_lon, ';
      $sql_stars .= 'places.pla_lat, ';
      $sql_stars .= 'provinces.p_name ';
      $sql_stars .= 'FROM places ';
      $sql_stars .= 'INNER JOIN ';
      $sql_stars .= 'provinces ';
      $sql_stars .= 'ON ';
      $sql_stars .= 'places.pID = ';
      $sql_stars .= 'provinces.pID ';
      $sql_stars .= 'WHERE ';
      $sql_stars .= 'places.ptID = 5';
      $reponse = mysql_query($sql_stars, $connection) or die (mysql_error());

    $i=0;
    while ($donnees = mysql_fetch_array($reponse)) {
           $i++;
          
           $plaID = $donnees['plaID'];
           $pla_name = $donnees['pla_name'];
           $pla_lon = $donnees['pla_lon'];
           $pla_lat = $donnees['pla_lat'];
           $p_name = $donnees['p_name'];
           $ptID = $donnees['ptID'];
               
               echo '<gml:featureMember>'."\n";
                echo '<ms:point fid="' . $i . '">'."\n";
                    echo '<ms:msGeometry>'."\n";
                        echo '<gml:Point srsName="EPSG:4326">'."\n";
                            echo '<gml:coordinates>' . $pla_lon  . ',' . $pla_lat . '</gml:coordinates>'."\n";
                        echo '</gml:Point>'."\n";
                    echo '</ms:msGeometry>'."\n";
                        echo '<ms:ogc_fid>' . $i . '</ms:ogc_fid>'."\n";
                        echo '<ms:provincename>'  . $p_name . '</ms:provincename>'."\n";
                        echo '<ms:name>'  . addslashes(Htmlspecialchars($pla_name)) . '</ms:name>'."\n";
                        echo '<ms:id>' .  $plaID  . '</ms:id>'."\n";
                        echo '<ms:hID>'. $plaID.'</ms:hID>'."\n";
                echo '</ms:point>'."\n";
            echo '</gml:featureMember>'."\n";
       
    }
   
    echo '</wfs:FeatureCollection>'."\n";       
       
    mysql_close();
?>





et voici le OpenLayer:


<script type="text/javascript" charset="ISO-8859-1">
        var map;
        var petrol;
       
        //create a geographique projection object
        var Geo_pjt = new OpenLayers.Projection("EPSG:4326");
        //create mercator projection object
        var Mercator_pjt = new OpenLayers.Projection("EPSG:900913");
        //create the bounds to difine the max extent
        var extent = new OpenLayers.Bounds(<?php echo $LON_MIN . ',' . $LAT_MIN . ',' . $LON_MAX . ',' . $LAT_MAX; ?>);
        //transform extent in the mercator projection
        var PetrolSelect; //Feature Select Control to manage Hotels selection
        var MercatorExtent = extent.transform(Geo_pjt,Mercator_pjt);
        function init(){
           
            //map options
             var options = {
                projection: Mercator_pjt,
                displayProjection: Geo_pjt,
                restrictedExtent: MercatorExtent,
                units: "m",
                resolutions:[991.8212890625,495.91064453125,247.955322265625,123.9776611328125,61.98883056640625,30.99441528320313,15.49720764160156,7.748603820800781,3.874301910400391,1.937150955200195,0.9685754776000977,0.4842877388000488,0.2421438694000244,0.1210719347000122,0.0605359673500061,0.0302679836750031,0.0151339918375015,0.0075669959187508,0.0037834979593754,0.0018917489796877],
                maxExtent: new OpenLayers.Bounds(-9500000.00000000, 2200000.00000000,-8200000.00000000,2700000.00000000)
            };
            /*
            projection = Tile projection
            displayProjection = Coordinate display projection
            restrictedExtent = max extent of the map, use on glob click
            //*/
           
            //create the map object
            map = new OpenLayers.Map('map', options);

            // create OSM layer
          var osm = new OpenLayers.Layer.OSM("<?php echo $OSM_STREET_LAYER_NAME; ?>");
          var mymap = new OpenLayers.Layer.WMS( "Cubamapa",
                        "http://xxxxxxxx/xxxxxxx/tilecache.py?", 
                        {layers: 'cubamapa', format: 'image/png'});


            //create personal styles
            var myStyles = new OpenLayers.StyleMap({
                "default": new OpenLayers.Style({   
                    pointRadius: 4, // sized according to type attribute
                    cursor: "hand",
                    fillColor: "#eecc66",
                    strokeColor: "#ee9933",
                    strokeWidth: 3,
                    externalGraphic: "./img/icon_gas_station.gif",
                    graphicWidth:22,
                    graphicHeight:22,
                    graphicXOffset:-8,
                    graphicYOffset:-8   
                }),
                "select": new OpenLayers.Style({
                    fillColor: "#66ccff",
                    cursor: "hand",
                    strokeColor: "#3399ff",
                    externalGraphic: "./img/icon_gas_station.gif",
                    graphicWidth:22,
                    graphicHeight:22,
                    graphicXOffset:-8,
                    graphicYOffset:-8   
                })
            });
                       
            var categ = '<?php echo $cat; ?>';
           
            petrol = new OpenLayers.Layer.GML('<img src="./img/icon_gas_station.gif" /> Petrol Stations', "./xxxx/petrol.php",{projection: map.displayProjection,styleMap: myStyles});
           
            //create an array to with layers
            var layers = [mymap,osm,petrol];
                       
            //add layers to the map
            map.addLayers(layers);
           
            //create select tool for hotels
            PetrolSelect = new OpenLayers.Control.SelectFeature([petrol]);
           
            //define events
            petrol.events.on({
                "featureselected": onFeatureSelect,
                "featureunselected": onFeatureUnselect,
                "loadend":urlLink
            });

            //add control
            map.addControl(PetrolSelect);
            //activate it
            PetrolSelect.activate();   

            var switcherControl = new OpenLayers.Control.LayerSwitcher();            
            map.addControl(switcherControl);            
            switcherControl.maximizeControl();
            map.addControl(new OpenLayers.Control.MousePosition());

            //zoom to the max Extent
            if (!map.getCenter()) {map.zoomToMaxExtent()};
           
        }
       
        function onPopupClose(evt) {
            PetrolSelect.unselectAll();
        }
       
       
        function urlLink(event){
        <?php
            //if the is an hid in the url on loading page, select the hotel
            if(isset($_GET['hid']))
            {
                echo 'SelectHotelByHotelId('.$_GET['hid'].');';
            }
        ?>
        }
       
       
        function onFeatureSelect(event,overflow) {
            var feature = event.feature;
            var selectedFeature = feature;
            var popupMessage = "" ;
           
            popupMessage = "<div class=popup>";
            popupMessage = popupMessage + feature.attributes.provincename + '</div>';
            popupMessage = popupMessage + "<div class=popup2>" + feature.attributes.name + "</div>" ;
           
           
           
           
            var popup = new OpenLayers.Popup.FramedCloud("chicken",
                feature.geometry.getBounds().getCenterLonLat(),
                new OpenLayers.Size(300,200),
                popupMessage,
                null, true, onPopupClose
            );
            map.setCenter(feature.geometry.getBounds().getCenterLonLat(), map.getNumZoomLevels);
            feature.popup = popup;
            feature.data.overflow = (overflow)?"auto":"hidden";
            map.addPopup(popup);
            //move the map to get the hotel in the center

        }
       
        function onFeatureUnselect(event) {
            var feature = event.feature;
            if(feature.popup) {
                map.removePopup(feature.popup);
                feature.popup.destroy();
                delete feature.popup;
            }
        }
       
        function zoomToProvince(obj){
            //get the selected option
            var province = document.getElementById(obj.value);
            //get bounds
            var lon_min = province.getAttribute('lon_min');
            var lat_min = province.getAttribute('lat_min');
            var lon_max = province.getAttribute('lon_max');
            var lat_max = province.getAttribute('lat_max');
            //create the new extent
            var ext = new OpenLayers.Bounds(lon_min,lat_min,lon_max,lat_max);
            //zoom to the new extent after transform it.
            map.zoomToExtent(ext.transform(Geo_pjt,Mercator_pjt));   
        }
       
        function getFeatureByHid(featureHId) {
            var feature = null;
            var found = false;
            for(var i=0, len=petrol.features.length; i<len; ++i) {
                if(petrol.features[i].attributes.hID == featureHId) {
                    feature = petrol.features[i];
                    found = true;
                    break;
                }
            }

            return feature;
        }
       
        function SelectHotelByHotelId(hID)
        {
            var feature = getFeatureByHid(hID);
            if (feature)
            {
                PetrolSelect.unselectAll();
                PetrolSelect.select(feature);
            }
            return true;
        }   

        function zoomToHotel(obj){
            return SelectHotelByHotelId(obj.value);
        }
       
    </script>



J'ai donc ma couche ptID= 3 qui marche mais pas les autre.

Hors ligne

 

#9 Fri 10 August 2012 10:27

michel56
Participant assidu
Lieu: Lorient
Date d'inscription: 14 Jul 2012
Messages: 474

Re: OpenLayer et Internet Explorer

Je comprends pas ton script PHP

J'ai jamais utilisé Mapnik, Tilecache.

Pour générer mes fichiers pour Openlayers,  j'utilise la fonction postgis ST_AsGeoJSON()


Opérateur cartographique & DAO & PHP.

Hors ligne

 

#10 Mon 13 August 2012 17:25

drouchi
Participant occasionnel
Date d'inscription: 16 Jun 2010
Messages: 32

Re: OpenLayer et Internet Explorer

Bon du coup je crois que je viens de trouver le probleme, de mon probleme. smile

Il me semble qu'il s'agisse d'un problem d'encodage ou de charset. En effet, j'ai des noms avec des accents dans mes couches. Les couches dont les noms ne contiennent aucun accent s'affichent mais pas les autres. J'ai fais le test de rajouter un accent dans un nom d'une couche qui fonctionne et la comme par magie elle ne fonctionne plus.

Je pense donc que ce sujet n'ai plus a la bonne place dans ce forum car il me semble qu'il s'agisse d'un probleme d'encodage entre mes pages de script, ma base de donnees et internet explorer.

Merci Michel56 pour l'aide que tu as essayé de m'apporter.

Hors ligne

 

#11 Mon 13 August 2012 19:40

michel56
Participant assidu
Lieu: Lorient
Date d'inscription: 14 Jul 2012
Messages: 474

Re: OpenLayer et Internet Explorer

C'est tout bête.

Perso je ne mets plus de caractères avec accent ou espace dans les noms de champs, répertoires etc...

Mais bon c'est comme ça que l'on apprend.

Dernière modification par michel56 (Mon 13 August 2012 19:41)


Opérateur cartographique & DAO & PHP.

Hors ligne

 

Pied de page des forums

Powered by FluxBB