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

 

Pied de page des forums

Powered by FluxBB