#1 Wed 27 October 2010 19:55
- thomas.milon
- Participant occasionnel
- Date d'inscription: 9 Mar 2008
- Messages: 13
[MapServer] Récuperer les valeurs d'un attribut d'un shp
Bonjour à tous
Je cherche à savoir s'il est possible de récupérer les valeurs d'un attribut d'une couche pour un extent donné grâce à un Mapscript sous PHP Mapserver (en utilisant itemNquery par exemple)? Et ceci sans passer par une base de données.
Par exemple, voici un exemple des attribut de ma couche zonage.shp :
ID ZONE Geometry
1 AT ...
2 VTR ...
3 KM ...
4 ZED ...
...
Il faut considerer que je ne connais pas les valeurs de ZONE (AT, VTR,...), car je veux faire une procédure qui me permet de réaliser ceci sur n'importe quel shp. Par contre, je sais qu'il y a un identifiant ID (1,2,3,...).
Je cherche à faire une requête géographique me permettant de connaitre la liste des ZONE qui font parties de la zone d'intérêt.
par exemple avoir un $selection avec les valeurs [AT;KM].
Il n'y a pas de clic sur la carte ou quoi que ce soit. Je lance mon script et défini la couche, l'extent, et les données nécessaires en entrée.
J'ai essayé de faire du ITEMNQUERY avec qitem=ID et qstring=1 et l'extent souhaité, j'arrive à récupérer la valeur de [ZONE] (AT).
Mais je récupère ça de manière unitaire dans un template à part, ce qui rend difficile de faire des itérations.
De plus, la requête est très longue...
Quelqu'un aurait une (autre/bonne) idée?
Thomas
Hors ligne
#2 Thu 28 October 2010 09:19
Re: [MapServer] Récuperer les valeurs d'un attribut d'un shp
Bonjour,
Tu charges le mapfile dans lequel il y a une couche zonage dont les données pointes vers les données zonage.shp. Tu charges cette couche. Tu peux faire une boucle sur les features avec getFeature() pour récupérer les features. Tu as aussi getItems() qui pourrait te servir mais la description est trop flou.
Si tu utilises $shape = $layer->getFeature() tu peux utiliser la méthode $shape->values["ZONE"];
Voilà grosso modo.
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 28 October 2010 11:30
- thomas.milon
- Participant occasionnel
- Date d'inscription: 9 Mar 2008
- Messages: 13
Re: [MapServer] Récuperer les valeurs d'un attribut d'un shp
Merci Yves.
Test en cours...
Dernière modification par thomas.milon (Thu 28 October 2010 11:31)
Hors ligne
#4 Thu 28 October 2010 11:50
- thomas.milon
- Participant occasionnel
- Date d'inscription: 9 Mar 2008
- Messages: 13
Re: [MapServer] Récuperer les valeurs d'un attribut d'un shp
La fonction getfeature pourrait bien être utile en effet. Mais il faut définir un ShapeIndex -> à quoi cela correspond? Est-ce un index automatique généré par mapServer?
Je crée mes objet $map, $layer,... grâce à mon mapscript. Je le charge (draw) et le sauve.
Après quoi, j'ai testé de rentrer :
$layer->open
$shape = $layer->getFeature();
$shape->values["ZONE"];
echo $layer;
Mais il m'envoie un Warning : Wrong parameter count for ms_layer_obj::getfeature()
alors je teste en ajoutant un paramètre
$shape = $layer->getFeature(1);
ou $shape = $layer->getFeature("1");
ou $shape = $layer->getFeature("ZONE");
ou $shape = $layer->getFeature("NomDuShape");
Bien sûr, il aime pas et me balance une erreur posgis (msPOSTGISLayerGetShape(): msPOSTGISLayerGetShape called on unopened layer (layerinfo = NULL)) ?????
NB : pour définir l'extent, je fais une requête sur une base posgis . Sans le getfeature, la requête passe sans problème.
Hors ligne
#5 Fri 05 November 2010 09:39
- thomas.milon
- Participant occasionnel
- Date d'inscription: 9 Mar 2008
- Messages: 13
Re: [MapServer] Récuperer les valeurs d'un attribut d'un shp
Finalement, j'ai entré les shp sous posgis et utilisé du SQL.
Hors ligne