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

Printemps des cartes 2024

#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

JF BEHM
Participant actif
Lieu: toulouse
Date d'inscription: 9 Aug 2013
Messages: 126
Site web

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@texte-a-enlever.idgeo.fr, formations@texte-a-enlever.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

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9855
Site web

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 wink

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

 

Pied de page des forums

Powered by FluxBB