#1 Thu 02 July 2009 11:20
- smile
- Participant actif
- Date d'inscription: 2 Jul 2009
- Messages: 110
[MapServer/OpenLayers] Problème affichage via Openlayers
Bonjour,
Je dois réalisé un outil cartographique basé sur MapServer. Je récupère mes couches via une base de données Oracle hébergé sur un serveur distant.
J'arrive à afficher mes couches statiques via MapServer en passant par le cgi-bin dans la barre d'adresse.
Jusque là, tout va bien. Je souhaite ajouter des outils de zoom, ..., en passant par OpenLayers et là tout se corse.
J'ai essayé plein de tutos, effectué des tonnes de recherches mais entre les bouts de codes, les messages datant de 2003 et des configurations de mapfile qui se ressemblent en rien à chaque fois, je poste mon mapfile et mon fichier .html.
Code:
MAP NAME "WMS-test" STATUS ON SIZE 800 800 EXTENT xxxxxxxxxxxxxxxx UNITS METERS SHAPEPATH "c:/ms4w/map/" IMAGECOLOR 210 210 210 PROJECTION "init=epsg:27591" ##required END WEB IMAGEPATH "C:/ms4w/Apache/htdocs/img/" IMAGEURL "img/" METADATA "wms_title" "WMS Demo Server" "wms_onlineresource" "http://localhost/cgi-bin/mapserv.exe?" "wms_srs" "epsg:27591" END END # # Start of layer definitions # LAYER NAME "commune" METADATA "wms_title" "Commune" END TYPE POLYGON STATUS DEFAULT CONNECTIONTYPE oraclespatial CONNECTION "user/user@blabla" DATA "GEOMETRY FROM COMMUNE" PROCESSING "CLOSE_CONNECTION=DEFER" CLASS STYLE COLOR 240 240 240 OUTLINECOLOR 180 180 180 END END END # Layer END # Map File
Code:
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>OpenLayers Example</title> <link rel="stylesheet" href="C:/ms4w/apps/OpenLayers/theme/default/style.css" type="text/css" /> <link rel="stylesheet" href="style.css" type="text/css" /> <script src="C:/ms4w/apps/OpenLayers/lib/OpenLayers.js"></script> <script type="text/javascript"> // making this a global variable so that it is accessible for // debugging/inspecting in Firebug var map = null; function init(){ var options = {units: 'm'}; map = new OpenLayers.Map('map', options); var commune_wms = new OpenLayers.Layer.WMS( "Commune", "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/map/mapfile.map&", {layers: 'commune'} ); map.addLayers([commune_wms]); map.addControl(new OpenLayers.Control.LayerSwitcher()); map.zoomToMaxExtent(); } </script> </head> <body onload="init()"> <h1 id="title">OpenLayers Example</h1> <div id="tags"></div> <p id="shortdesc"> Demonstrate a simple map with an overlay that includes layer switching controls. </p> <div id="map" class="smallmap"></div> <div id="docs"></div> </body> </html>
Le résultat avec OpenLayers:
- Rien ne s'affiche, juste un fond gris (rappel en passant juste par MapServer, ca fonctionne)
- Et lorsque j'avais ajouté un SCALEBAR dans la mapfile, celle-ci était affiché plein de fois comme une mosaïque avec une échelle de 6000km alors qu'à la base, je dois afficher les contours d'une commune
Voilà,
Si vous avez une solution à mon problème^^.
En tout cas, merci à l'ensemble de la communauté GeoRezo car cela m'a permis de bien avancer dans mon projet grâce aux différents tutos et autres topics.
Hors ligne
#2 Thu 02 July 2009 11:27
Re: [MapServer/OpenLayers] Problème affichage via Openlayers
Bonjour,
Il ne faut pas ajouter la barre d'échelle via MapServer, c'est normal qu'il s'affiche en "mosaique" (openlayers gère la carte sous forme de tuiles).
Cependant, cela donne quelques informations :
1. le service WMS fonctionne
2. OpenLayers gère correctement le service WMS côté client ;
3. la zone n'est pas correcte, on doit être en dehors de la zone de données
Conclusion :
Vérifier que OpenLayers a une projection définie correctement, par défaut WGS84, si aucune autre projection n'a été définie (au niveau de l'objet map ou layer), cela peut poser problème. Est ce que MapServer peut reprojeter les données ne WGS84 ?
Si je regarde le code que tu as fournies, on remarque que tu n'as pas changé la projection dans OL, donc celle par défaut s'applique.
Au niveau du code du mapfile, tu définies une projection en 27591 ... et tu ne proposes pas 4326 (WGS84).
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 Thu 02 July 2009 12:09
- smile
- Participant actif
- Date d'inscription: 2 Jul 2009
- Messages: 110
Re: [MapServer/OpenLayers] Problème affichage via Openlayers
Bon, j'ai effectué des recherches et de tests, alors:
Si on supprime toutes les références au système de projection dans le mapfile, en passant par le cgi-bin, cela fonctionne toujours.
Au niveau d'OpenLayers, j'ai effectué des recherches et je suis tombé sur ca et en modifiant le mapfile, toujours rien.
En effectuant une autre recherche, je suis tombé sur le bout de code suivant:
Code:
projection: new OpenLayers.Projection("epsg:27572"), displayProjection:new OpenLayers.Projection("epsg:4326"), units:"m"
J'ai effectué des essais en remplaçant 27572 par "mon" système de projection (27591 - Lambert I) et toujours rien au niveau d'OpenLayers...
Idem, en faisant un mix des 2, toujours rien...
PS: Merci pour cette réponse rapide^^
Hors ligne
#4 Thu 02 July 2009 12:19
Re: [MapServer/OpenLayers] Problème affichage via Openlayers
Bonjour,
Première chose à faire à mon avis est de revenir au code que tu as posté et de permettre à mapserver de reprojeter en WGS84. Pour cela tu dois rajouter EPSG:4326 à la suite de "epsg:27591" pour le paramètre "wms_srs"
Code:
"wms_srs" "epsg:27591 epsg:4326"
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 Thu 02 July 2009 12:59
- smile
- Participant actif
- Date d'inscription: 2 Jul 2009
- Messages: 110
Re: [MapServer/OpenLayers] Problème affichage via Openlayers
Justement,
Comme je l'ai dit, j'ai essayé plein de manips et aucune n'a fonctionné, y compris celle que vous citez.
Voici un bout de mon mapfile:
Code:
PROJECTION "init=epsg:27591" ##required END WEB IMAGEPATH "C:/ms4w/Apache/htdocs/img/" IMAGEURL "img/" METADATA "wms_title" "WMS Demo Server" "wms_onlineresource" "http://localhost/cgi-bin/mapserv.exe?" "wms_srs" "epsg:27591 epsg:4326" END END LAYER NAME "commune" METADATA "wms_title" "Commune" "wms_srs" "epsg:27591 epsg:4326" END END
J'ai essayé de commenter, décommenter, alterner les epsg, le tout avec mon ancien code html.
Il y a-t-il peut-être un soucis avec le EXTENT qui est en Lambert I dans le Mapfile ??? Ne faudrait-il pas affecter un EXTENT via OpenLayers ???
Merci !
PS: Je précise au cas où que je suis issu d'une formation en informatique et donc la géomatique, c'est pas mon dada.
Hors ligne
#6 Thu 02 July 2009 14:13
Re: [MapServer/OpenLayers] Problème affichage via Openlayers
Ah oui bien sur, l'extent côté openlayers doit être dans la projection utilisé par OpenLayers CQFD
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
#7 Fri 03 July 2009 10:34
- smile
- Participant actif
- Date d'inscription: 2 Jul 2009
- Messages: 110
Re: [MapServer/OpenLayers] Problème affichage via Openlayers
Bonjour,
Oui je m'en était rendu compte. En fait, tout fonctionnait bien depuis le départ, sauf que la commune était projetée par défaut en WGS84 ce qui fait que c'était un minuscule pixel sur le fond gris. De plus, j'ai récupéré les données d'un mapfile existant et la projection utilisée était "deprecated" après une petite recherche sur le net.
Voilà, merci pour votre réponse.
J'arrive avec une autre question qui peut paraître bête mais qui a toute son importance pour la suite du projet.
Peut-on désactiver le tuilage sur OpenLayers ?
Hors ligne
#8 Fri 03 July 2009 10:39
Re: [MapServer/OpenLayers] Problème affichage via Openlayers
Bonjour,
On peut utiliser certaine couche non tuilé (une couche MapServer par exemple) mais celles-ci ne sont jamais conseillé.
Pourquoi veux tu désactiver le tuilage sans indiscretion ? C'est un apport important à mon avis !
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
#9 Fri 03 July 2009 10:51
- smile
- Participant actif
- Date d'inscription: 2 Jul 2009
- Messages: 110
Re: [MapServer/OpenLayers] Problème affichage via Openlayers
Si j'ai bien saisi ce que l'on m'a dit au service SIG, il y aurait un problème lorsqu'un objet occupe plusieurs tuiles. Pour l'afficher sur les 4 tuiles, il faudrait faire 4 requêtes SQL pour aller le rechercher dans la BDD Oraclespatial.
Aussi, j'ai vu qu'il y a un "tilecache" mais on m'a annoncé que les données changent quotidiennement dans la BDD alors je doute de l'intérêt.
Auriez-vous une suggestion d'un logiciel à intégrer à MapServer permettant de rajouter des outils comme OpenLayers sachant que par la suite, je devrai aussi des clics de souris pour récupérer l'ID des bâtiments, colorier des bâtiments en fonction des utilisateurs et des droits qui leur sont associés dans une BDD MySQL ?
Mapbender conviendrait-il ?
PS: Encore merci pour votre aide^^
Hors ligne
#10 Fri 03 July 2009 11:08
Re: [MapServer/OpenLayers] Problème affichage via Openlayers
Bonjour,
Si j'ai bien saisi ce que l'on m'a dit au service SIG, il y aurait un problème lorsqu'un objet occupe plusieurs tuiles. Pour l'afficher sur les 4 tuiles, il faudrait faire 4 requêtes SQL pour aller le rechercher dans la BDD Oraclespatial.
oui surtout qu'il y a 16 tuiles ;)Je ne savais pas qu'Oracle avait ce genre de soucis
Aussi, j'ai vu qu'il y a un "tilecache" mais on m'a annoncé que les données changent quotidiennement dans la BDD alors je doute de l'intérêt.
Est ce que toutes les couches changent régulièrement ? Quelle est leur fréquence de mise à jour ? Sont elles mises à jour ou modifiées ? Y a t-il un intérêt d'avoir une fréquence de mise à jour élevé ? Créer des tuiles pour certaines couches qui n'évoluent que très peu est déjà une bonne manière d'optimiser l'appli, ensuite si les données évoluent mais à une fréquence qui permet de vider le cache tout en gardant l'apport de TileCache, c'est à dire si le nombre de visiteur est important et que la fréquence de mise à jour et d'une semaine par exemple. Est ce que les données en production sont les mêmes que celle de la saisie (même base de donnés par exemple).
Après tout est question d'équilibre.
Auriez-vous une suggestion d'un logiciel à intégrer à MapServer permettant de rajouter des outils comme OpenLayers sachant que par la suite, je devrai aussi des clics de souris pour récupérer l'ID des bâtiments, colorier des bâtiments en fonction des utilisateurs et des droits qui leur sont associés dans une BDD MySQL ?
Mapbender conviendrait-il ?
PS: Encore merci pour votre aide^^
CartoWeb ?
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
#11 Fri 03 July 2009 11:14
- smile
- Participant actif
- Date d'inscription: 2 Jul 2009
- Messages: 110
Re: [MapServer/OpenLayers] Problème affichage via Openlayers
Est ce que toutes les couches changent régulièrement ? Quelle est leur fréquence de mise à jour ? Sont elles mises à jour ou modifiées ? Y a t-il un intérêt d'avoir une fréquence de mise à jour élevé ? Créer des tuiles pour certaines couches qui n'évoluent que très peu est déjà une bonne manière d'optimiser l'appli, ensuite si les données évoluent mais à une fréquence qui permet de vider le cache tout en gardant l'apport de TileCache, c'est à dire si le nombre de visiteur est important et que la fréquence de mise à jour et d'une semaine par exemple. Est ce que les données en production sont les mêmes que celle de la saisie (même base de donnés par exemple).
Alors là, je ne peux répondre...On m'a seulement dit ce que j'ai énoncé plus haut. Le service SIG doit bien avoir ses raisons enfin bon...
Je vais aller jeter un oeil du côté de CartoWeb...
Merci,
Bonne journée !
Hors ligne
#12 Wed 08 July 2009 16:40
Re: [MapServer/OpenLayers] Problème affichage via Openlayers
Bonjour,
La suite se passe ici : http://georezo.net/forum/viewtopic.php?pid=143535
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