#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
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
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.
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.
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 :
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
Hors ligne