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

State Of The Map 2024

#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 smile

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

Robin
GeoRezo forever
Lieu: France
Date d'inscription: 31 Aug 2005
Messages: 13614
Site web

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 smile

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.


Jean-François Behm
SERVICES GEOGRAPHIQUES
Centres de formation SIG - http://servicesgeographiques.com

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.


sad
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 (smile) je te remercie...mais je reste (plus que) dubitatif sur son intérêt par rapport à ta question initiale !

Hors ligne

 

Pied de page des forums

Powered by FluxBB