Pages: 1
- Sujet précédent - [mapserver] Erreur fonction draw de la classe ms_newPointObj() - Sujet suivant
#1 Mon 20 March 2017 18:02
- Fanny12
- Participant occasionnel
- Date d'inscription: 11 Jun 2014
- Messages: 16
[mapserver] Erreur fonction draw de la classe ms_newPointObj()
Bonjour,
J'essaye de dessiner un point avec la fonction int draw(mapObj map, layerObj layer, imageObj img, int class_index [, string text])
Si le layerObj est de type POLYGON, la fonction s'exécute.
Si le layerObj est de type POINT, il y a une erreur PHP " PHP Fatal error: Uncaught exception 'MapScriptException' "
Je n'arrive pas à comprendre pourquoi la fonction ne marche pas avec une couche de point. Si quelqu'un peut m'aider ?
Voilà la définition de mon fichier map :
Code:
MAP NAME "test" STATUS ON SIZE 720 540 IMAGECOLOR 255 255 255 EXTENT 550000 1850000 700000 1999000 RESOLUTION 72 FONTSET /var/www/test/font/fonts.list OUTPUTFORMAT NAME "png" MIMETYPE "image/png" DRIVER "GD/PNG" EXTENSION "png" IMAGEMODE PC256 TRANSPARENT FALSE END CONFIG "MS_ERRORFILE" "/tmp/ms_error.txt" SHAPEPATH "../SHP" SYMBOLSET "symbols/symbol.sym" WEB TEMPLATE "printable.html" EMPTY "testImage.html" # path relative to cgi-bin MINSCALE 100 MAXSCALE 900000 IMAGEPATH "/var/www/test/TMP/" # full path to image tmp dir, so cgi can find it IMAGEURL "/test/tmp/" # url location of image tmp dir, so web browser can find it END # Web Interface Options QUERYMAP STATUS OFF STYLE SELECTED COLOR 255 255 0 END LEGEND STATUS ON IMAGECOLOR 255 255 255 POSITION UL KEYSIZE 28 22 #key boxes KEYSPACING 5 15 LABEL TYPE BITMAP SIZE MEDIUM COLOR 0 0 0 END END # Legend REFERENCE IMAGE refmap.png EXTENT 550000 1850000 700000 1999000 SIZE 200 200 STATUS ON COLOR -1 -1 -1 OUTLINECOLOR 255 0 0 END ############################# # Start of layer definitions ####################################################################################################################### LAYER NAME departement_aplat TYPE POLYGON STATUS OFF TOLERANCEUNITS PIXELS TOLERANCE 10 TEMPLATE site.html TRANSPARENCY 40 DATA pays CLASS STYLE COLOR 196 225 177 END END END # LAYER ##################################################################################################################### LAYER NAME Comm_pt TYPE POINT STATUS OFF TOLERANCEUNITS PIXELS TOLERANCE 10 DATA comm_pt CLASS STYLE COLOR 0 0 0 SIZE 7 MAXSIZE 100 MINSIZE 1 SYMBOL "circle" END END END # LAYER ##################################################################################################################### END # Map File
Voilà le fichier de test :
Code:
<?php $map_file = "test.map"; $map = ms_newMapObj($map_file); //$daLayer = $map->getLayerByName("departement_aplat"); $daLayer = $map->getLayerByName("Comm_pt"); $image = $map->draw(); $msPointDebug = ms_newPointObj(); $msPointDebug->setXY(600000,1900000); if($msPointDebug->draw($map,$daLayer,$image,0,"Point") != MS_SUCCESS) { echo "// Impossible de dessiner le point $i;\n"; } else { echo "fonction draw OK"; } $msPointDebug->free(); $image_url=$image->saveWebImage(); ?> <html> <head><title>point draw test</title> </head> <body> <img SRC="<?php echo $image_url?>" align="left"> </body> </html>
je suis en version PHP 5.5.12 et Mapserver 6.4.1 sur un serveur Ubuntu 14.
Dernière modification par Fanny12 (Mon 20 March 2017 18:05)
Hors ligne
#2 Mon 20 March 2017 18:14
- Fanny12
- Participant occasionnel
- Date d'inscription: 11 Jun 2014
- Messages: 16
Re: [mapserver] Erreur fonction draw de la classe ms_newPointObj()
Le fichier de log de Mapserver ne dit rien du tout.
De plus dans le fichier d'erreur de php, j'ai le message suivant, je ne sais pas s'il y a un lien avec mon problème.
AH01215: /usr/lib/cgi-bin/php-cgi: symbol lookup error: /usr/local/lib/libNCSEcw.so.0: undefined symbol: NCSFree
je ne comprends pas, car dans mon jeu de test je n'ai pas d'ECW !
Dernière modification par Fanny12 (Tue 21 March 2017 11:47)
Hors ligne
#3 Tue 21 March 2017 14:47
- nworr
- Participant actif
- Date d'inscription: 10 Apr 2014
- Messages: 77
Re: [mapserver] Erreur fonction draw de la classe ms_newPointObj()
Bonjour,
C'est un des problèmes de mapscript (php) ces messages d'erreurs sont peu explicites.
Le problème se trouve peut être au niveau de la construction du symbole : avec un autre type de symbole, est ce que le message est le même ? en ajoutant le symbole circle dans le style du layer departement_aplat , est ce que le script marche toujours ?
Ce n'est pas une solution mais ça peut peut-être aiguiller ...
Hors ligne
#4 Tue 21 March 2017 16:36
- Fanny12
- Participant occasionnel
- Date d'inscription: 11 Jun 2014
- Messages: 16
Re: [mapserver] Erreur fonction draw de la classe ms_newPointObj()
Bonjour,
j'ai modifié la définition du layer departement_aplat, en rajoutant symbol
Code:
LAYER NAME departement_aplat TYPE POLYGON STATUS ON TOLERANCEUNITS PIXELS TOLERANCE 10 DATA pays CLASS STYLE COLOR 196 225 177 SYMBOL 'circle' END END END
je ne sais pas si c'est la bonne syntaxe, cela me provoque également l'erreur. Donc l'idée que le problème vient de la définition des symboles est intéressante.
Voilà mon fichier symbol.sym
Code:
SYMBOLSET SYMBOL Name 'circle' Type ELLIPSE FILLED TRUE POINTS 1 1 END END SYMBOL Name 'triangle' Type VECTOR FILLED TRUE Points 0 4 2 0 4 4 0 4 END END SYMBOL Name 'square' Type VECTOR FILLED TRUE Points 0 0 1 0 1 1 0 1 0 0 END END SYMBOL NAME "line" TYPE ELLIPSE POINTS 1 1 END END SYMBOL NAME "diagleft" TYPE VECTOR POINTS 1 0 0 1 END END SYMBOL NAME "cross" TYPE VECTOR POINTS 3 0 0 3 END POINTS 1 15 1 15 END END END
J'ai essayé également en mettant le symbole triangle à mon layer Comm_pt, mais j'ai le même message d'erreur.
Dernière modification par Fanny12 (Tue 21 March 2017 16:40)
Hors ligne
#5 Thu 23 March 2017 11:23
- nworr
- Participant actif
- Date d'inscription: 10 Apr 2014
- Messages: 77
Re: [mapserver] Erreur fonction draw de la classe ms_newPointObj()
Normalement il faudrait ajouter une taille de symbole (SIZE 8) dans le style, mais je ne pense pas que la problème vienne de là.
La syntaxe semble correcte, il ne reste qu'à tester un symbol de type pixmap (chemin vers fichier image) ou truetype (caractère ).
Est ce que la carte s'affiche correctement, sans utiliser mapscript ? (en mode cgi )
Hors ligne
#6 Fri 24 March 2017 10:24
- Fanny12
- Participant occasionnel
- Date d'inscription: 11 Jun 2014
- Messages: 16
Re: [mapserver] Erreur fonction draw de la classe ms_newPointObj()
Bonjour,
J'ai rajouté SIZE 8 dans le style mais le problème est le même.
Ensuite, j'ai commenté le if($msPointDebug->draw($map,$daLayer,$image,0,"Point") != MS_SUCCESS) et la carte d'affiche correctement.
Par contre, si j'affiche la carte en mode cgi http://localhost/cgi-bin/mapserv?map=/var/www/test/map/test.map&mode=map une carte blanche s'affiche.
J'ai fait un autre test qui n'est peut-être d'aucun utilité, j'ai enlevé le &mode=map http://localhost/cgi-bin/mapserv?map=/var/www/test/map/test.map et là j'ai l'erreur 500. je me mets à douter du TEMPLATE "printable.html" de l'objet WEB. Où doit être stocké ce fichier ? Que doit-il contenir ? merci.
Hors ligne
#7 Fri 24 March 2017 11:02
- Fanny12
- Participant occasionnel
- Date d'inscription: 11 Jun 2014
- Messages: 16
Re: [mapserver] Erreur fonction draw de la classe ms_newPointObj()
Autre remarque, si j'affiche en mode cgi en mode map une couche après l'autre
Code:
http://localhost/cgi-bin/mapserv?map=/var/www/test/map/test.map&mode=map&layer=Comm_pt
et
Code:
http://localhost/cgi-bin/mapserv?map=/var/www/test/map/test.map&mode=map&layer=departement_aplat
les images s'affichent correctement. Il doit y avoir quelque chose qui cloche dans mon fichier map, non ?
Hors ligne
#8 Fri 24 March 2017 11:13
- nworr
- Participant actif
- Date d'inscription: 10 Apr 2014
- Messages: 77
Re: [mapserver] Erreur fonction draw de la classe ms_newPointObj()
C'est normal que l'image soit blanche vu que les statuts des layer sont à OFF, on les mettant à ON l'image devrait être la même que celle générer par mapscript.
Si je comprend bien la doc, quand on enlève mode=map on passe en mode 'browse' et le template devient nécessaire (il faut le créer et le composer soi même : exempl http://mapserver.org/mapfile/template.h … e-template). Mais en mode map ou mapscript , ce n'est pas grave si il n'est pas là.
Hors ligne
#9 Fri 24 March 2017 11:39
- Fanny12
- Participant occasionnel
- Date d'inscription: 11 Jun 2014
- Messages: 16
Re: [mapserver] Erreur fonction draw de la classe ms_newPointObj()
Non, depuis j'ai mis STATUS ON à chaque layer. je ne sais pas pourquoi la carte est blanche.
Ensuite, j'ai pris le template proposé dans ton lien. J'ai placé le fichier au même niveau que mon fichier map
Code:
WEB TEMPLATE "template.html" IMAGEPATH "/var/www/test/TMP/" # full path to image tmp dir, so cgi can find it IMAGEURL "../TMP/" # url location of image tmp dir, so web browser can find it MINSCALE 100 MAXSCALE 900000 END # Web Interface Options
Mais j'ai toujours une erreur 500 lorsque j'exécute en cgi en mode browse.
Dans le fichier d'erreur d'Apache, j'ai le message suivant :
[Fri Mar 24 11:28:29.131826 2017] [cgi:error] [pid 11232:tid 139720981997312] [client 10.9.3.21:50372] End of script output before headers: mapserv
Hors ligne
#10 Fri 24 March 2017 13:53
- nworr
- Participant actif
- Date d'inscription: 10 Apr 2014
- Messages: 77
Re: [mapserver] Erreur fonction draw de la classe ms_newPointObj()
Oui, il doit y avoir un soucis quelques part. il y a peut etre moyen d'en savoir plus avec les options LOG et DEBUG .
en testant éventuellement un fichier template simplifié
Code:
<!-- MapServer Template --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/transitional.dtd"> <html> <head> <title>MapServer Template Sample</title> </head> <body> MapServer Template Sample<br> [img] </body> </htm>
Hors ligne
#11 Fri 24 March 2017 15:03
- Fanny12
- Participant occasionnel
- Date d'inscription: 11 Jun 2014
- Messages: 16
Re: [mapserver] Erreur fonction draw de la classe ms_newPointObj()
Je viens de mettre ton fichier printable.html , malheureusement le problème est toujours le même.
Dans le fichier map, j'ai paramétré le fichier d'erreur mapserver et le debug
CONFIG "MS_ERRORFILE" "/tmp/ms_error.txt"
DEBUG 5
Dans le fichier mes_error.txt, j'ai les messages suivants :
[Fri Mar 24 14:52:33 2017].470825 CGI Request 1 on process 8281
[Fri Mar 24 14:52:33 2017].471438 msDrawMap(): rendering using outputformat named png (GD/PNG).
[Fri Mar 24 14:52:33 2017].471450 msDrawMap(): WMS/WFS set-up and query, 0.000s
[Fri Mar 24 14:52:33 2017].471470 msDrawMap(): Drawing Label Cache, 0.000s
[Fri Mar 24 14:52:33 2017].471473 msDrawMap() total time: 0.001s
[Fri Mar 24 14:52:33 2017].474196 msSaveImage(/var/www/test/TMP/test14903635538281.png) total time: 0.003s
[Fri Mar 24 14:52:33 2017].474264 mapserv request processing time (msLoadMap not incl.): 0.003s
[Fri Mar 24 14:52:33 2017].474271 msFreeMap(): freeing map at 0x1b11e20.
Rien qui me semble anormal. Peut-être dois-je changer le niveau de debug ?
Hors ligne
#12 Fri 24 March 2017 15:24
- Fanny12
- Participant occasionnel
- Date d'inscription: 11 Jun 2014
- Messages: 16
Re: [mapserver] Erreur fonction draw de la classe ms_newPointObj()
Si je remets la définition initiale de la couche departement_aplat ( j'enlève le SYMBOL 'circle'), je n'ai plus la carte blanche lors de l'affichage en cgi mode map, la couche s'affiche bien. Donc tout laisse à croire que mon problème vient de mon fichier de définition de symboles.
Je l'ai remplacé par un autre tiré d'une autre application qui fonctionne sur ce serveur. Le problème est toujours le même ... Je ne comprends vraiment plus rien.
Hors ligne
#13 Fri 24 March 2017 15:49
- Fanny12
- Participant occasionnel
- Date d'inscription: 11 Jun 2014
- Messages: 16
Re: [mapserver] Erreur fonction draw de la classe ms_newPointObj()
J'avance petit à petit. Dans le mapfile, j'ai mis le FONTSET entre guillements :
Code:
FONTSET "/var/www/test/font/fonts.list"
et du coup l'affichage cgi mode map pour la couche Comm_pt (avec symbole) fonctionne !!
je récapitule
Code:
http://localhost/cgi-bin/mapserv?map=/var/www/test/map/test.map&mode=map&layer=Comm_pt
l'image s'affiche correctement avec la couche
Code:
http://localhost/cgi-bin/mapserv?map=/var/www/test/map/test.map&mode=map&layer=departement_aplat
l'image s'affiche correctement avec la couche
Code:
http://localhost/cgi-bin/mapserv?map=/var/www/test/map/test.map&mode=map
l'image est blanche !
Code:
http://localhost/cgi-bin/mapserv?map=/var/www/test/map/test.map&mode=browse
500 internal Server Error !!
le fichier printable.html est celui fourni par nworr
Dernière modification par Fanny12 (Fri 24 March 2017 15:50)
Hors ligne
#14 Fri 24 March 2017 18:08
- Fanny12
- Participant occasionnel
- Date d'inscription: 11 Jun 2014
- Messages: 16
Re: [mapserver] Erreur fonction draw de la classe ms_newPointObj()
Vu que le message d'erreur
End of script output before headers: php-cgi
est dans le fichier d'erreur d'Apache, est-ce que je n'aurais pas un problème de configuration d'Apache pour faire fonctionner mapscript en mode cgi ?
Bon week-end !
Hors ligne
#15 Mon 27 March 2017 15:45
- nworr
- Participant actif
- Date d'inscription: 10 Apr 2014
- Messages: 77
Re: [mapserver] Erreur fonction draw de la classe ms_newPointObj()
J'aurai tendance à penser que le probleme vient plus de mapserver que d'apache.
Le "End of script output before headers: php-cgi" sous-entend juste que mapserv ne s'est pas terminé correctement .
Il est possible (je crois) de lancer la même requête en ligne de commande pour voir si ça passe mieux
Code:
mapserv "QUERY_STRING=map=/var/www/test/map/test.map&mode=map"
Hors ligne
#16 Fri 07 April 2017 17:32
- Fanny12
- Participant occasionnel
- Date d'inscription: 11 Jun 2014
- Messages: 16
Re: [mapserver] Erreur fonction draw de la classe ms_newPointObj()
Bonjour,
Je ne sais pas si c'est parce que c'est vendredi soir et que j'ai besoin de partir en week-end, mais je ne peux pas exécuter mapserv en ligne de commande !
Mapserver est installé dans le répertoire /usr/lib/cgi-bin/, le fichier mapserv est présent, mais la commande indiquée ci-dessus ou bien mapserv -v ne fonctionnent pas.
Le message suivant apparaît
The program 'mapserv' is currently not installed. You can install it by typing:
sudo apt-get install mapserver-bin
ou bien
sudo: mapserv: command not found
en tant que root
Dois-je comprendre que cgi-mapserver a été installé mais pas mapserver-bin ?
L'un n'a pas forcément besoin de l'autre pour fonctionner ?
Dernière modification par Fanny12 (Fri 07 April 2017 17:40)
Hors ligne
Pages: 1
- Sujet précédent - [mapserver] Erreur fonction draw de la classe ms_newPointObj() - Sujet suivant