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 Wed 17 January 2007 20:44

Anonyme
Participant actif
Date d'inscription: 1 Jul 2013
Messages: 109

Intersection de tables

Bonjour,

J'ai une table de limites communales, et une table de zones naturelles.

J'ai utilisé la fonction AreaOverlap pour connaître quelle surface de zone naturelle il y a dans chaque commune.

J'ai encore 2 problèmes:

Les résultats sont en miles². Comment les convertir en km² ? Je crois que c'est une manip avec la fenêtre mapbasic mais j'ai pas trouvé.

Si par exemple 3 zones naturelles intersectent une commune, la nouvelle table indiquera, pour chaque commune, la surface de chaque zone naturelle comprise dans la commune. J'aurai donc 3 lignes pour une commune mais j'aimerais avoir la surface totale des zones naturelles comprises dans chaque commune.

Peut on faire une somme des 3 valeurs en fonction du nom de la commune dans une nouvelle table ? quelle est la requête SQL ?

Peut être que la requête areaoverlap n'est pas efficace et qu'il existe une autre requête plus performante qui calcule directement le total en surface des zones intersectées et en km²?

Merci d'avance

Guillaume

Hors ligne

 

#2 Wed 17 January 2007 21:38

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: Intersection de tables

Bonjour,
Soit les tables COMM et ZNAT et leurs identifiants uniques respectifs NOM et CODE

Code:

Select COMM.NOM, sum(cartesianarea(overlap(COMM.obj, ZNAT.obj), "sq km"))"surf", sum(proportionoverlap(COMM.obj, ZNAT.obj))"taux" from COMM, ZNAT where COMM.Obj intersects ZNAT.Obj group by COMM.NOM order by COMM.NOM

- donne un tableau (non graphique) des communes avec la surface des zones (n'importe lesquelles) qui l'intersectent et le taux de surface communale intersectée par des zones (chaque commune n'est citée qu'une fois)

Code:

Select COMM.NOM, ZNAT.CODE, sum(cartesianarea(overlap(COMM.obj, ZNAT.obj), "sq km"))"surf", sum(proportionoverlap(COMM.obj, ZNAT.obj))"taux" from COMM, ZNAT where COMM.Obj intersects ZNAT.Obj group by COMM.NOM, ZNAT.CODE order by COMM.NOM, ZNAT.CODE

- donne un tableau (non graphique) des communes avec la surface de chaque zone qui l'intersecte et le taux de surface communale intersectée par chaque zone (les communes sont citées autant de fois qu'elles intersectent de zones différentes)
Avec les résultats déjà obtenus dans la table RESULT (que je suppose juste smile )
- convertir miles² en km² en multipliant par 2,59
- pour additionner les surfaces par commune et retrouver des résultats équivalents à la première requête

Code:

Select NOM, Sum(Surf), Sum(Taux) from RESULT group by NOM

Bon courage

Hors ligne

 

#3 Wed 17 January 2007 23:45

Anonyme
Participant actif
Date d'inscription: 1 Jul 2013
Messages: 109

Re: Intersection de tables

Y'en a qui maîtrisent le logiciel c'est surprenant !

en tout cas ça marche mais j'obtiens la même table avec les 2 requêtes ! dans les 2 cas les surfaces sont aditionnées par communes

Pour le taux je suppose qu'il faut le multiplier par 100 c'est ça ?

Merci

Guillaume

Hors ligne

 

#4 Thu 18 January 2007 00:17

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: Intersection de tables

guillaume.oddon a écrit:

... j'obtiens la même table avec les 2 requêtes ! ...


C'est donc qu'il n'y a pas de zone portant un CODE différent qui intersecte les communes!!
Exact pour le taux: actuellement la somme des taux, si toute la commune est intersectée, est 1
ps: avec MI, c'est le SQL qu'il faut s'habituer à "maitriser" smile

Hors ligne

 

#5 Thu 18 January 2007 09:24

Robin
GeoRezo forever
Lieu: France
Date d'inscription: 31 Aug 2005
Messages: 13614
Site web

Re: Intersection de tables

Y'en a qui maîtrisent le logiciel c'est surprenant !


...et particulièrement Maurice... wink

avec MI, c'est le SQL qu'il faut s'habituer à "maitriser"


Tout à fait, c'est un bon exercice, d'une part, et c'est surtout là que le logiciel prend toute sa force. ArcGis à ma connaissance n'est pas capable de faire des requêtes SQL vraiment performantes, tandis qu'avec Mapinfo, c'est comme dans du beurre !
Consulte à cette fin ce document de Jacques Paris en particulier pour apprendre à maîtriser le SQL dans la fenêtre Mapbasic.

Pour ceux qui veulent retrouver le lien plus tard, les liens relatifs à Mapinfo sont regroupés dans le post de bienvenue en en-tête de liste.

Geomatiquement,
Robin.

Hors ligne

 

#6 Thu 18 January 2007 20:16

Anonyme
Participant actif
Date d'inscription: 1 Jul 2013
Messages: 109

Re: Intersection de tables

Bonsoir,

En fait c'est bête j'ai des taux qui ne correspondent à rien: du genre 1,24 ou 2,7. Dans le dernier cas ce n'est pas 2,7% ni 270 %!!! est-ce 27% ?

Merci Robin pour le lien je m'y plonge, c'est vrai que la doc est abondante sur le web

Merci et Bye Guillaume

Hors ligne

 

#7 Thu 18 January 2007 22:37

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: Intersection de tables

Bonjour,
Peut être un problème lié à des polygones multiples ?? Il faudrait voir les données ZNAT
Sinon je vous propose une variante:

Code:

Select COMM.NOM, area(COMM.obj, "hectare") "surf_com", sum(area(overlap(COMM.obj, ZNAT.obj), "sq m") / area(COMM.obj, "sq m")*100) "taux_dans_znat" from COMM, ZNAT where COMM.obj intersects ZNAT.obj group by COMM.NOM order by COMM.NOM

Taux de 0 à 100 et usage de area (spherical ou cartesian suivant vos options dans options->préférences->fenêtre carte)

Hors ligne

 

Pied de page des forums

Powered by FluxBB