Bienvenue! Inscrivez-vous et rejoignez notre communauté :)
  • Login:

Bienvenue sur Forum SIG - Systèmes d'Information Géographique et Géomatique.

Bienvenue sur le forumSIG. S'il s'agit de votre première visite, assurez vous de faire une recherche préalable dans les FAQ SIG. Vous devez vous inscrire avant de pouvoir poster.

Affichage des résultats 1 à 15 sur 15
  1. #1

    Date d'inscription
    février 2005
    Messages
    14

    Par défaut Non Résolu : [MapServer] Problème sur interrogation de données via OGR/table Mapinfo

    Bonsoir,

    EN résumé, j'ai un mapserveur qui tourne avec un mapfile dont les tables sont des mapinfo appelés via OGR.

    J'essaye d'utiliser la fonction queryByPoint pour récupérer le polygone de ma layer sur lequel j'ai cliqué dans la carte et ... ca ne fonctionne pas

    Jai toujours l'erreur:

    Warning: [MapServer Error]: msQueryByPoint(): No matching record(s) found.

    J'aimerais savoir si quelqu'un a déjà utilisé cette fonction et a réussi à la faire fonctionner. J'ai fait le tour sur les moteurs de recherche et beaucoup de personnes ont cette erreur qui est soit réellement 0 occurrence trouvé soit une erreur dans les paramètres passés.

    Dans l'attente de vos réponses

    cdlt,

    Patrick.
    Développeur Internet/Mobile(wap)/SIG

  2. #2
    Admin' Annuaire
    Date d'inscription
    septembre 2004
    Localisation
    Toulouse
    Emploi
    Ingé. Cartographe / Enseignant
    Organisme
    Université de Toulouse-Le Mirail
    Âge
    42
    Messages
    3 891

    Par défaut

    Je n'ai pas testé personellement cette fonction, mais j'ai retrouvé la page d'acceuil de la liste mapserver-users qui propose une fonction de recherche, et on y trouve des infos comme celle-ci :

    http://mapserver.gis.umn.edu/data2/w.../msg00002.html

  3. #3

    Date d'inscription
    février 2005
    Messages
    14

    Par défaut

    T'es toujours le meilleur :-)

    Dans ton lien j'ai trouvé ma réponse. EN fait, la fonction queryByPoint($my_point,MS_SINGLE,-3) ne fonctionne SSI $mypoint est un objet point qui a été créé avec les coordonnées georéférencées et non les corrdonnées pixel de l'image. C'est ce qu'il disait dans la doc mais pas facile à faire sutrout que dans la pluaprt des exemples qu'on trouve sur le net ils sont pixelisés ou non précisés. Donc pour ceux cela intéresse voici le petit bout de code qui va bien:

    Imaginons qu'on veut récupérér le polygone sur lequel le user a cliquer et qui est dans une layer définit nommé 'DEPTARTEMENT'. On créé un point à l'endroit ou le user a cliqué puis on regarde si ce point appartient à un des polygones de la layer 'DEPTARTEMENT'.

    $searchlayer = $map->getLayerByName('DEPTARTEMENT');

    le point cliqué sur l'image de la carte est: A($searchpt_x,$searchpt_y)

    Modification du point en coordonnées géographiques:
    $mapext = $map->extent;
    $w = $map->width;
    $h = $map->height;
    $georef_x = $mapext->minx + ($searchpt_x/$w)*($mapext->maxx-$mapext->minx);
    $georef_y = $mapext->maxy - ($searchpt_y/$h)*($mapext->maxy-$mapext->miny);

    donc A($searchpt_x,$searchpt_y) => devient A($georef_x,$georef_y)

    $map->prepareQuery();

    $my_point = ms_newpointObj();
    $my_point->setXY($georef_x,$georef_y); //definition du point sur la carte

    if( @$searchlayer->queryByPoint ($my_point,MS_SINGLE,-8) == MS_SUCCESS) {
    print "c que ça a fonctionné";
    //nombre d'occurence sur la layer recherchée:
    print $searchlayer->getNumResults();
    }
    else {
    print "ça a planté ou le resultat est null i.e rien trouvé."
    }

    ************************************************** *****************
    On peut imaginer chercher sur toutes les layers dans ce cas il faut changer MS_SINGLE en MS_MUTLIPLE et faire une boucle sur le resultat de la recherche de la forme:

    for ($j=0; $j<$searchlayer->getNumResults(); $j++) {
    $result = $searchlayer->getResult($j);
    printf("lay=%d, res=%d, si=%d, ti=%d, ci=%d\n",
    $i, $j, $result->shapeindex, $result->tileindex,
    $result->classindex);
    }
    ************************************************** ******************
    .. bon je me penche sur la recolte des données maintenant.

    Merci encore.

    EDIT ADMIN - Attention où vous postez sujet déplacé.
    Dernière modification par Le Docteur ; 10/03/2005 à 20h44.
    Développeur Internet/Mobile(wap)/SIG

  4. #4

    Par défaut

    Salut,
    Je cherche à avoir des infos lors d'un clic souris sur une carte.
    Je sais comment récupérer les données avec la méthode getShape de la classe Layer.

    Mon problème c'est d'avoir la correspondance entre mon point et l'information contenue dans une table.
    Je m'explique : J'ai les coordonnées géo de mon point, mais je ne sais pas comment récupérer le paramètre tileindex de getShape .
    getShape(int tileindex, int shapeindex)

    Avez vous des idées ?
    Merci
    Dernière modification par L.Jégou ; 23/05/2005 à 14h48.

  5. #5
    Admin' Annuaire
    Date d'inscription
    septembre 2004
    Localisation
    Toulouse
    Emploi
    Ingé. Cartographe / Enseignant
    Organisme
    Université de Toulouse-Le Mirail
    Âge
    42
    Messages
    3 891

    Par défaut

    Si je comprend bien, l'objectif est de récupérer une donnée attributaire d'une couche shape. La réponse me semble être détaillée dans le post ci-dessus.

    Peux-tu être plus précis ?

  6. #6

    Par défaut

    Dans le post ci dessous, l'utilisation de queryByPoint() nous renseigne sur le fait que le point appartient à un layer ou pas.
    Ensuite, je n'ai pas trés bien saisi l'utilité des méthodes getNumResults() et de getResult(). En gros, j'ai pas capté la deuxiéme partie du Post

    *************************************************
    for ($j=0; $j<$searchlayer->getNumResults(); $j++) {
    $result = $searchlayer->getResult($j);
    printf("lay=%d, res=%d, si=%d, ti=%d, ci=%d\n",
    $i, $j, $result->shapeindex, $result->tileindex,
    $result->classindex);
    ***********************************************

    Je veux avoir l'information sur un plygone de la couche, et non sur toute la couche.
    Dernière modification par mkiman ; 23/05/2005 à 15h05.

  7. #7
    Admin' Annuaire
    Date d'inscription
    septembre 2004
    Localisation
    Toulouse
    Emploi
    Ingé. Cartographe / Enseignant
    Organisme
    Université de Toulouse-Le Mirail
    Âge
    42
    Messages
    3 891

    Par défaut

    C'est une boucle qui va passer en revue chaque layer affiché et pour chacun récupérer les résultats de la requête queryByPoint : nom, numéro, shapeIndex, tileIndex et classIndex.

    Ce code est utile lorsque l'on a plusieurs layers à interroger.

  8. #8

    Par défaut

    J'avais compris pour la boucle
    Mais si ce test if( @$searchlayer->queryByPoint ($my_point,MS_SINGLE,-8) == MS_SUCCESS) echoue, la boucle d'après ne marche pas car getNumResults() ne va rien donner

    Ce qu'il me faut c'est l'information à l'endroit même du clique (sur le polygone, ou sur une polyligne etc...) et non sur toute la couche

    Une autre question :
    J'ai cette erreur Warning: [MapServer Error]: msQueryByPoint(): No matching record(s) found et je pense que j'ai un problème avec mon mapfile, dans la partie layer.

    Pour rendre une carte "requetable", que dois je ajouter à mon mapfile ?

    Code:
    LAYER
    	CONNECTIONTYPE OGR
    	CONNECTION "data/Contours_de_communes.TAB"
    	
    	NAME "Contours de communes"
    	TYPE POLYGON
    	STATUS ON
    	#STYLEITEM "AUTO"	
    	CLASS
    	NAME "Contours de communes"
    	
    	STYLE
    	#COLOR 255 255 255  
    	OUTLINECOLOR 0 0 0
    	BACKGROUNDCOLOR 255 0 255
    END
    	END
    END
    Dernière modification par mkiman ; 23/05/2005 à 15h17.

  9. #9
    Modérateur
    Date d'inscription
    janvier 2005
    Localisation
    Longwy
    Emploi
    Géomaticien
    Organisme
    Agence d'urbanisme lorraine nord
    Âge
    55
    Messages
    540

    Par défaut

    Bonjour,


    il me semble que tu dois mettre
    TEMPLATE "ttt"

    en dessous de ta ligne NAME

    Amicales salutations

    Olivier

  10. #10
    Admin' Annuaire
    Date d'inscription
    septembre 2004
    Localisation
    Toulouse
    Emploi
    Ingé. Cartographe / Enseignant
    Organisme
    Université de Toulouse-Le Mirail
    Âge
    42
    Messages
    3 891

    Par défaut

    Bon alors c'est vraiment pas clair, on a du mapscript, puis un mapfile...

    Comme le dit odurr, pour que les layers d'un mapfile soient queryables, il faut qu'ils possèdent un paramètre TEMPLATE = "ttt.html".

  11. #11

    Par défaut

    Merci de vos réponses
    Je tente de faire fonctionner mon interface, et comme la doc sur le site du mapserver n'est pas super claire...

    Citation Envoyé par ljegou
    C'est une boucle qui va passer en revue chaque layer affiché et pour chacun récupérer les résultats de la requête queryByPoint : nom, numéro, shapeIndex, tileIndex et classIndex.

    Ce code est utile lorsque l'on a plusieurs layers à interroger.
    Je viens de faire les tests et je pensais que le tileIndex récupéré après l'utilisation de queryByPoint allait me servir pour la méthode getShape(int tileindex, int shapeindex)
    Dernière modification par Le Docteur ; 23/05/2005 à 16h14.

  12. #12
    Admin' Annuaire
    Date d'inscription
    septembre 2004
    Localisation
    Toulouse
    Emploi
    Ingé. Cartographe / Enseignant
    Organisme
    Université de Toulouse-Le Mirail
    Âge
    42
    Messages
    3 891

    Par défaut

    Oui mais l'objectif final c'est quoi ? Récupérer un shapeObj ? Parceque tileindex n'est utile que lorsque le fond shape est tuilé.

  13. #13

    Par défaut

    Désolé si je suis confus.
    L'objectif final c'est de récupérer la donnée sur la table MapInfo.
    Par exemple on a une carte de communes. on clique sur une de ces communes et on affiche son nom.
    Le nom des communes est stocké sur une table mapInfo (fichier .tab), c'est pour cette raison que je dois utiliser la méthode getShape(int tileindex, int shapeindex).

    Donc, l'objectif finale c'est d'avoir un shapeObj, sinon je ne vois pas comment avoir les données attributaires.

    Que veux tu dire par "fond shape tuilé"
    Dernière modification par mkiman ; 23/05/2005 à 16h10.

  14. #14
    Admin' Annuaire
    Date d'inscription
    septembre 2004
    Localisation
    Toulouse
    Emploi
    Ingé. Cartographe / Enseignant
    Organisme
    Université de Toulouse-Le Mirail
    Âge
    42
    Messages
    3 891

    Par défaut

    Le tuilage c'est l'opération d'assemblage de fonds par juxtaposition, un peu comme les tuiles d'un toit côte à côte. Donc là je pense que tileIndex ne te sera pas utile, met le à -1, et recherche avec shapeIndex.

  15. #15

    Par défaut

    Je disais n'importe quoi, c'est avec shapeindex, qu'il faut travailler
    Merci de ton aide ljegou, je vous tiens au courant de la suite des opérations

 

 

Discussions similaires

  1. [MapServer+OpenLayers] Interrogation couche WFS
    Par tiolebucheron dans le forum Assistance et Programmation
    Réponses: 4
    Dernier message: 07/09/2009, 20h02
  2. [Methodologie] Interrogation des bases de données spatiales
    Par ali_red dans le forum Théorie des SIG - Géomatique
    Réponses: 2
    Dernier message: 14/12/2008, 18h03
  3. [MapServer] Interrogation de la valeur d'un pixel sur MapServer
    Par cernox dans le forum Assistance et Programmation
    Réponses: 2
    Dernier message: 04/09/2006, 12h53
  4. [MapServer] Interrogation des données (.shp)
    Par gogolak dans le forum Assistance et Programmation
    Réponses: 15
    Dernier message: 30/03/2005, 16h52
  5. [MapServer] Interrogation de données
    Par adasea dans le forum Assistance et Programmation
    Réponses: 4
    Dernier message: 26/11/2004, 13h10

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •