#1 Thu 01 March 2007 16:04
- Dhumkhazaar
- Juste Inscrit !
- Lieu: Le Havre
- Date d'inscription: 17 May 2006
- Messages: 9
Problème délicat
Bonjour,
Avant tout, je travaille sur MapInfo V 6.5 si cette information peut vous etre d'un quelconque utilité.
Je possède deux tables. L'une contient des polygones jointifs recensant les différents habitats présent sur le territoire étudié (une sorte de typologie d'occupation des sols version ecolo ^^).
La seconde est une table de points autour de laquelle je decide de creer des buffer de 75 m de rayon.
Ma problématique est la suivante : je voudrais obtenir pour chaque buffer l'habitat dominant qui le caractérise (celui qui représente le plus de surface pour chaque buffer).
cordialement,
Hors ligne
#2 Thu 01 March 2007 17:41
Re: Problème délicat
Bonjour,
Les fonctions venant de MapBasic (il faut les saisir) "ProportionAreaOverlap(obj1, obj2)" et AreaOverlap(obj1,obj2) peuvent résoudre votre problématique.
Attention : Forcer MapInfo via Set Area units "sq km" si vous souhaitez ne pas vous retrouver avec des Milles au carré.
Sous MapInfo 8.5, il me semble que cette dernière commande ne soit plus utile... Si quelqu'un peut confirmer mes dires.
Bonne continuation
Florent
Hors ligne
#3 Fri 02 March 2007 10:03
- Dhumkhazaar
- Juste Inscrit !
- Lieu: Le Havre
- Date d'inscription: 17 May 2006
- Messages: 9
Re: Problème délicat
Alors, j'ai ouvert la fenêtre MapBasic de ma version de MapInfo (6.5 pour rappel) pour taper la requête suivante :
select max(ProportionAeraOverlap(Habitats_rn2006.obj, LOCALISATION_POINT_STOC_FRANCK.obj)) From Habitats_rn2006, LOCALISATION_POINT_STOC_FRANCK where Habitats_rn2006.obj intersects LOCALISATION_POINT_STOC_FRANCK.obj
la fenêtre de sortie qui m'est rendu ne me présente qu'un enregistrement ayant pour valeur "1".
Je débute en MapBasic, aussi peut être ai-je fait une erreur quelque part (surement d'ailleurs)
Dernière modification par Dhumkhazaar (Fri 02 March 2007 10:14)
Hors ligne
#4 Sat 03 March 2007 00:50
- Damien BEAUSEIGNEUR
- Participant assidu
- Lieu: meyzieu
- Date d'inscription: 5 Sep 2005
- Messages: 425
Re: Problème délicat
Puisque tu veux récupérer l'information de l'habitat dominant dans chaque buffer. Je m'y prendrai en 2 foi pour récupérer les informations.
En premier la requête
select LOCALISATION_POINT_STOC_FRANCK.id,Habitats_rn2006.id,max(ProportionAeraOverlap(Habitats_rn2006.obj, LOCALISATION_POINT_STOC_FRANCK.obj)) From Habitats_rn2006, LOCALISATION_POINT_STOC_FRANCK where Habitats_rn2006.obj intersects LOCALISATION_POINT_STOC_FRANCK.obj
En deuxième récupération de la proportion maximale par localisation
Les deux tables doivent ensuite être sauvegardée et enfin établir une jointure entre les deux tables pour récupérer dans la dernière sélection la jointure entre ces deux tables pour obtenir par localisation le type d'habitat le plus représenté.
Hors ligne
#5 Sun 04 March 2007 10:43
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Problème délicat
Bonjour,
Quelques précisions...
La fonction qui donne la proportion de surface intersectée est ProportionOverlap(obj1,obj2) ... et non ProportionAeraOverlap !!
Il faut effectivement procéder en trois lignes de commande dans la fenêtre MapBasic
On dispose seulement de la fonction Max(), qui donne le maximum d'une colonne, et de Maximum(num1, num2) qui détermine un maximum, mais seulement sur deux valeurs...
Il faudra disposer d'un identifiant unique dans la tables "BUFFER" (un attribut HABITAT.code est utilisé ici, sans unicité requise, mais on peut s'en passer)
1- Select BUFFER.id, HABITAT.code, sum(ProportionOverlap(BUFFER.obj, HABITAT.obj)) "taux" From BUFFER, HABITAT Where BUFFER.obj intersects HABITAT.obj Group by BUFFER.id,HABITAT.code Into SEL1
Donne une table SEL1, non graphique (à cause du Group by), où figurent pour chaque TAMPON les taux d'habitat intersecté
2- Select id, code, Max(Taux) "Dominant" From SEL1 Group by id Into SEL2
Donne la table SEL2 du maximum d'HABITAT intersecté, TAMPON par TAMPON et ici baptisé "Dominant"
3- La mise à jour de la table TAMPON doit se faire par l’intermédiaire de « Update » (On suppose que la colonne 'Dominant', qui recevra le nom de l'habitat dominant existe déjà dans la table TAMPONS)
Update TAMPONS Set TAMPONS.Dominant = SEL2.Dominant Where TAMPONS.id = SEL2.id
Dernière modification par Maurice (Mon 05 March 2007 11:50)
Hors ligne
#6 Mon 05 March 2007 11:47
- Dhumkhazaar
- Juste Inscrit !
- Lieu: Le Havre
- Date d'inscription: 17 May 2006
- Messages: 9
Re: Problème délicat
A priori, lors de l'écriture de la seconde phase de la requête, MapInfo me retourne le message suivant :
"trouvé "group" pendant la recherche de "from" "
Hors ligne
#7 Mon 05 March 2007 11:50
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Problème délicat
Select id, code, Max(Taux) "Dominant" From SEL1 Group by id Into SEL2
Pardon: il y a (avait) une virgule parasite après "Dominant" dans ma réponse (que je corrige!!)
Hors ligne
#8 Mon 05 March 2007 14:08
- Dhumkhazaar
- Juste Inscrit !
- Lieu: Le Havre
- Date d'inscription: 17 May 2006
- Messages: 9
Re: Problème délicat
arf, merci pour cette correction ^^ (meme si j'aurais du moi meme la voir dans l'idéal lol)
cette méthode fonctionne à merveille et me sera d'une grande utilité merci beaucoup
Hors ligne