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 Tue 20 June 2006 16:53

xdn
Participant occasionnel
Lieu: Villefranche sur Saône
Date d'inscription: 1 Dec 2005
Messages: 25

calcul de surfaces avec intersect, within...?

Bonjour,
J'ai un polygone commune et des polygones (bâti et zone d'activité) qui ne recoupent que partiellement ma commune (une partie de ces polygones est dans mes limites communales et le reste est à l'extérieur). Est-ce que qq serait en mesure de m'indiquer comment calculer les surface des parties de polygones (bâti et activité) incluses dans mes limites communales. Merci d'avance.
Xavier –Scot Beaujolais—

Hors ligne

 

#2 Tue 20 June 2006 18:34

Maestro de la salsa
Participant actif
Date d'inscription: 7 Jun 2006
Messages: 133

Re: calcul de surfaces avec intersect, within...?

salut.
J'ai un petit bricolage mais qui demande un peu d'attention: peut être qu'il y'a d'autres methodes plus rapides...
1-rend ta couche bati(za) modifiable
2-selectionne ta couche bati(za) (menu selection)
3-menu objet-->definir cible
4-selectionne ta couche commune(menu selection)
5-menu objet-->supprimer extérieur (defini la façon d'agréger tes données si tu en as besoin) (ATTENTION à partir d'ici car si tu enregistre tu écrase ta table bati. Va au 6)
6-menu fichier-->enregistrer table sous (sauvegarde sous un autre nom exemple T_calc_surf)
7-menu fichier-->tout fermer ( ATTENTION ferme tout sans rien sauvegarder)
8-menu fichier-->ouvrir table (ouvre ta table T_calc_surf. Dans cette table tu as les objets bati et za par commune)
9-menu table-->gestion des tables-->modifier structure-->ajouter champ (ajoute un champ exple "surface" de type numerique)
10-menu table-->mettre à jour colonne-->choisi ta table T_cal_surf et la colonne "surface". Comme "valeur" clic sur expression et tu choisi la fonction "area" ou tape simplement  Area(obj, "sq km"). ATTENTION par defaut c'est "sq mi" au lieu de "sq km". Valide et le tour est joué.

NB: On peut connaitre la surface d'un objet en 2x cliquant dessus.

J'espère avoir repondu à tes attentes.
Bon courage.

Hors ligne

 

#3 Tue 20 June 2006 20:54

Sophie KUHN
Participant occasionnel
Date d'inscription: 21 Sep 2005
Messages: 15

Re: calcul de surfaces avec intersect, within...?

Bonjour,

OK avec Maestro de la salsa mais au lieu de faire supprimer extérieur faire plutôt découper.
Ensuite dans une requête SQL sélectionner les tables bâti et commune, dans critères : bati.obj within commune.obj and Area(obj, "sq m") (ainsi MIW va calculer pour chaque morceau de bâti inclus dans une commune sa surface unitaire, ici en m²), dans Grouper par colonne : le champ reprenant le code insee ou le nom de la commune, et dans Colonne : [champ du grouper par colonne], Sum(Area(obj, "sq m")) (MIW va sommer par commune la surface de bâti comprise dans le polygone).

Tu obtiens alors dans un query la somme des surfaces de bâti dans le polygone.

Sophie

Hors ligne

 

#4 Wed 21 June 2006 08:36

CRIGBAB
Participant assidu
Lieu: Bayonne
Date d'inscription: 14 Nov 2005
Messages: 180

Re: calcul de surfaces avec intersect, within...?

Bonjour,

Le probleme avait été soulevé il y a quelque temps déjà.
Pour ma part voici une réponse "simple" directement exploitable sous mapinfo et grace à une requête SQL

Je dispose de deux tables le parcellaire de Bayonne (bayonne_carte) et le bati (bati_dur).

La fonction areaoverlap me calcule la surface intersectée par deux objets superposés
voici ce que je récupère dans un fichier qry lorsque je sauvegarde ma requête SQL sous Mapinfo

Fields {BAYONNE_CARTE . IDDGI , sum ( areaoverlap ( bayonne_carte . obj , bati_dur . obj ) ) }
Tables {BAYONNE_CARTE , BATI_dur}
Where {BAYONNE_CARTE . Obj intersects BATI_dur . Obj }
Group {BAYONNE_CARTE . IDDGI }
Order {BAYONNE_CARTE . IDDGI }
Into {selection}
Browse


dans la fenetre Mapbasic la saisie serait la suivante

select Bayonne_carte.iddgi, Sum(areaoverlap( bayonne_carte . obj , bati_dur . obj ) )  from bayonne_carte, bati_dur where bayonne_carte.obj intersects bati_dur.obj group by bayonne_carte.iddgi order by bayonne_carte.iddgi into selection

Cette fonction areaoverlap(obj1,obj2) permet sans modifier les tables de faire le calcul en dynamique.
L'agrégation par la fonction sum permet de calculer la somme des surfaces des différents morceaux de batis intersectés par une parcelle.
Si vous ne faites pas de sum et aussi de group by vous obtiendrait autant d'occurence d'une parcelle que de bati qu'elle intersecte (ainsi si une parcelle est touchée par trois batis cette parcelle apparaîtra trois fois avec la surface des trois morceaux de batis qu'elle touche).

Dans votre cas remplacez bayonne_carte par votre table des communes et appliquez la requête avec vos batis puis vos zones d'activités (cela ne fonctionne bien sur qu'avec des polygones).


Bonnes requêtes

J P LARTIGAU

Hors ligne

 

#5 Wed 21 June 2006 08:46

CRIGBAB
Participant assidu
Lieu: Bayonne
Date d'inscription: 14 Nov 2005
Messages: 180

