#1 Tue 13 June 2017 17:29
- JulienViala
- Juste Inscrit !
- Date d'inscription: 13 Jun 2017
- Messages: 6
MapFile sur images locales
Bonjour,
Dans le cadre de mon stage je dois mettre en place un MapServer utilisant des images créées par l'entreprise et donc disponible en local. Les images peuvent avoir différentes projections differentes mais actuellement je fais les tests avec une image géoréférencé en Lambert93. J'ai donc écrit un MapFile mais je ne suis pas du tout sûr de tout les champs renseignés.
MapFile :
Code:
MAP NAME "testMugel" SIZE 1000 500 EXTENT 99226.000000 6049647.000000 1242375.000000 7110524.000000 UNITS METERS IMAGECOLOR 255 255 255 #fond de l'image SHAPEPATH "C:/ms4w/apps/testSeaviews/data/" DEBUG 5 WEB IMAGEPATH "C:/ms4w/apps/testSeaviews/tmp/" IMAGEURL "/testSeaviews/tmp/" TEMPLATE "data/template.html" END #WEB #OUTPUTFORMAT # NAME png # DRIVER "GD/PNG" # MIMETYPE "image/png" # IMAGEMODE PC256 # EXTENSION "png" #END #OUTPUTFORMAT LAYER NAME 'image' TYPE RASTER STATUS ON EXTENT 99226.000000 6049647.000000 1242375.000000 7110524.000000 DATA "data/grotte_Lbr93_50cm.jpeg" END # LAYER END #MAP
Donc quand j'éxecute mapserv.exe en CLI il me sort bien mon template avec le chemin de l'image correctement rempli mais par contre il me génère une image blanche ...
Comme fichier .tab j'ai:
Code:
!table !version 300 !charset WindowsLatin1 Definition Table File "grotte_Lbr93_50cm.jpeg" Type "RASTER" (912590.5,6232927) (0,0) Label "NW", (912767.5,6232927) (355,0) Label "NE", (912767.5,6232672.5) (355,509) Label "SE", (912590.5,6232672.5) (0,509) Label "SW" CoordSys Earth Projection 3, 33, "m",3, 46.5, 44, 49, 700000, 6600000
et je lance mapserver en CLI de cette facon :
Code:
mapserv.exe QUERY_STRING=map=C:/ms4w/apps/testSeaviews/testMap.map
En cherchant j'ai cru comprendre que c'etait un probleme de projection mais quand je rajoute le bloc PROJECTION avec comme valeur 2154(Lbr93) il ne le reconnait pas ..
Auriez vous un bon tuto sur le traitement d'image locale ou encre mieux une explication a mon problème ?
Merci d'avance,
Julien VIALA
Hors ligne
#2 Wed 14 June 2017 10:04
Re: MapFile sur images locales
Bonjour,
Il y a plusieurs soucis, incompréhension. Ton objet LAYER doit avoir un paramètre PROJECTION, sinon il va utiliser celui de l'objet MAP, parent. En leurs absence, je ne sais pas ce qu'il advient Donc définit deux blocs PROJECTION avec la configuration qui va bien (met tout en lambert 93).
Ton Shapepath étant définie par C:/ms4w/apps/testSeaviews/data/ le chemin vers tes données devraient être comme ceci : C:/ms4w/apps/testSeaviews/data/data/grotte_Lbr93_50cm.jpeg, vérifié que tu as bien deux répertoires data !
Le JPEG est à proscrire, passe en GTIff correctement compressé.
Si tu veux une carte, à un moment donnée tu dois définir l'endroit (via un extent) dans la requête, mais aussi la couche que tu veux afficher (ou les couches), la projection, etc. Bref, je te laisse regarder la description des services OGC dans le wiki de GeoRezo : https://georezo.net/wiki/main/standards/start
Tu utilises comment ton service : cgi+template ou service OGC ? Selon le cas il manque des informations (templates pour le 1er, blocs Metadata
pour le 2nd) et surtout tu ne les interroges pas de la même manière !
Perso je préconiserai les services OGC : http://mapserver.org/ogc/wms_server.html, tu pourras utiliser QGIS pour t'y connecter.
Enfin pour débuguer tu devrais utiliser shp2img, c'est pratique dans un 1er temps.
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 15 June 2017 10:53
- JulienViala
- Juste Inscrit !
- Date d'inscription: 13 Jun 2017
- Messages: 6
Re: MapFile sur images locales
Bonjour,
Merci de votre réponse, j'ai bien avancé depuis. Beaucoup d'erreurs se cachaient mais j'arrive enfin a générer l'image à l'aide de shp2img et dans mon navigateur. J'ai repris depuis le début le tutoriel "http://mapserver.org/fr/tutorial/".
Voila le nouveau mapFile pour information :
Code:
MAP NAME TESTMUGEL SIZE 400 600 EXTENT 912564 6232642 912799 6232961 UNITS METERS SHAPEPATH "C:/ms4w/apps/testSeaviews/data/" IMAGECOLOR 255 255 255 CONFIG "PROJ_LIB" "C:/proj/nad/" WEB IMAGEPATH "C:/ms4w/apps/testSeaviews/tmp/" IMAGEURL "/testSeaviews/tmp/" TEMPLATE "data/template.html" END #WEB PROJECTION "init=epsg:2154" #Lbr93 END LAYER NAME grotte DATA 'grotteLbr93.tif' STATUS ON TYPE RASTER PROCESSING "BANDS=1,2,3" OFFSITE 71 74 65 END # LAYER END #MAP
Forcément maintenant j ai de nouvelles problématiques ! Les images que j'utilise sont de base en format PNG. Dans le tuto on utilise bien des images du même format mais lorsque je passe sur mon mapFile et mon image je n'arrive a le faire fonctionner qu'avec du .tif ..
Y a t-il une subtilité que je n'ai pas compris pour traiter les images png ?
Ensuite que se passe t'il si je joue avec le parametre SIZE et EXTENT du bloc MAP ? Mapserveur est t-il capable d'échantillonner l'image de lui même pour l'afficher avec une résolution plus faible?
Et pour finir je voudrais afficher un fond de carte par flux WMS mais je n'arrive pas a trouver de lien encore maintenus et sous un serveur pris en charge par mapServeur (apparement je suis restreint a la version 1.1.1 maximum ... ), où puis-je en trouver un (incluant les cotes du sud de la france au moins).
Merci beaucoup de votre aide.
Julien VIALA
Dernière modification par JulienViala (Thu 15 June 2017 11:01)
Hors ligne
#4 Thu 15 June 2017 11:29
Re: MapFile sur images locales
Bonjour,
Les paramètres SIZE et EXTENT, dans le cadre d'une utilisation sous forme de service OGC, constitue la taille et l'étendue par défaut (quoique pour le paramètre SIZE, je pense que ca ne sert à rien). Ces 2 paramètres sont définie dans l'url.
MapServer va bien sur générer l'image en récupérant les données du PNG et en les traitant correctement. Le format source est bien du PNG mais je préfère parler de données Sinon souvent (avec les tif) ont génère des overview (ou pyramide) qui sont des images du raster dégradé pour plusieurs échelles de visibilités. Cela permet d'optimiser les performances.
Le PNG **doit** être éviter, ce n'est pas une bonne solution. La version de MapServer ne gère probablement pas le PNG comme source de données, mais cela m'étonne quand même !
Que retourne : c../../bin/mapserv.exe -v (Le chemin est à adapter) ?
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 15 June 2017 11:55
- JulienViala
- Juste Inscrit !
- Date d'inscription: 13 Jun 2017
- Messages: 6
Re: MapFile sur images locales
La pour le moment je voudrais générer les images en temps réél afin queles soient utilisables par le logiciel de l'entreprise. Ce qui etait actuellement implanté ne fonctionnait que moyennement et prenait énormément de ressources. LE developpement d'un service OGC se fera surement mais dans un deuxieme temps.
Mais par exemple lors du calcul des images par le logiciel de l'entreprise si je fait écrire un mapFile contenant pour chaque image un layer et que pour réutiliser ce mapFile je redéfinis a chaque fois l'EXTENT avant de généré l'image que va t il se produire ? (Expliqué comme ca c est un peu tordu mais je suis très mauvais pédagogue ^^. En gros je veux integrer le rendu de mapserveur dans un autre logiciel déjà complexe).
Si tout les STATUS des LAYER sont à ON, va t-il toutes les générer pour ensuite "découper" ce qu'il rentre dans l'EXTENT ?
Le format tif gère-t-il la transparence ou est ont obligé de redécouper les images en carré ?
Dernieère question, comment cela se passe si j ai des images qui ne sont pas dans la même projection ? Vaut il mieux que je les transfert toute en Lbr93 ou je peux definir la projection de mon bloc MAP en Lbr93 puis y ajouter des LAYER en WGS ou Mercator et qu il s'y retrouve seul ?
Retour de mapserv.exe -v :
Code:
C:\ms4w\Apache\cgi-bin>mapserv.exe -v MapServer version 7.0.4 (MS4W 3.2.1) OUTPUT=PNG OUTPUT=JPEG OUTPUT=KML SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE SUPP ORTS=CAIRO SUPPORTS=SVG_SYMBOLS SUPPORTS=SVGCAIRO SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=FASTCGI SUPPORTS=THREADS SUPPORTS=GEOS INPUT=JPEG INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE
Julien VIALA
Dernière modification par JulienViala (Thu 15 June 2017 11:55)
Hors ligne
#6 Thu 15 June 2017 13:23
Re: MapFile sur images locales
Bonjour,
Je pense que MapServer ne gère pas le format PNG. Il faut passer par gdal. Mais, j'insiste **vraiment** abandonne ce format. Passe par une étape intermédiaire avec gdal_translate pour partir du png et générer du GTiff. Le GTiff gère la transparence (bande opacité ou nodata).
Si tout les STATUS des LAYER sont à ON, va t-il toutes les générer pour ensuite "découper" ce qu'il rentre dans l'EXTENT ?
Le format tif gère-t-il la transparence ou est ont obligé de redécouper les images en carré ?
Il va appliquer les couches les unes après les autres en les empilant en filtrant les données qui sont contenu dans l'extent (plus une marge).
La pour le moment je voudrais générer les images en temps réél afin queles soient utilisables par le logiciel de l'entreprise. Ce qui etait actuellement implanté ne fonctionnait que moyennement et prenait énormément de ressources. LE developpement d'un service OGC se fera surement mais dans un deuxieme temps.
Quelles images ? Un schéma du processus à mettre en oeuvre ?
Mais par exemple lors du calcul des images par le logiciel de l'entreprise si je fait écrire un mapFile contenant pour chaque image un layer et que pour réutiliser ce mapFile je redéfinis a chaque fois l'EXTENT avant de généré l'image que va t il se produire ? (Expliqué comme ca c est un peu tordu mais je suis très mauvais pédagogue ^^. En gros je veux integrer le rendu de mapserveur dans un autre logiciel déjà complexe).
Ce qui se conçoit bien s'énonce clairement
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 Thu 15 June 2017 16:03
- JulienViala
- Juste Inscrit !
- Date d'inscription: 13 Jun 2017
- Messages: 6
Re: MapFile sur images locales
Ok, j'enregistre pour le png, je me debrouille pour faire passer les images dans gdal_translate avant.
Daccord, niveau performance, cela ne le ralentit pas trop si on a beaucoup d'images ?
L'entreprise créé des MNT et des images sonar. Je voudrait pouvoir mettre un fond de carte récupérées de Google earth ou autre puis superposer mes images créées à partir des MNT ou des images sonar (couches que l'on pourrait ajouter ou non)et enfin générer l'image qui en résulte pour l'afficher à l'écan.
Pour la derniere partie, l'entreprise ait de la photogramétrie sous marine. Au moment du traitement des images je voudrais créer le mapFile de la zone mais à e moment là je ne connaitrait pas l'EXTENT voulu. Ce ne sera qu'au moment où je voudrait l'afficher à l'écran que je remplirai le champs EXTENT.
Ah et aussi, auriez vous un serveur WMS maintenu et dans une version 1.1.1 maximum (apparemment version maximum supportée par mapServer) englobant le sud de la france ?
Merci beaucoup des réponses rapides,
Julien VIALA
Hors ligne
#8 Fri 16 June 2017 11:21
Re: MapFile sur images locales
Bonjour,
Tu peux scripter en Python ou PHP pour récupérer l'extent de l'image et générer la couche dans le mapfile. gdalinfo te renverra ce genre d'info.
Pour le fond de plan, c'est compliqué. Tu peux essayer de créer une couche MapServer à partir des tuiles du service Bing de Microsoft. Ce n'est pas possible pour Google.
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