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

Annonce

GEODATA DAYS 2024

#1 Tue 11 April 2006 11:12

davidarius
Juste Inscrit !
Date d'inscription: 11 Apr 2006
Messages: 4

requete sur une table habitants

Bonjour à tous,

Voilà, je cherche à créer une zone de 300m autour d'un axe de transport, et demander le nombre d'habitants se trouvant dans cette zone.

Mon fichier se coupose comme ceci :

- couche dessin avec mes axes
- couche avec ma surface, qui possédent un cadrillage de 100m, chaque case possédent deux valeurs : habitants et emplois, dans 
  la table


Je suis sur MapInfo 6.5

Merci à vous

Hors ligne

 

#2 Tue 11 April 2006 23:01

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

Re: requete sur une table habitants

Bonjour,
J'aime pas trop la couche dessin qui n'a ni attributs ni projection:
1 passez vos axes dans une vraie table
2 munissez vos axes d'un identifiant entier non nul (par rowid) et, facultatif, pareil pour la grille
3 créez un buffer autour des axes: create object as buffer from axes width 150 units "m" resolution 12 (dans la FMB)
4 Select nom_axe,proportionoverlap(grille.obj,axes.obj)*habitant "pop" from grille,axes where grille.obj intersects axes.obj and axes.id=0 (c'est le dernier objet créé, le buffer)
Si vous voulez un calcul axe par axe commencez par un
select * from axes where id=1 into axe_1
et remplacez axes par axe_1 dans les commandes 3 et 4
Puis pour détruire le buffer créé: Rollback Table axes (ou axe_1, ...axe_n)...et enregistrer la/les table/s résultat si nécessaire ou seulement leurs données

Hors ligne

 

#3 Wed 12 April 2006 11:02

davidarius
Juste Inscrit !
Date d'inscription: 11 Apr 2006
Messages: 4

Re: requete sur une table habitants

Maurice Nadal a écrit:

Bonjour,
J'aime pas trop la couche dessin qui n'a ni attributs ni projection:
1 passez vos axes dans une vraie table


c'est fait

Maurice Nadal a écrit:

2 munissez vos axes d'un identifiant entier non nul (par rowid) et, facultatif, pareil pour la grille


ok, et existant dans la table grille.

Maurice Nadal a écrit:

3 créez un buffer autour des axes: create object as buffer from axes width 150 units "m" resolution 12 (dans la FMB)


buffer = tampon c'est que qu'on m'avait dit :-) c'est fait et j'en ai fait une table.

Maurice Nadal a écrit:

4 Select nom_axe,proportionoverlap(grille.obj,axes.obj)*habitant "pop" from grille,axes where grille.obj intersects axes.obj and axes.id=0 (c'est le dernier objet créé, le buffer)
Si vous voulez un calcul axe par axe commencez par un
select * from axes where id=1 into axe_1
et remplacez axes par axe_1 dans les commandes 3 et 4
Puis pour détruire le buffer créé: Rollback Table axes (ou axe_1, ...axe_n)...et enregistrer la/les table/s résultat si nécessaire ou seulement leurs données


j'en suis là ... ce que tu m'explique là c'est bien une requête ? bon je test, je verai bien :-)

merci beaucoup Maurice Nadal

Hors ligne

 

#4 Wed 12 April 2006 15:11

davidarius
Juste Inscrit !
Date d'inscription: 11 Apr 2006
Messages: 4

Re: requete sur une table habitants

Je n'ai pas réussi...

petite question :

Select nom_axe,proportionoverlap(grille.obj,axes.obj)*habitant "pop" from grille,axes where grille.obj intersects axes.obj and axes.id=0

- "pop" correspond au de nom de la collonne où se trouve la valeurs des habitants, se trouvant dans la table "grille"
- "habitant" correspond à ?


Pour info

nom de mes couches :

Hektarraster = grille
300 = zone 300m (axes supprimés) peut-être là l'erreur ?

voici le début de ma table Hektarraster (grille)
Aktivitaet = emplois / VZAEQV_TOT=habitants
[img]http://www.davidarius.net/images/map1.jpg[/img]

et ma table 300 (zone de 300m sans les axes)
[img]http://www.davidarius.net/images/map2.jpg[/img]

alors, j'ai mis en gras mes incertitudes :

Select 300,proportionoverlap(Hektarraster.obj,300.obj)*habitant "VZAEQV_TOT" from Hektarraster,300 where Hektarraster.obj intersects 300.obj and 300.id=1


je débarque moi ^^

merci

Hors ligne

 

#5 Thu 13 April 2006 09:21

davidarius
Juste Inscrit !
Date d'inscription: 11 Apr 2006
Messages: 4

Re: requete sur une table habitants

Voici la réponse et une question :

Maurice Nadal a écrit:

J'y vois plus clair! Donc vous avez 5 buffers dans une table 300m (que MI va renommer _300m) et une table Hektarraster genre grille avec des habitants = Einwohner
"pop" est le nom donné à la colonne résultante, dont la valeur = taux de recouvrement de la grille par le buffer (proportionoverlap) multiplié par le nombre d'habitants (chez vous Einwohner). Ce qui suppose une répartition homogène des habitants, mais ça c'est le présupposé de votre manip...si 50% de la surface d'un carré à 12 habitants est couverte par un des buffer c'est que 6 habitants sont 'concernés' par le buffer
Dans votre cas la commande à passer en FMB serait:

Select Hektarraster.Nummer,proportionoverlap(Hektarraster.obj,_a300m.obj)*Hektarraster.Einwohner "pop" from Hektarraster,_300m where Hektarraster.obj intersects _300m.obj and _300m.id=1

pour obtenir une table graphique composée d'un sous ensemble de la table Hektarraster (quelques carrés) avec 2 attributs: Nummer et pop

Sinon, pour traiter tous les axes d'un coup et n'obtenir qu'un tableau de données on peut:
- assembler les 5 buffers en un buffer unique (je garde le même nom pour la table)
pm: c'est ce que faisait ma commande 3 qui crée un buffer unique (avec id=0) dans la table _300m
- Select Hektarraster.Nummer,proportionoverlap(Hektarraster.obj,_a300m.obj)*Hektarraster.Einwohner "pop" from Hektarraster,_300m where Hektarraster.obj intersects _300m.obj group by Hektarraster.Nummer
Avec le group by on n'a plus de graphique mais des données agrégées au cas où un même carré est coupé plusieurs fois par le buffer


ma question : que fait viens faire le "a" dans la commande ?

Select Hektarraster.Nummer,proportionoverlap(Hektarraster.obj,_a300m.obj)*Hektarraster.Einwohner "pop" from Hektarraster,_300m where Hektarraster.obj intersects _300m.obj and _300m.id=1

car MI, me donne l'erreur suivant : Variable ou Champ _.a300m.obj non définie.

Je l'ai supprimé et la commande a fonctionné, j'ai réalisé cette commande pour mes 5 axes et enregistrer à chaque fois la sélection dans une table.

Merci beaucoup Maurice pour votre aide précieuse !

Hors ligne

 

#6 Thu 13 April 2006 10:19

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

Re: requete sur une table habitants

Bonjour,
Bien content que vous soyez arrivé à vos fins...après avoir corrigé ma faute de frappe!!
Je vous redis tout le bien (pour l'avenir) de la lecture des documents sur :
http://www.paris-pc-gis.com/MI_Enviro/mie_start.htm
La maîtrise du SQL est à ce prix smile

Hors ligne

 

Pied de page des forums

Powered by FluxBB