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 FileVoilà 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
ENDje 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
ENDJ'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 OptionsMais 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


