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

Florent
Participant actif
Lieu: Nantes
Date d'inscription: 5 Sep 2005
Messages: 86
Site web

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

 

Pied de page des forums

Powered by FluxBB