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

Printemps des cartes 2024

#1 Tue 27 January 2015 10:45

Frago
Participant actif
Date d'inscription: 5 Oct 2011
Messages: 53

Requête spatiale de proximité

Bonjour,

Je souhaiterais pouvoir croiser deux tables de ponctuels entre elles en fonction d'un critère de proximité (magasins à 500m d'un habitant).

Je dispose de la table MAGASIN (avec un IDU_MAG) et de la table HABITANT (avec un IDU_HAB).

Je suis parvenu à compter le nombre de magasins à 500m. d'un habitant. Voici ma requête :

Code:

Select HABITANT.IDU_HAB, count(*) from HABITANT  where obj within any ( select buffer ( obj , 12 , 500 , "m" ) from MAGASIN where IDU_MAG like "G01" or IDU_MAG like "G02" or IDU_MAG like "G03" or IDU_MAG like "G05" ) group by HABITANT.IDU_HAB into count_MAG_HAB

Ainsi j'ai un résultat du type :
IDU_HAB ; count
001 ; 2
002 ; 1
003 ; 4
004 ; 2
... ; ...


Je souhaitais avoir s'il était possible de rajouter une colonne qui comporterait les noms de magasins concaténés. Exemple :
IDU_HAB ; count ; IDU_MAG
001 ; 2 ; G01-G05
002 ; 1 ; G01
003 ; 4 ; G01 - G02 - G03 - G05
004 ; 2 ; G03 - G05
... ; ... ; ...


Difficile (ou impossible) sous mapinfo sans système de base de données relationnelles ?
Le cas échant, serait-il possible d'obtenir :
IDU_HAB ; IDU_MAG
001 ; G01
001 ; G05
002 ; G01
003 ; G01
003 ; G02
003 ; G03
003 ; G05
004 ; G03
004 ; G05
... ; ...


Merci d'avance pour votre aide,

Hors ligne

 

#2 Tue 27 January 2015 12:20

Spacejo
Membre
Lieu: Nancy
Date d'inscription: 17 Aug 2008
Messages: 2511

Re: Requête spatiale de proximité

Salut,

Une possibilité pour ta première requête:

Select HABITANT.IDU_HAB, count(*) from HABITANT  where obj within any ( select buffer ( obj , 12 , 500 , "m" ) from MAGASIN where IDU_MAG in (G01,G02,G03,G05) group by HABITANT.IDU_HAB into count_MAG_HAB


Maintenant pour avoir ce que tu désires -> il serait plus facile de passer sur Excel et ses tableaux dynamiques.
Pour le cas échant:
Il te faut une jointure spatiale entre tes 2 tables.

Select * from TableHabitant, TableBufferMagasin where TableHabitant.obj within TableBufferMagasin.obj into Jointure


A+
Joël

Hors ligne

 

#3 Tue 27 January 2015 12:53

Spacejo
Membre
Lieu: Nancy
Date d'inscription: 17 Aug 2008
Messages: 2511

Re: Requête spatiale de proximité

Aprés avoir fait ta jointure.
Une solution est de faire un export en .txt, .dbf ou .csv (Table -> Exporter) puis importer ce fichier dans Excel (2003 pour le .dbf) et voici un exemple:
Voir --> Transformation d'une BD en Tableau
Dans --> http://boisgontierjacques.free.fr/pages … #TableauBD
--> http://boisgontierjacques.free.fr/fichi … ableau.xls
A+
Joël

Dernière modification par Spacejo (Tue 27 January 2015 12:55)

Hors ligne

 

Pied de page des forums

Powered by FluxBB