Pages: 1
- Sujet précédent - Selectionner les zones de vie à cheval sur plusieurs département - Sujet suivant
#1 Tue 19 May 2009 10:55
- Gregory Orts
- Participant occasionnel
- Date d'inscription: 24 Jan 2008
- Messages: 13
Selectionner les zones de vie à cheval sur plusieurs département
Bonjour,
Comment est-il possible via par exemple MapBasic ou sélection SQL de sélectionner seulement les polygones (zones de vie dans cet exemple) qui sont à cheval sur plusieurs département ?
L'opérateur Intersects ne fonctionne pas dans ce cas, car il sélectionne tous les polygones qui ont un contour commun.
merci de votre aide
Grégory
Hors ligne
#2 Tue 19 May 2009 11:45
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Selectionner les zones de vie à cheval sur plusieurs département
Bonjour
S'il y a beaucoup de départements...ça risque d'être long car il faudrait procéder département après département, par
Select * from ZONE_VIE where obj entirely within any (select obj from DEPT where INSEE_DEPT="xx")
puis inverser la sélection dans la table ZONE_VIE ou alors mettre à jour cette sélection par le INSEE_DEPT...
nb: il y a probablement plus "élégant", j'y réfléchis dès que j'ai du temps
Hors ligne
#3 Tue 19 May 2009 12:09
- Gregory Orts
- Participant occasionnel
- Date d'inscription: 24 Jan 2008
- Messages: 13
Re: Selectionner les zones de vie à cheval sur plusieurs département
merci,
oui ça risque d'être long, d'autant plus que je vais certainement devoir le faire par commune !
Hors ligne
#4 Tue 19 May 2009 12:26
Re: Selectionner les zones de vie à cheval sur plusieurs département
Hello,
sélectionner seulement les polygones (zones de vie dans cet exemple) qui sont à cheval sur plusieurs département ?
Dans le principe, une idée :
1. Attribution d'un identifiant unique par zone de vie .
Exemple, avec un ZV n°1 à cheval sur deux département et une ZV n°2 entièrement incluse
Table ZV
ID : 1
ID : 2
Table Departements
Dep : 73
Dep : 74
2. Opération de découpe spatiale : Zone de Vie (Croisé avec) Departement pour une couche unique découpée et attribuée avec les deux information
Table ZVxDep
ID : 1 - Dep : 73
ID : 1 - Dep : 74
ID : 2 - Dep : 73
3. Fusion spatiale avec Count depuis cette couche en fonction du champ identifiant unique des zones de vie.
Table ZVCount
ID : 1 -Count : 2
ID : 2 - Count : 1
4. Jointure avec la table ZV initiale en fonction du numéro de ZV puis sélection des zones ayant un count > 1
Table ZV
ID : 1 - Count : 2
ID : 2 - Count : 1
> On voit qu'on ne sélectionne que la ZV n°1
Ensuite, libre à vous de remplacer département par commune ou tout autre polygone.
Bon, c'est en gros, il faut peaufiner, mais c'est une idée générale
Robin.
Dernière modification par Robin (Tue 19 May 2009 12:27)
Hors ligne
#5 Tue 19 May 2009 14:14
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Selectionner les zones de vie à cheval sur plusieurs département
Peut être plus rapide...
- rendre la table polygones COMMUNES éditable, tout sélectionner
- transformer COMMUNES en polylignes
- Select * from ZONE_VIE where obj intersects any (select obj from COMMUNES) into a_cheval
- annuler les changements de COMMUNES
Hors ligne
#6 Tue 19 May 2009 14:22
- jean-francois Behm
- Participant assidu
- Lieu: Toulouse
- Date d'inscription: 5 Sep 2005
- Messages: 212
- Site web
Re: Selectionner les zones de vie à cheval sur plusieurs département
Une piste :
la requête
SELECT * FROM zone_vie,dept WHERE zone_vie.obj intersects dept.obj
doit renvoyer 2 lignes pour une zone de vie à cheval sur 2 departements.
Donc en faisant la requête suivante :
Select id, count(*) from zone_vie, F_dept where zone_vie.Obj Intersects F_dept.Obj group by id into Sel_zone_vie
on obtient un tableau avec l'identifiant de la zone de vie et le nombre de départements qui l'intersectent.
une 2eme requete sur sel_zone_vie permet de sélectionner les objets dont count(*) est supérieur à 1 :
select * from sel_zone_vie where col2>1
Les limites du SQL de MapInfo ne permet par de faire des critères de groupe (having count(*)>1) dans la requête principale.
Hors ligne
#7 Wed 20 May 2009 10:40
- Gregory Orts
- Participant occasionnel
- Date d'inscription: 24 Jan 2008
- Messages: 13
Re: Selectionner les zones de vie à cheval sur plusieurs département
La solution de la requête "SELECT * FROM zone_vie,dept WHERE zone_vie.obj intersects dept.obj" puis du comptage >=2 ne fonctionne pas puisqu'elle prend aussi les départements qui ont une frontière commune avec le dépôt.
Or, il me faut seulement les couches qui sont à cheval, c'est-à-dire les zone de vie qui sont réellement sur deux départements.
Hors ligne
#8 Wed 20 May 2009 11:22
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Selectionner les zones de vie à cheval sur plusieurs département
Salut Gregory,
Remplace le Intersects par un "Contains" ou un "Within"
A+
Joël
Hors ligne
#9 Wed 20 May 2009 11:44
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Selectionner les zones de vie à cheval sur plusieurs département
A moins qu'il existe des zones de vies composées de polygones disjoints (!!?), la méthode de jean-francois Behm fonctionne parfaitement...
Je ne comprends pas le sens de
puisqu'elle prend aussi les départements qui ont une frontière commune avec le dépôt.
La requête incluant count(*) à laquelle on peut ajouter un tri donne un tableau non graphique du nombre de polygones intersectés par chaque zonz de vie: 1, 2 = à cheval sur deux, 3 = à cheval sur trois, etc...
Hors ligne
#10 Wed 20 May 2009 12:04
- Gregory Orts
- Participant occasionnel
- Date d'inscription: 24 Jan 2008
- Messages: 13
Re: Selectionner les zones de vie à cheval sur plusieurs département
Peut-être que je me suis mal exprimé :
je veux sélectionner seulement les zones de vie qui sont seulement à la fois sur deux départements.
Alors que les requêtes SQL habituelles (intersect/within/contains) ont pour défaut de sélectionner également les zones de vie qui ont des frontières communes avec un ou plusieurs départements, sans pour autant être à cheval sur deux départements.
La seule solution que j'ai trouvé pour le moment, mais que je n'arrive pas à mettre en pratique, est de réduire les polygones départements de quelques mètres par exemple afin que les requêtes SQL ne tiennent plus compte des frontières.
Hors ligne
#11 Wed 20 May 2009 12:10
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Selectionner les zones de vie à cheval sur plusieurs département
Salut,
Ce que j'ai compris c'est que tu veux exclure les polygones qui ont une frontière confondue avec les limites d'un département c'est pour cela que l'intersects ne marche pas mais par contre le contains et le within cela devrait fonctionnner.
A+
Joël
Hors ligne
#12 Wed 20 May 2009 13:29
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Selectionner les zones de vie à cheval sur plusieurs département
Moi ce que je ne comprends pas c'est qu'il y ait encore à redire à la solution proposée (a priori non testée ??), qui nécessite deux temps ET un identifiant unique (id) dans la table ZONE_VIE...ET que je répète:
- requête
Select id, count(*) "coupe" from ZONE_VIE where obj intersects any (select obj from COMMUNES) group by id order by coupe desc into Sel_zone_vie
donne une table Sel_zone_vie non graphique qui a le même nombre d'enregistrements que ZONE_VIE, chacun avec son id et une colonne "coupe" classée du plus grand au plus petit indiquant le nombre de polygones intersecté par chaque zone
- on crée une colonne "bidule" dans ZONE_VIE et on la met à jour avec la valeur de "coupe" de Sel_zone_vie sur le critère de Sel_zone_vie.id = ZONE_VIE.id
- il suffit ensuite de sélectionner dans ZONE_VIE les enregistrements où "bidule" > 1 pour avoir le résultat souhaité...
Seul bémol possible: une topologie défaillante dans une ou les deux tables
Hors ligne
#13 Fri 12 June 2009 10:39
- Gregory Orts
- Participant occasionnel
- Date d'inscription: 24 Jan 2008
- Messages: 13
Re: Selectionner les zones de vie à cheval sur plusieurs département
Merci pour vos réponses,
j'ai trouvé une autre solution :
1) outil gtux de découpage téléchargeable gratuitement sur internet (dispo aussi sur le forum
2) création d'une nouvelle couche correspondant au polygone découpé
3) éventuellement élimination des polygone avec une aire = 0 pour éviter de comptabiliser des erreurs éventuel d'une topo défaillante
Hors ligne
#14 Fri 12 June 2009 12:10
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Selectionner les zones de vie à cheval sur plusieurs département
En tant qu'auteur de GT_UX () je te remercie...mais je reste (plus que) dubitatif sur son intérêt par rapport à ta question initiale !
Hors ligne
Pages: 1
- Sujet précédent - Selectionner les zones de vie à cheval sur plusieurs département - Sujet suivant