Pages: 1
- Sujet précédent - Superposer couche PostGIS-MapServer et OSM sur OpenLayers - Sujet suivant
#1 Sun 09 February 2014 13:21
- Georgie
- Participant assidu
- Date d'inscription: 28 May 2011
- Messages: 232
Superposer couche PostGIS-MapServer et OSM sur OpenLayers
Bonjour
Dans la série "Premiers pas sur PostGIS et MapServer", j'essaie de superposer une couche de points provenant de ma base de données avec OpenSreetMap.
J'ai fait plusieurs tests mais sans succès. J'arrive à afficher ou l'un ou l'autre mais pas les deux. Serait-ce la projection ? Mes points sont en 4326, je pensais qu'OSM aussi, mais apparemment non....
Ici un exemple de ma fonction init, mes points s'affichent mais pas OSM :
Code:
function init(){ var lon = 55.540008544921875; var lat = -21.13446434146776; var zoom = 10; var map = new OpenLayers.Map( 'map' ); var attaques = new OpenLayers.Layer.MapServer( "Attaques", "http://hinot.alwaysdata.net/cgi-bin/mapserv?mode=map&map=./mapfiles/attaques.map"); var openstreetmap = new OpenLayers.Layer.OSM(); map.addLayer(attaques, openstreetmap); map.setCenter(new OpenLayers.LonLat(lon, lat), zoom); }
URL : http://hinot.alwaysdata.net/test2.html
D'autres exemples me font penser qu'OSM serait en EPSG 900913, j'ai donc tenté de déclarer cette projection dans mon MapFile : le MapFile seul s'affiche correctement mais plus dans ma page HTML...
Naîvement, j'ai aussi essayé de convertir la projection de mes points directement dans init, avec ce code :
Code:
attaques=attaques.transform( new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913") );
Mais c'était trop d'espoir...
Un autre exemple glâné sur internet me rend perplexe, c'est celui-ci :
URL : http://hinot.alwaysdata.net/test.html
Où OSM s'affiche mais pas mes points.
La fonction init est maintenant celle-ci, et convertit un point de centrage de la carte en 900913 (...) :
Code:
function init(){ var la_carte = new OpenLayers.Map('ma_carte'); var openstreetmap = new OpenLayers.Layer.OSM(); var centre_carte=new OpenLayers.LonLat(55.54412841796875,-21.129340576524694) // Centre de la carte centre_carte=centre_carte.transform( new OpenLayers.Projection("EPSG:4326"), // from new OpenLayers.Projection("EPSG:900913") // to ); var attaques = new OpenLayers.Layer.MapServer( "OpenLayers WMS", "http://hinot.alwaysdata.net/cgi-bin/mapserv?mode=map&map=./mapfiles/attaques.map"); la_carte.addLayer(openstreetmap, attaques); var zoom=9.5 la_carte.setCenter(centre_carte,zoom); }
Voilà voilà, si quelqu'un a une petite idée...
Merci d'avance !
Hors ligne
#2 Thu 13 February 2014 21:52
Re: Superposer couche PostGIS-MapServer et OSM sur OpenLayers
Bonsoir,
J'ai vu dans la doc de OpenLayers (mais où ? je ne retrouve pas) qu'il vaut mieux utiliser un flux WMS que du mapfile directement.
Ce qui permet d'autoriser Mapserver a reprojeter en 900913 (dans les paramètres metadata).
C'est peut être une piste ?
Bon courage !
Jean-François Behm, formateur SIG, jf.behm@, idgeo.frformations@ idgeo.fr
IDGEO, www.idgeo.fr
Institut de Développement de la Géomatique 42, avenue de Général de Croutte - 31100 toulouse
Hors ligne
#3 Thu 13 February 2014 23:32
- Georgie
- Participant assidu
- Date d'inscription: 28 May 2011
- Messages: 232
Re: Superposer couche PostGIS-MapServer et OSM sur OpenLayers
Ok merci, j'utilise un flux WMS maintenant, et effectivement c'est beaucoup mieux : moins de défaut d'affichage sur les bords, plus d'options...
Cependant je n'arrive toujours pas malgré cela à afficher un autre fond de carte en même temps. Je travaille maintenant sur cet exemple :
http://hg-map.fr/tests/Map_Base_OL.html
Tout ce passe dans le fichier mapbase.js (http://hg-map.fr/tests/js/mapbase.js): Mon Mapfile est appelé via WMS, firebug n'affiche pas d'erreur mais ma couche n'apparaît pas.
Grâce à d'autres tests, je suis sûr que mon MapFile fonctionne et génère bien un WMS. Je pense donc que c'est à cause de la projection. Ma couche est en 4326. Les fonds de carte que je souhaite ajouter dans l'exemple ci-dessus sont ceux de Google, je pensais donc qu'ils étaient également en 4326, mais...
Je cherche donc à convertir "à la volée" ou ma couche ou les fonds de carte. Apparemment il y a la commande transform mais j'ai essayé pas mal de syntaxes différentes sans succès...
En même temps, il y a un bout de code au début de mon script, que j'ai du mal à interpréter, et qui expliquerait peut-être mes problèmes, celui-ci :
Code:
var proj = new OpenLayers.Projection("EPSG:900913"); var dispproj = new OpenLayers.Projection("EPSG:4326"); var bounds = new OpenLayers.Bounds(-21,35,48,57); bounds.transform(dispproj,proj);
Et vous même avez l'air de dire que je dois reprojeter en 900913... Je ne comprends pas bien car je pensais que les fonds de carte "mondiaux" utilisait du 4326 (WGS84).
PS : sur QGIS, aucun problème de calage entre ma couche et les fonds de carte Google du plugin OpenLayers.
Hors ligne
#4 Sun 09 March 2014 17:52
Re: Superposer couche PostGIS-MapServer et OSM sur OpenLayers
Bonsoir,
Non les cartes qui ont une étendue mondiale ne sont pas en 4326 mais en 3857 (ou 900913). Toutes les API de données(Google, OSM, etc.) l'utilise. Il faut donc activer cette projection dans ton code (isMercator: true au niveau de la map) et faire en sorte que ton service WMS accepte le 900913 (ou le 3857).
Attention aussi à la transparence des couches WMS qui peuvent cacher ce qu'il y a en dessous
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
#5 Sun 09 March 2014 18:13
- Georgie
- Participant assidu
- Date d'inscription: 28 May 2011
- Messages: 232
Re: Superposer couche PostGIS-MapServer et OSM sur OpenLayers
OOOOk ! merci de l'info sur l'EPSG 900913, qui est donc standard pour les projections "mondiales". C'est noté !
Hors ligne
Pages: 1
- Sujet précédent - Superposer couche PostGIS-MapServer et OSM sur OpenLayers - Sujet suivant