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

#1 Wed 19 March 2003 09:06

Remyclem
Invité

requete selection d'objets particuliers

Bonjour,
Je voudrais realiser une requete permettant de selectionner tout les polygones de ma table possedant un trou , c'est a dire une zone interne ne faisant pas partie de l'objet (et n'en contenant d'ailleurs aucun). Quelqu'un sait-il comment faire cela ?
D'avance merci.
Remy

 

#2 Wed 19 March 2003 12:55

Jacques Paris
Invité

Re: requete selection d'objets particuliers

Voici un beau petit probleme et la facon toute particuliere qu'a MapInfo de
traiter de la topologie des objets n'aide pas. Un  polygone a trou
n'existe pas a proprement parler. Pour les detecter, il faudrait, d'apres
moi, decomposer toute region de plus d'un polygone dans ses polygones
constitutifs et les fusionner. Dans le cas le plus simple d'une region avec
un seul trou, le polygone du trou sera absorbe par le plus grand. Il suffit
alors de comparer la surface de la region originale avec celle du polygone
fusionne ce qui devrait rendre evident la presence d'un trou.

Est-ce la meilleure facon de proceder? Est-ce que cela vaudrait la peine
d'ecrite une fonction?

Jacques Paris

 

#3 Wed 19 March 2003 17:09

Béatrice FERNANE
Invité

Re: requete selection d'objets particuliers

Bonjour,

Une approche de la solution pourrait consister a convertir tous les polygones en polylignes, a desagreger les objets polylignes sans conserver les trous. Il resterait alors a selectionner tous les polylignes qui seraient au moins deux a posseder le meme identifiant. Une requete avec les identifiants permettait enfin de selectionner les fameux polygones dans la table d'origine.

cordialement
Beatrice FERNANE
mail : beatrice.fernane@texte-a-enlever.franche-comte.environnement.gouv.fr

 

#4 Wed 19 March 2003 17:09

Eric Mauviere
Invité

Re: requete selection d'objets particuliers

Bonjour,
voici deux fonctions qui me servent depuis quelque temps, la seconde permet de savoir si un objet est troue.

Cordialement,
Eric Mauviere
http://www.geoclip.net

function extracpoly(byval zone as object,byval numpoly as integer) as object
'extrait un polygone d'un objet a partir de son indice
dim regvide as object
if objectinfo(zone ,OBJ_INFO_NPOLYGONS)>=numpoly then
if objectinfo(zone ,OBJ_INFO_NPOLYGONS+numpoly)>2 then
extracpoly=ExtractNodes(zone,numpoly,1,objectinfo(zone ,OBJ_INFO_NPOLYGONS+numpoly),1)
else
Create Region Into Variable regvide 0
extracpoly=regvide
end if
else
Create Region Into Variable regvide 0
extracpoly=regvide
end if
end function

function est_troue(byval zone as object) as string
'renvoie une chaine d'indices identifiants les trous
dim m,n,npoly,k,l as integer
dim obj1,obj2 as object
dim str as string

str=
npoly=objectinfo(zone,OBJ_INFO_NPOLYGONS)
k=0
for m=1 to npoly-1
obj1=extracpoly(zone,m)
for n=m+1 to npoly
obj2=extracpoly(zone,n)
if obj1 intersects obj2 then
if obj1 entirely within obj2 then
k=k+1
str=str + m + ;
elseif obj2 entirely within obj1 then
str=str + n + ;
k=k+1
end if
end if
next
next
est_troue=str
end function

 

Pied de page des forums

Powered by FluxBB