Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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 Mon 17 December 2001 20:57

DORNE Remi
Invité

détecter les polygones troues

bonjour a tous

je cherche a identifier les polygones troues (donc composes de 2
polygones) au milieu d'objets composes de plusieurs polygones (eux conitigus
ou independants)

merci

remi dorne
Service Analyse Spatiale
Region PACA

 

#2 Mon 17 December 2001 21:00

Christophe Barbier
Invité

Re: détecter les polygones troues

Pour trouver uniquement les objets troues, je crains qu'il n'y ait plus que
le MapBasic pour vous tirer d'affaire.
Par exemple, en recherchant les objets dont leur aire globale est inferieure
a la somme des aires des polygones qui les compose...

Christophe Barbier, I²G
christophe.barbier@texte-a-enlever.i2g.fr

 

#3 Mon 17 December 2001 21:00

Christophe Barbier
Invité

Re: détecter les polygones troues

Bonjour,
Voici une methode qui devrait fonctionner:

1- Faites une selection sur votre table en creant une nouvelle colonne qui contiendra le nombre de polygone de chaque objet.
(grace a la fonction ObjectInfo et l'argument 21 qui renseigne le nombre de polygones)

syntaxe SQL : Select Str(Objectinfo (batis.obj, 21 ) ) nbregion from batis into sel_batis

Remarque: J'utilise la fonction Str pour forcer le type de la nouvelle colonne en Caractere , sinon ca marche pas (???)

2- Ensuite, il suffit de faire une seconde selection sur cette colonne pour connaitre les objets qui ont plus d'un polygone

syntaxe SQL : Select * from sel_batis where Val(nbregion) > 1 into batis_complexes

Une autre methode tres similaire consisterait a creer une nouvelle colonne de type Entier court dans votre table et d'utiliser ensuite la fonction Table --> Mettre a jour colonne pour mettre a jour la nouvelle colonne avec l'expression ObjectInfo(Obj, 21)
L'avantage de cette 2ieme methode est que votre nouveau champ est directement de l'Entier.

Christophe Barbier, I²G
christophe.barbier@texte-a-enlever.i2g.fr

 

#4 Mon 17 December 2001 21:01

Jacques Paris
Invité

Re: détecter les polygones troues

Cette methode ne fonctonnerait que dans les cas les plus simples, et encore
seulement sur une table qui ne contiendrait que des regions simples d'un
polygone ou simples trouees (un polygone entierment a l'interieur d'un
autre). Or cette vue est tres limitative de toutes les possiblites.

La valeur fournie pas ObjectInfo(obj,21) ne fait que donner le nombre de
polygones dans la region obj. Si = 2, cela peut vouloir dire que la region
est formee de 2 elements non contigus OU d'une region unique trouee. C'est
facile d'imaginer des situations plus complexes comme une region comportant
deux lacs dont un a une ile sur laquelle il y a un lac...

MI n'a pas de fonction permettant de renseigner directement cette
caracteristique. J'ai pas mal sue il y a quelques annees en ecrivant
ExploReg qui permet pour les pre-6.5 d'extraire les polygones d'une region
complexe car l'application contient l'option de conserver les vrais beignes
(patisseries en forme de tore, a ce que l'on dit ici tres prisees des
policiers quebecois qui consomment de bons beignes et distribuent de bonnes
beignes. Non, ce n'est pas vrai, plutot derive de beignet).

Je crois qu'il faudrait passer par l'exploration sytematique de chaque
polygone constituant la region pour arriver a une bonne conclusion, soit en
comparant la superficie du plus grand a celle de la region ( mais cela peut
ne pas marcher si la region est formee de 2 sous-regions ou plus dont une
pourrait etre trouee), soit en comptant le nombre d'objets obtenus par une
selection ponctuelle au centroide de chaque polygone apres desagregation (si
>1, la region est trouee).

Quant a la question
Remarque: J'utilise la fonction Str pour forcer le type de la nouvelle
colonne en Caractere , sinon ca marche pas (???)
elle s'explique par le fait que certaines fonctions telle ObjectInfo peuvent
retourner des valeurs de types tres differents dont MI ne prend conscience
qu'au moment de l'execution. Avant ce moment, MI fremit quand il les
rencontre car il ne sait a quel saint se vouer et va systematiquement
rejeter le code. C'est pour cela qu'il faut forcer le type de facon a faire
une operation logique invoquant ObjectInfo. Ainsi ... where
str(objectinfo(obj,21))> 1  selectionne tous les objets de type pline ou
region contenant plus qu'un constituant (section de pline ou polygone)

Dans la premiere solution 1, MI a besoin de savoir le type a attribuer a la
colonne mais objectinfo() en tant que tel lui donne toutes les possibilites
de type ou presque; l'utilisation de STR() le renseigne alors. Dans l'autre
esquissee a la fin, le type de la colonne est defini par la structure meme;
il n'y aurait probleme au moment de l'execution que si une autre valeur que
21 etait utilisee pour l'argument (2 est le style de ligne ou de la police,
ou du symbole, 3 est le texte d'un objet-texte, ...)

Jacques Paris

 

#5 Mon 17 December 2001 21:04

Carlos Montalvillo Gómez
Invité

Re: détecter les polygones troues

Bonjour,

Quelqu'un serait interesse par un petit applicatif sous Mapinfo pour detecter
les polygones troues ? Contactez-moi, car j'en ai fait un. Par contre,  rien a faire
pour detecter les beignes des policiers Quebecois...

Carlos Montalvillo Gomez
SGSmap - Ingenieros Consultores
Camino de Portuetxe, 83 - Oficinas 5, 6
20018 - San Sebastian - Espa=F1a
8 http://www.SGSmap.com/
* Carlos.Montalvillo@texte-a-enlever.SGSmap.com

 

Pied de page des forums

Powered by FluxBB