#1 Sat 17 May 2008 21:28
- mga_sig
- Participant occasionnel
- Date d'inscription: 17 May 2008
- Messages: 12
[OpenLayers]: échelle des latitudes
Pour vérifier le bon fonctionnement de mes scripts, j'affiche une page ( http://atlasnw.free.fr/googlemaps/ol.ht … n_1216.kml )
avec une couche Google Satellite puis j'ajoute une couche kml ( fichier http://atlasnw.free.fr/gml/ign_1216.kml ).
Ce fichier contient les points "rgf" de la carte orange 1216 de l'IGN.
Je constate que l'échelle des latitudes est compressée:
- les marqueurs du nord de la carte se retrouvent moins nord,
- idem pour ceux du sud.
Et ce, même en changeant de zoom.
Par contre, le popup est bien positionné !
La partie du code concerné:
Code:
map = new OpenLayers.Map('map', { controls: [ new OpenLayers.Control.PanZoomBar(), new OpenLayers.Control.MousePosition(), new OpenLayers.Control.ScaleLine(), new OpenLayers.Control.MouseToolbar(), new OpenLayers.Control.LayerSwitcher({'ascending':false}) ], }); var gphy = new OpenLayers.Layer.Google( "Google Physical", {type: G_PHYSICAL_MAP} ); var gmap = new OpenLayers.Layer.Google( "Google Streets" // the default ); var ghyb = new OpenLayers.Layer.Google( "Google Hybrid", {type: G_HYBRID_MAP} ); var gsat = new OpenLayers.Layer.Google( "Google Satellite", {type: G_SATELLITE_MAP} ); map.addLayers([ghyb]); var gml = new OpenLayers.Layer.GML("KML", url, { format: OpenLayers.Format.KML, formatOptions: { extractStyles: true, extractAttributes: true } } ); map.addLayer(gml); selectControl = new OpenLayers.Control.SelectFeature(map.layers[1], {onSelect: onFeatureSelect, onUnselect: onFeatureUnselect}); map.addControl(selectControl); selectControl.activate(); map.setCenter(new OpenLayers.LonLat(Lon,Lat), Zoom);
J'ai donc une erreur, mais je ne trouve pas ...
Merci de votre aide
J'effectue mes tests sous Windows XP/Firefox 2.0.14
Hors ligne
#2 Sat 17 May 2008 22:00
Re: [OpenLayers]: échelle des latitudes
Bonjour,
Regarde cette documentation : http://wiki.gloobe.org/openlayers:start … rte_google
En particulier :
Google utilise une projection déformée qui implique que les autres couches ne sont pas toujours bien superposée. Google utilise une projection Mercator en assumant que la terre est sphérique (ce qui est incorrect). Il s'ensuit que pour un zoom important un décalage entre le fond cartographique de Google et vos données.
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#3 Sat 17 May 2008 22:28
- mga_sig
- Participant occasionnel
- Date d'inscription: 17 May 2008
- Messages: 12
Re: [OpenLayers]: échelle des latitudes
Bonsoir,
Merci de cette prompte réponse!
J'effectue ce test justement pour vérifier les conséquences de la projection "Google".
Il me semble que les tuiles "Google" conservent leur proportion, et lorsque je demande l'affichage d'un carré ( au sens UTM ), j'obtiens un rectangle ( petit côté: latitude ) avec OpenLayers et bien un carré avec Google Maps.
Et ce qui me surprend le plus est la différence de comportement entre marqueur et popup ( ces derniers sont bien positionnés )
A+
Marc
Hors ligne
#4 Sat 17 May 2008 23:21
- mga_sig
- Participant occasionnel
- Date d'inscription: 17 May 2008
- Messages: 12
Re: [OpenLayers]: échelle des latitudes
Sur cette page http://atlasnw.free.fr/googlemaps/ol.ht … n_1218.kml , j'ai juxtaposé une version GoogleMaps et une version OpenLayers.
Les marqueurs pour Melesse ( NW de la carte ) sont décalés vers le bas pour OL.
[img]http://atlasnw.free.fr/googlemaps/gm_ol.png[/img]
Hors ligne
#5 Sat 17 May 2008 23:55
Re: [OpenLayers]: échelle des latitudes
Marc,
Je répète qu'il faut que tu regardes la doc, Google Map utilise une "projection" qui leur ait propre, généralement ce genre de décalage est dû à cela. Je ne sais pas comment Google map gère cela de son côté mais à priori il le gère correctement. Pour OL, tu dois définir une projection sphericalMercator et "reprojeté" ton kml avec gdal-ogr, ou bien reprojeter ton kml à l'aide de la fonction adéquat d'OL (conf site d'OL car je ne sais pas comment il faut faire).
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#6 Sun 18 May 2008 00:21
- erilem
- Participant occasionnel
- Date d'inscription: 8 Mar 2007
- Messages: 26
Re: [OpenLayers]: échelle des latitudes
Absolument non testé :
Code:
var proj_900913 = new OpenLayers.Projection("EPSG:900913"); var proj_4326 = new OpenLayers.Projection("EPSG:4326"); map = new OpenLayers.Map('map', { projection: proj_900913, displayProjection: proj_4326, units: "m", maxResolution: 156543.0339, maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508.34) controls: [ new OpenLayers.Control.PanZoomBar(), new OpenLayers.Control.MousePosition(), new OpenLayers.Control.ScaleLine(), new OpenLayers.Control.MouseToolbar(), new OpenLayers.Control.LayerSwitcher({'ascending':false}) ], }); var gphy = new OpenLayers.Layer.Google( "Google Physical", {type: G_PHYSICAL_MAP, sphericalMercator: true} ); var gmap = new OpenLayers.Layer.Google( "Google Streets", // the default {sphericalMercator: true} ); var ghyb = new OpenLayers.Layer.Google( "Google Hybrid", {type: G_HYBRID_MAP, sphericalMercator: true} ); var gsat = new OpenLayers.Layer.Google( "Google Satellite", {type: G_SATELLITE_MAP, sphericalMercator: true} ); map.addLayers([ghyb]); var gml = new OpenLayers.Layer.GML("KML", url, { format: OpenLayers.Format.KML, formatOptions: { extractStyles: true, extractAttributes: true, externalProjection: proj_4326, internalProjection: proj_900913 } }); map.addLayer(gml); selectControl = new OpenLayers.Control.SelectFeature(map.layers[1], {onSelect: onFeatureSelect, onUnselect: onFeatureUnselect}); map.addControl(selectControl); selectControl.activate(); map.setCenter(new OpenLayers.LonLat(Lon,Lat), Zoom);
Hors ligne
#7 Sun 18 May 2008 18:02
- mga_sig
- Participant occasionnel
- Date d'inscription: 17 May 2008
- Messages: 12
Re: [OpenLayers]: échelle des latitudes
J'ai testé la proposition de erilem.
L'ajout de
Code:
var gml = new OpenLayers.Layer.GML("KML", url, { format: OpenLayers.Format.KML, formatOptions: { extractStyles: true, extractAttributes: true, externalProjection: proj_4326, internalProjection: proj_900913 }
ne permet plus l'affichage de la couche kml. Et je n'ai pas d'erreurs dans Firebug.
La position de la souris donnée par OpenLayers.Control.MousePosition est exacte.
Lors d'un déplacement vertical de l'image, les marqueurs ne restent pas au-dessus de la même position.
Hors ligne
#8 Wed 21 May 2008 06:44
- erilem
- Participant occasionnel
- Date d'inscription: 8 Mar 2007
- Messages: 26
Re: [OpenLayers]: échelle des latitudes
J'ai testé la proposition de erilem.
L'ajout deCode:
var gml = new OpenLayers.Layer.GML("KML", url, { format: OpenLayers.Format.KML, formatOptions: { extractStyles: true, extractAttributes: true, externalProjection: proj_4326, internalProjection: proj_900913 }ne permet plus l'affichage de la couche kml. Et je n'ai pas d'erreurs dans Firebug.
La position de la souris donnée par OpenLayers.Control.MousePosition est exacte.
Lors d'un déplacement vertical de l'image, les marqueurs ne restent pas au-dessus de la même position.
Quelle version d'OL est utilisée ?
Avec la 2.6 ou le trunk, essayer :
Code:
var gml = new OpenLayers.Layer.GML("KML", url, { projection: proj_4326, format: OpenLayers.Format.KML, formatOptions: { extractStyles: true, extractAttributes: true } }
Bonne chance,
--
Eric
Hors ligne
#9 Wed 21 May 2008 15:24
- mga_sig
- Participant occasionnel
- Date d'inscription: 17 May 2008
- Messages: 12
Re: [OpenLayers]: échelle des latitudes
Je suis en version 2.6 <script src="http://www.openlayers.org/api/OpenLayers.js"></script>
J'ai fait quelques modifications de code pour pouvoir afficher:
- une couche KML: http://atlasnw.free.fr/googlemaps/ol.ht … &l=kml
- une couche Markers: http://atlasnw.free.fr/googlemaps/ol.ht … ;l=markers
- une couche Features: http://atlasnw.free.fr/googlemaps/ol.ht … l=features
Et sur la couche KML, les marqueurs ne sont toujours pas bien placés, et c'est ok sur les autres!
L'icône de la couche Features n'est pas la bonne ...
Code:
var proj_4326 = new OpenLayers.Projection("EPSG:4326"); var gml = new OpenLayers.Layer.GML("KML", url, { projection: proj_4326, format: OpenLayers.Format.KML, formatOptions: { extractStyles: true, extractAttributes: true, }, } ); map.addLayer(gml);
et
Code:
var markers = new OpenLayers.Layer.Markers("markers", { srs: 'EPSG:900913', transparent:true, format:'image/gif' }, {singleTile: true} ); map.addLayer(markers); var size = new OpenLayers.Size(10,17); var offset = new OpenLayers.Pixel(-(size.w/2), -size.h); var icon = new OpenLayers.Icon('http://boston.openguides.org/markers/AQUA.png',size,offset); for(var i = 0; i < placemarks.length; i++) { var point = placemarks[i].getElementsByTagName("Point")[0]; var coords = point.getElementsByTagName("coordinates")[0].childNodes[0].nodeValue; coords = coords.split(","); var name = placemarks[i].getElementsByTagName("name")[0].childNodes[0].nodeValue; var description = placemarks[i].getElementsByTagName("description")[0].childNodes[0].nodeValue; console.log("ol_markers name:%s lon:%s lat:%s",name,coords[0],coords[1]) // Création du marqueur olLL = new OpenLayers.LonLat(coords[0],coords[1]); markers.addMarker(new OpenLayers.Marker(olLL, icon.clone())); }
Code:
var features = new OpenLayers.Layer.Markers("features", { srs: 'EPSG:900913', transparent:true, format:'image/gif' }, {singleTile: true} ); map.addLayer(features); var size = new OpenLayers.Size(10,17); var offset = new OpenLayers.Pixel(-(size.w/2), -size.h); var icon = new OpenLayers.Icon('http://boston.openguides.org/markers/AQUA.png',size,offset); for(var i = 0; i < placemarks.length; i++) { var point = placemarks[i].getElementsByTagName("Point")[0]; var coords = point.getElementsByTagName("coordinates")[0].childNodes[0].nodeValue; coords = coords.split(","); var name = placemarks[i].getElementsByTagName("name")[0].childNodes[0].nodeValue; var description = placemarks[i].getElementsByTagName("description")[0].childNodes[0].nodeValue; console.log("ol_features name:%s lon:%s lat:%s",name,coords[0],coords[1]) // Création du marqueur olLL = new OpenLayers.LonLat(coords[0],coords[1]); feature = new OpenLayers.Feature(features,olLL,icon.clone()); feature.id = name; features.addMarker(feature.createMarker()); }
Hors ligne
#10 Thu 22 May 2008 03:28
- vblanque
- Participant occasionnel
- Lieu: Santiago, Chili
- Date d'inscription: 25 Oct 2007
- Messages: 20
Re: [OpenLayers]: échelle des latitudes
normalement le code proposé par erilem fonctionne bien
Code:
var projIn = new OpenLayers.Projection("EPSG:4326"); var projOut = new OpenLayers.Projection("EPSG:900913"); var gml = new OpenLayers.Layer.GML("KML", url, { format: OpenLayers.Format.KML, formatOptions: { extractStyles: true, extractAttributes: true, externalProjection: projIn, internalProjection: projOut }
Je le fais fonctionner sans problème avec une couche Kml.
J'ai Openlayers 2.6 (Release) et la librairie (Proj4js):
Code:
<script src="lib/OpenLayers.js"></script> <script src="lib/proj4js/proj4js.js"></script>
Dans la librairie Proj4js, j'ai dans le répertoire 'defs', les fichiers de projection:
- fichier: EPSG4326.js
Code:
Proj4js.defs["EPSG:4326"] = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs ";
- fichier: EPSG900913.js
Code:
Proj4js.defs.google = "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs";
En espérant que cela puisse te servir, chez moi, ça fonctionne nickel !
a+
Dernière modification par vblanque (Thu 22 May 2008 03:30)
Hors ligne
#11 Thu 22 May 2008 19:50
- mga_sig
- Participant occasionnel
- Date d'inscription: 17 May 2008
- Messages: 12
Re: [OpenLayers]: échelle des latitudes
De savoir que cela peut fonctionner m'encourage, ainsi que vos conseils pour y arriver.
Mais j'en suis toujours au même stade!!!
J'ai récupéré les librairies:
Code:
wget -O DL/firebuglite1.0-b1.zip http://www.getfirebug.com/releases/firebuglite1.0-b1.zip "$UZ" x -otmp DL/firebuglite1.0-b1.zip wget -O DL/OpenLayers-2.6.zip http://openlayers.org/download/OpenLayers-2.6.zip "$UZ" x -otmp DL/OpenLayers-2.6.zip wget -r -l 3 -nH --cut-dirs=4 --directory-prefix=proj4js http://dev.openlayers.org/sandbox/proj4js/lib/proj4js/ rm proj4js/index.html* rm proj4js/*/index.html* [ -d ../lib ] && rm -rf ../lib [ -d ../lib ] || mkdir ../lib cp -pR tmp/OpenLayers-2.6/* ../lib cp -pR proj4js ../lib cp -pR tmp/firebug ../lib ls -lR ../lib cat <<'EOF' > ../lib/proj4js/defs/EPSG4326.js Proj4js.defs["EPSG:4326"] = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs "; EOF
avec $UZ qui est un pointeur sur 7-zip
J'ai remplacé l'appel des javascripts:
Code:
<script src="/lib/firebug/firebug.js" language="javascript" type="text/javascript" ></script> <script src="/lib/OpenLayers.js"></script> <script src="/lib/proj4js/proj4js.js"></script>
un nouveau layer de test:
Code:
var projIn = new OpenLayers.Projection("EPSG:4326"); var projOut = new OpenLayers.Projection("EPSG:900913"); var gml = new OpenLayers.Layer.GML("kml2", url, { format: OpenLayers.Format.KML, formatOptions: { extractStyles: true, extractAttributes: true, externalProjection: projIn, internalProjection: projOut }, } ); map.addLayer(gml);
et même punition
Dans la console Firebug, onglet Net, je ne vois pas de demande pour EPSG4326.js
L'erreur peut-elle provenir des fichiers KML ?
Hors ligne
#12 Thu 22 May 2008 22:01
- mga_sig
- Participant occasionnel
- Date d'inscription: 17 May 2008
- Messages: 12
Re: [OpenLayers]: échelle des latitudes
Après avoir vidé le cache de Firefox, voici les requêtes GET en http
Code:
37 4.756035 192.168.0.31 -> 212.27.63.149 HTTP GET /googlemaps/ol.html?q=ign_1216.kml&l=kml2 HTTP/1.1 63 5.050549 192.168.0.31 -> 212.27.63.149 HTTP GET /lib/firebug/firebug.js HTTP/1.1 191 8.679208 192.168.0.31 -> 212.27.63.149 HTTP GET /lib/OpenLayers.js HTTP/1.1 753 9.987976 192.168.0.31 -> 212.27.63.149 HTTP GET /lib/proj4js/proj4js.js HTTP/1.1 804 10.287523 192.168.0.31 -> 212.27.63.149 HTTP GET /gml/ign_1216.kml HTTP/1.1 838 10.531425 192.168.0.31 -> 212.27.63.149 HTTP GET /lib/proj4js/defs/EPSG900913.js?q=ign_1216.kml&l=kml2 HTTP/1.1 847 10.629111 192.168.0.31 -> 212.27.63.149 HTTP GET /lib/proj4js/projCode/merc.js?q=ign_1216.kml&l=kml2 HTTP/1.1 862 10.842402 192.168.0.31 -> 212.27.63.149 HTTP GET /lib/theme/default/style.css HTTP/1.1 867 10.929446 192.168.0.31 -> 212.27.63.149 HTTP GET /lib/img/north-mini.png HTTP/1.1 895 11.116472 192.168.0.31 -> 212.27.63.149 HTTP GET /lib/img/west-mini.png HTTP/1.1 900 11.210422 192.168.0.31 -> 212.27.63.149 HTTP GET /lib/img/east-mini.png HTTP/1.1 912 11.273663 192.168.0.31 -> 212.27.63.149 HTTP GET /lib/img/south-mini.png HTTP/1.1 927 11.367187 192.168.0.31 -> 212.27.63.149 HTTP GET /lib/img/zoom-plus-mini.png HTTP/1.1 933 11.460784 192.168.0.31 -> 212.27.63.149 HTTP GET /lib/img/zoom-world-mini.png HTTP/1.1 942 11.554460 192.168.0.31 -> 212.27.63.149 HTTP GET /lib/img/zoom-minus-mini.png HTTP/1.1 956 11.649258 192.168.0.31 -> 212.27.63.149 HTTP GET /lib/img/layer-switcher-maximize.png HTTP/1.1 960 11.726197 192.168.0.31 -> 212.27.63.149 HTTP GET /lib/img/slider.png HTTP/1.1 974 11.820006 192.168.0.31 -> 212.27.63.149 HTTP GET /lib/img/drag-rectangle-off.png HTTP/1.1 979 11.913438 192.168.0.31 -> 212.27.63.149 HTTP GET /lib/img/panning-hand-on.png HTTP/1.1 1013 12.009165 192.168.0.31 -> 212.27.63.149 HTTP GET /lib/img/layer-switcher-minimize.png HTTP/1.1 1075 12.325365 192.168.0.31 -> 212.27.63.149 HTTP GET /favicon.ico HTTP/1.1 1083 12.327648 192.168.0.31 -> 212.27.63.149 HTTP GET /lib/img/zoombar.png HTTP/1.1
Hors ligne
#13 Sat 24 May 2008 22:08
- mga_sig
- Participant occasionnel
- Date d'inscription: 17 May 2008
- Messages: 12
Re: [OpenLayers]: échelle des latitudes
Ce qui est bien avec la pluie, c'est que je poursuis mes essais: je viens de transformer "mon" code javascript en version objet/prototype.
Comme je suis un grand débutant en javascript, j'ai eu un peu de mal, mais bon le principal est le résultat.
J'ai donc maintenant une page html avec 2 cartes:
- celle de gauche est obtenue par un OpenLayers.Layer.GML
- celle de droite avec un OpenLayers.Layer.Markers
Et du côté positionnement des marqueurs, le OpenLayers.Layer.Markers est gagnant.
Pour voir: http://atlasnw.free.fr/googlemaps/olo.h … n_1216.kml
Hors ligne
#14 Wed 25 June 2008 12:12
- @eshogues
- Participant actif
- Lieu: Lausanne/Chambéry
- Date d'inscription: 27 Sep 2007
- Messages: 82
Re: [OpenLayers]: échelle des latitudes
Bonjour à tous
Je rencontre exactement le meme problème que mga_sig.
Je voudrais intégrer les données du réseau de GPS permanent de l'ign, propsé en libre téléchargement.
Je souhaiterais savoir où puis je télécharger la bibliothèque Proj4 que vous utilisez
Code:
<script src="/lib/proj4js/proj4js.js"></script>
De plus je voudrais savoir si un tuto existe pour générer un kml à partir d'un csv ou d'un txt.
Les données des stations étant précises qu'elle est la solution la plus adaptée selon vous?
le KML, les Markers???
Cordialement
Arnaud
Hors ligne
#15 Wed 25 June 2008 12:25
Re: [OpenLayers]: échelle des latitudes
Arnaud,
Au hazard : http://proj4js.org/
Pour les données, prend les plus simples à créer. Regarde du côté d'OGR pour voir ses possibilités en fonction du format des données de départ.
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#16 Wed 25 June 2008 15:52
- @eshogues
- Participant actif
- Lieu: Lausanne/Chambéry
- Date d'inscription: 27 Sep 2007
- Messages: 82
Re: [OpenLayers]: échelle des latitudes
Merci pour l'info
Cordialement
Arnaud
Hors ligne