#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.
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