Re: calcul de surfaces avec intersect, within...?

Bonjour (re)

Petit complement pour la surface il faut se méfier des unités dans tous les cas il faut dire à Mapinfo s'il travaille en metre carre ou hectare  (ou autre unité)

voici la commande en Mapbasic à saisir (avant de faire la requête)

set area units "sq m"
(ou en hectare)
set area units "hectare"

.
JP LARTIGAU

Hors ligne

 

#6 Wed 21 June 2006 16:21

xdn
Participant occasionnel
Lieu: Villefranche sur Saône
Date d'inscription: 1 Dec 2005
Messages: 25

Re: calcul de surfaces avec intersect, within...?

Merci à tous pour vos réponses, en ce qui concerne les deux premières c'est bien ce que j'avais préssenti... Par contre en ce qui concerne la réponse de JP Lartigau, au risque de passer pour un novice... je n'arrive pas à touver la fonction areaoverlap. Si qq peut m'indiquer la procédure à suivre pour la trouver car elle m'intéresse.
Merci encore

Hors ligne

 

#7 Thu 22 June 2006 10:37

S. LINARES
Participant occasionnel
Lieu: Guyane
Date d'inscription: 10 Sep 2005
Messages: 25

Re: calcul de surfaces avec intersect, within...?

Une aide est dispo sur le site de Laurent Maumet

http://geo.maumet.free.fr/sql/sql.htm

Sébastien LINARES
Chef de projet S.I.G.
________________________________________________________________

DIREN Guyane
17, Av Léon Gontrand DAMAS, place des Palmistes - B.P. 380 - 97328 CAYENNE cedex
tél.: 0594 29 80 25 - fax : 0594 37 89 81 - mél : sebastien.linares@texte-a-enlever.guyane.ecologie.gouv.fr

Hors ligne

 

#8 Thu 22 June 2006 10:57

CRIGBAB
Participant assidu
Lieu: Bayonne
Date d'inscription: 14 Nov 2005
Messages: 180

Re: calcul de surfaces avec intersect, within...?

Bonjour

Ben oui comme on le dit dans le  Sud Ouest c'est normal de pas la trouver dans Mapinfo car elle n'est pas documentée.

Il faut donc l'ecrire à la mano dans la boite de dialogue du SQL.
Ou plus simple tu recopies le texte que j'ai fourni hier dans un editeur de texte et tu enregistre le fichier avec une extension  qry.
Sous l'editeur SQL de Mapinfo charger la requête puis modifier les noms des tables et tout doit être OK.

Cette fonction comme bien d'autres est disponible sous le reqéteur SQL ou via la fenêtre Mapbasic . C'est grâce à Mapbasic (payant) que l'on a toutes les informations sur ces fonctions "cachées" de Mapinfo.

Je crois que quelques personnes disposent de la doc informatique de Mapbasic.

A voir

Bonne requête.

JP LARTIGAU

Hors ligne

 

#9 Thu 22 June 2006 13:07

jakesp
Membre
Lieu: Montreal, QC
Date d'inscription: 28 Sep 2005
Messages: 126
Site web

Re: calcul de surfaces avec intersect, within...?

Quelques petites précisions sur la "disponibilité" des ressources MapBasic sans l'avoir. Il n'est pas nécessaire d'avoir acheté MapBasic pour profiter d'une large partie de ces ressources sous forme d'expressions dans des dialogues du menu (sql, création de carte thématiques et autres), de commandes dans la fenêtre MapBasic et aussi de scripts (fonctions linéaires sans branchements donc sans conditions (if) ou boucles (for, do ...) )que l'on peut "envelopper" dans un document wor et utiliser répétitivemnt.

La question de la documentation est et a toujours été épineuse. J'ai produit je crois le premier document autonome  sur l'utilisation de la fenêtre MapBasic dès la version 4.5. MapInfo a perçu la validité de l'approche et dès la version 5.5 a rajouté dans son Guide de l'utilisateur un chapitre (24 je crois) sur le sujet. Ce chapitre  a perdu de son importance depuis mais j'ai remarqué que le disque d'installation de MI 6.5 contenait les documents PDF sivants: MI Guide de l'utilisateur, MI Référence et MB Référence. Ceci est une indication que tout propriétaire de MI peut avoir la documentation MapBasic gratuitement et légalement.

Mais la Référence MB n'est pas suffisante pour travailler sans MB. Il faut en effet savoir convertir les arguments de fonction qui sont décrits comme par exemple OBJ_GEO_MINX en valeurs numériques car MI ne peut pas comprendre ces mots, il veut des nombres, MapBasic faisant normalement la conversion au moment de la compilation. Pour cela il faut s'équiper du fichier mapbasic.def qui vient avec MapBasic mais qui peut s'échanger sans problème (veillez seulement à recevoir la bonne version).

Si vous ne vous croyez pas capable de démarrer sur le sujet sans aide, faites un tour sur www.paris-pc-gis.com/MI_Enviro/mie_start.htm pour consulter le chapitre "MapBasic pour sa fenêtre". Ce n'est pas à la fine pointe de l'évolution MI mais c'est un bon lancement, je crois du moins.

Hors ligne

 

#10 Fri 23 June 2006 08:31

xdn
Participant occasionnel
Lieu: Villefranche sur Saône
Date d'inscription: 1 Dec 2005
Messages: 25

Re: calcul de surfaces avec intersect, within...?

Merci à tous pour ces information précieuses avec lesquelles me voilà paré pour partir à la conquête du monde SQL sans mapbasic payant...
A bientot
xavier -Scot Beaujolais-

Hors ligne

 

Pied de page des forums

Powered by FluxBB