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

#1 Mon 04 May 2009 20:10

marie-aude
Participant occasionnel
Date d'inscription: 21 Apr 2009
Messages: 23

zone objet polygone

Bonsoir,

J'ai vu qu'on pouvait créer des objets de type polygone avec GC (6.5). Est-il possible de créer des zones avec??

Je m'explique: je voudrais par exemple définir une zone qui représentera un lieu-dit qu'une personne pourra venir ajouter sur la carte mais en passant par une fenêtre que je crée en c++ avec le kit. Le soucis c'est que je ne sais pas comment faire.

Dans un autre topic saispasfau (membre de la communauté) m'a expliqué comment faire une saisie de points et les relier ensuite mais je n'arrive pas à appliquer ça à mon application "lieu dit"... si toutefois c'est comme ça qu'il faudrait faire...

Si quelqu'un a une solution, je suis preneuse...

Merci d'avance et bonne soirée

MA

Hors ligne

 

#2 Tue 05 May 2009 14:10

saispasfau
Participant actif
Date d'inscription: 28 Nov 2006
Messages: 62

Re: zone objet polygone

Salut.

J'avoue ne pas bien saisir les bases de ton module.

L'utilisateur sélectionne des objets qui vont former la zone ?
Le module sélectionne les objets qui formeront la zone en fonction de la valeur d'un champ ?

Bref, quelles actions effectue l'utilisateur en amont pour identifier la base de ta zone ?

A+
Saispasfau.

Hors ligne

 

#3 Tue 05 May 2009 14:26

marie-aude
Participant occasionnel
Date d'inscription: 21 Apr 2009
Messages: 23

Re: zone objet polygone

Bonjour,

En fait je voudrais qu'un utilisateur puisse définir une zone juste en cliquant sur un bouton de mon ihm.

En gros s'il souhaite modifier son village en y incluant un lieu dit, j'aimerais qu'il puisse cliquer sur un bouton de mon IHM qui lui permette de saisir une série de points qui formeront les sommets d'une zone fermée.

Je pense que dans le principe c'est comme si je voulais délimiter une département en cliquant sur différents pts (entre lesques je trace un segment). Après je voudrais que pouvoir ajouter certaines infos mais j'ai une petite idée pour ça.

Donc pour répondre clairement aux questions de Saispasfau:
L'utilisateur ne selectionne pas des objets mais clique sur les points qui limites la zones. Ensuite je voudrais fermée cette zone et calculer sa superficie entre autre...

Voilà.

Merci à plus tard.

MA

Hors ligne

 

#4 Tue 05 May 2009 15:04

saispasfau
Participant actif
Date d'inscription: 28 Nov 2006
Messages: 62

Re: zone objet polygone

Donc,

Lorsque l'utilisateur ouvre ton interface, il faut qu'il ait un bouton "définir les sommets de la zone à créer".
Lorsqu'il clique dessus, il peut alors cliquer sur la carte pour ajouter un sommet dans une liste. Cette liste serait visible dans ta fenêtre, avec les coordonnées (X,Y).
Lorsque l'utilisateur a fini d'ajouter des points, cette liste te permet de générer la géométrie de la zone à créer.

Pour pouvoir gérer le clic sur la carte afin de récupérer les coordonnées, je passerai par un mode de souris :

Code:

LONG XgoAddMouseMode(XGOMOUSEMODEPROC ModeMouseProc, LONG lFlags);

Lors du clic sur le bouton "définir les sommets de la zone à créer", il faut sauvegarder le mode de souris courant, activer ton mode de souris.
Quand la saisie de points est terminée, il faut rester l'ancien mode de souris.

