#1 Fri 22 July 2011 15:22
- Loic-MPM
- Juste Inscrit !
- Date d'inscription: 22 Jul 2011
- Messages: 1
[MapServer/MySQL] probleme queryByPoint
Bonjour,
Je suis stagiaire et je débute en SIG.
J'utilise MapServer 5.6.6 en mode CGI et j'ai ajouté une couche de point MySQL que j'ai crée manuellement pour des tests.
Voici la table en question
X(decimal) Y(decimal) type(char) incr(decimal)
849000 104000 3 0
840000 110000 3 1
853000 101000 3 2
846000 105000 2 3
845000 102000 1 4
852000 109000 1 5
847000 107000 3 6
853000 99000 2 7
La couche est définie dans le mapfile comme ceci
Code:
LAYER NAME 'couche_bdd' STATUS OFF METADATA qstring_validation_pattern '^[1-9]$' 'ows_title' 'couche_bdd' END TEMPLATE './query/couche_bdd_query.html' TOLERANCE 10 TOLERANCEUNITS PIXELS TYPE POINT DUMP TRUE CONNECTIONTYPE OGR CONNECTION './couches/test_mysql.ovf' CLASSITEM 'type' LABELITEM 'type' CLASS NAME "type1" EXPRESSION ('[type]' eq '1') STYLE SYMBOL 'circle' SIZE 10 COLOR 0 0 255 END END CLASS NAME "type2" EXPRESSION ('[type]' eq '2') STYLE SYMBOL 'circle' SIZE 10 COLOR 0 255 0 END END CLASS NAME "type3" EXPRESSION ('[type]' eq '3') STYLE SYMBOL 'circle' SIZE 10 COLOR 0 0 0 END END END
où le fichier test_mysql.ovf est :
Code:
<OGRVRTDataSource> <OGRVRTLayer name="couche_bdd"> <SrcDataSource>MYSQL:couche_bdd,user=root,password=mapservertest,host=localhost,port=3306,tables=test_mysql</SrcDataSource> <SrcSQL>SELECT * FROM test_mysql</SrcSQL> <GeometryType>wkbPoint</GeometryType> <GeometryField encoding="PointFromColumns" x="X" y="Y"/> </OGRVRTLayer> </OGRVRTDataSource>
Mon problème est que lorsque j'effectue une requête spatiale, c'est toujours le même point qui m'est retrouné, à savoir le premier de la table. Si je change
<SrcSQL>SELECT * FROM test_mysql</SrcSQL>
par
Code:
<SrcSQL>SELECT * FROM test_mysql by order incr desc</SrcSQL>
c'est le dernier point qui m'est systématiquement retourné.
Les points sont tous affichés, MapServer a apparemment accès à toute la table. Lorsque je fait une requête par item, il me retourne tous les bons résultats, le seul problème est lors de la requête par point.
J'ai donc tenté de comprendre ce qui se passait avec en passant pas PHP MapScript.
Le problème est au niveau
Code:
... $A=$layer->queryByPoint($q_point, MS_MULTIPLE, -1); $numresult = $layer->getNumResults(); for ($i=0;$i<=$numresult-1;$i++) { $result = $layer->getResult($i); if ($A == MS_SUCCESS) { $shape =$layer->getShape($result->tileindex, $result->shapeindex); } }
Avec une autre couche de point shapefile tout va bien. Ici, $result->shapeindex est toujours égal à 0. Même quand je le modifie manuellement, aucun résultat ne m'est retourné. C'est comme si la couche était vide, alors que tout les points sont affichés !
J'ai trouvé des sujets semblables sur divers forum, mais il n'y avait pas de réponses ou alors on conseillait de laisser tomber MySQL Oo.
Je sais que ce post http://georezo.net/forum/viewtopic.php?id=72786 est semblable mais mon problème se trouve avant, puisque $result->shapeindex reste nul.
Merci d'avance de votre aide.
Loïc M.
Hors ligne