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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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"

via http://mapserver.org/cgi/mapserv.html

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

 

Pied de page des forums

Powered by FluxBB