Pour représenter la saisie de la zone, le plus simple serait de créer en temps réel la zone (dès qu'il y a 3 points). Ainsi ton utilisateur voit  la zone se construire, et tu peux en récupérer la surface et le périmètre (via les champs BuiltIn de GeoConcept).

Sinon, il faut dessiner dans le DeviceContext de la fenêtre, en faisant la conversion entre les coordonnées de la carte, et les coordonnées pixel. Moins simple.

Attention également si l'utilisateur doit se déplacer dans la carte alors qu'il crée la zone. Il ne faut pas perdre ton contexte.


Bon courage.
Saispasfau.

Hors ligne

 

#5 Tue 05 May 2009 15:25

marie-aude
Participant occasionnel
Date d'inscription: 21 Apr 2009
Messages: 23

Re: zone objet polygone

MErci Saispasfau,

Pour les coordonnées à récupérer je savais faire (pour le changement de souris il y a l'addon dans les exemples du kit et je m'appuie déjà dessus).

Pour la suite c'est moins claire. Quand j'ai trois point je peux les relier par des segments.
Lorsque que le nombre de pts augmentera je modifierai les liaisons mais ce que je ne comprends pas c'est les builtIn. J
'ai déjà regardé (pour un autre topic et sur tes conseils) mais je n'ai pas réussi (du coup j'avais fait fonctionné avec une autre technique à toi).
En l'occurence là il faut passer par les builtIn mais comment.

J'ai encore du mal à comprendre le kit mais ça vient quand même (en attendant je vous remercie pour votre patience lol).

Encore une petite question. Comment je peux faire après pour savoir si un objet appartient ou non à cette zone?

Par exemple si je rajoute un chateau d'eau dans mon lieu dit je voudrais ajouter dans mon code des infos sur l'objet uniquement s'il appartient à la zone du lieu dit.

Et en ce qui concerne la zone elle même, c'est bien un objet polygone que je dois créer (bien que les sommets sont des points)??


Merci encore

MA

Hors ligne

 

#6 Tue 05 May 2009 16:27

saispasfau
Participant actif
Date d'inscription: 28 Nov 2006
Messages: 62

Re: zone objet polygone

Concernant la géométrie :

Pour qu'un polygone apparaisse en tant que tel, il faut au moins 3 points (le triangle est le premier type d'objets polygone).
Le but est le suivant : si ton utilisateur ajoute un point (ou en supprime un, à prévoir également) à sa liste, tu reprends la liste de points pour l'appliquer en tant que géométrie à ton objet Zone.
Les fonctions à utiliser sont celles commençant par XgoGeom_

Pour les BuiltIn, ils ne te serviront qu'à récupérer certains champs de ta zone. Tu ne vas pas t'en servir pour définir la géométrie.
Pour accéder aux champs BuiltIn, il faut :
1. Déclarer une variable de type XGOBIFIELDS
2. Appeler la fonction XgoGetBuiltInFields afin de remplir la strcuture
3. Récupérer les valeurs des propriétés

Je viens de voir que la surface et la longueur ne sont pas dans les BuiltIn.

Il faut alors passer par l'autre méthode pour accéder à ces champs :
1. Déclarer une variable de type XGOHFIELD
2. Remplir cette variable avec la méthode XgoFields_Get (récupère un pointeur vers les champs de l'objet)
3. Accéder aux valeurs des champs via la méthode XgoFields_GetNumericValue (pour les champs numériques)
Les identifiants des champs Surface et Longueur sont respectivement XGOBIFIELD_SURFACE et XGOBIFIELD_LENGTH.


Enfin, pour savoir quels sont les objets présents dans ta zone il faut faire une requête topologique.
Alors là, plusieurs options :
1. Créer une requête (avec les fonctions XgoQuery_...) comme tu le ferais avec "Données/Chercher" en pseudo-SQL, en sélectionnant déjà ta zone, puis en créant la requête pour rechercher les objets quelconque intersectant ta zone, et parcourir la liste de sélection résultant de la requête pour accéder à chaque objet
2. Utiliser la fonction XgoTopo_PolygonListIntersection, en mettant dans une liste ta zone. Cette fonction implique que tu ne recherches que des objets dans un type / sous-type particulier
3. Utiliser la fonction XgoGetObjectsInPoly, en transformant la géométrie de ta zone en tableau de points XGOPOINT. tu récupères alors une liste d'objets inclus dans la forme de ta zone

A voir si tu fais cette recherche juste après avoir créé ta zone, ou si c'est à la création d'un objet (quand tu crées un objet château d'eau par exemple).

J'espère ne pas trop embrouiller. Mais tu attaques des problématiques pas forcément simples à gérer.

A+
Saispasfau.

PS : l'objet Zone à créer est bien un objet polygone.

Hors ligne

 

#7 Tue 05 May 2009 17:10

marie-aude
Participant occasionnel
Date d'inscription: 21 Apr 2009
Messages: 23

Re: zone objet polygone

Merci,

Je vais tester ça le plus rapidement possible et je renvoie un post après...

Bonne soirée.
MA

Hors ligne

 

#8 Mon 11 May 2009 14:19

marie-aude
Participant occasionnel
Date d'inscription: 21 Apr 2009
Messages: 23

Re: zone objet polygone

Salut tout le monde,

Bon voilà j'ai enfin eu l'occasion de tester la création de mon lieu dit. J'ai un soucis: je crée bien une zone mais pas la bonne. En fait je n'arrive pas à reboucler sur mon premier point.

Ce que je fais c'est que je crée des points. Dès que j'en ai trois je fais une géométrie de type polygone à laquelle j'ajoute mes trois points (avec le fonction XgoGeom_AddPoint(...)). Le soucis c'est qu'une zone se crée en passant par mes trois points mais elle ne se referme pas sur le premier.

Je me suis dit qu'il fallait que je rajoute un autre point (un 4eme): le tout premier. Ca ne règle pas le problème.

Je pense que ça peut venir de l'index de la fonction XgoGeom_AddPoint (le 2eme argument). Je dis ça par intuition puisque je ne vois pas très bien à quoi il correspond.

Quelqu'un saurait-il m'aider??

Sinon c'est bien une zone que je définie....c'est juste que ce n'est pas la bonne.


Merci d'avance.

MA.

Hors ligne

 

#9 Wed 13 May 2009 10:42

saispasfau
Participant actif
Date d'inscription: 28 Nov 2006
Messages: 62

Re: zone objet polygone

Bonjour.

Le second paramètre de la fonction XgoGeom_AddPoint indique la partie de géométrie dans laquelle doit être ajouté le point.
En effet, une géométrie peut être composée de différentes parties. Chaque partie permet de définir une surface ou un trou dans un objet.

Par exemple, pour un polygone à trou, on a une première partie (index 0) qui représente la surface et une seconde (index 1) qui définit le trou.
Pour un polygone avec îles, on a une première partie (index 0) qui représente la première île et une seconde (index 1) qui définit la seconde île.

Dans ton cas, je ne pense pas que tu aies de trou à gérer. Donc ta géométrie ne comprendra qu'une partie (index 0).

Normalement, pour une géométrie de genre polygone, il n'y a pas besoin de rajouter le premier point pour que la géométrie boucle.

A+
Saispasfau

Hors ligne

 

#10 Fri 15 May 2009 16:03

marie-aude
Participant occasionnel
Date d'inscription: 21 Apr 2009
Messages: 23

Re: zone objet polygone

Ok,

Merci beaucoup, ça fonctionne...


A bientôt
MA

Hors ligne

 

Pied de page des forums

Powered by FluxBB