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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Wed 06 May 2015 14:23

altigis
Participant assidu
Date d'inscription: 20 Jun 2013
Messages: 308

éclater un shape en plusieurs shape distincts

Bonjour
Je possède un shape composé de 10 polygons distincts. Je cherche à éclater mon shape en 10 shape distincts avec un objet par shape. Exist'il un outil sous Arcgis 10.3 pour réaliser cette manip.
Sous QGIS, dans "Vecteur", "Outil de gestion de données" il y a "Séparer une couche vectorielle". Je cherche l'outil similaire sur Arcgis 10.3.

Si vous avez une piste je suis complètement preneur sous Arcgis 10.3, et non sur les versions précédentes où plusieurs Addins existent.

Merci

Séb

Hors ligne

 

#2 Wed 06 May 2015 15:47

daniellopez
Participant actif
Lieu: france
Date d'inscription: 22 Jan 2015
Messages: 80

Re: éclater un shape en plusieurs shape distincts

Si tu peux pas attendre que l'USGS mette à jour son addin, voici ma proposition avec Model Builder:

Dans Model builder
ouvrir un nouveau modèle
-Ajouter un itérateur d'entités:
Insérer->Itérateurs->Sélection d'entités
Double clic sur "Itérer dans une sélection"
Dans Entités en entrée pointer sur la couche de polygones
Dans champ de groupement sélectionner le FID ou OBECTID, bref, l'identifiant des enregistrements
Cliquer sur OK
-Ajouter au modèle l'outil "classe d'entités vers classe d'entités":
Outils de conversion->Vers une geodatabase->classe d'entités vers classe d'entités
Double clic sur l'outil
Dans entités en entrée ouvrir le menu déroulant et sélectioner I_xxxx_Dans_entités_en_entrée
Dans Emplacement en sortie" pointer sur une geodatabase ou un répertoire
Dans classe d'entités en sortie mettre le nom des polygones en sortie avec %Valeur% (qui contiendra le numéro d'itération
Si c'est dans une geodatabase:  polygones%Valeur%
Si c'est dans un répertoire polygones%Valeur%.shp

C'est prêt.
Sélectionner les polygones à exporter (le modèle travaille sur la sélection, comme ça on n'est pas obligé de tout traiter)
Exécuter le modèle

J'ai testé et ça marche.

Daniel

Hors ligne

 

#3 Wed 06 May 2015 15:53

OhCheat
Participant actif
Lieu: Toulouse
Date d'inscription: 11 Apr 2014
Messages: 58

Re: éclater un shape en plusieurs shape distincts

Si tu as ET Geowizard, tu peut utiliser la fonction Split by Attribute.
Ou alors vu que tu n'as que 10 polygones tu peut aussi les exporter un à un mais ce serait une méthode plutôt fastidieuse pour une fichier avec plus d'entités... wink
Sinon je suis aussi curieux de savoir comment faire sans Geowizard...

Corentin


EDIT : ah j'ai été surpassé, c'est vrai que le ModeBuilder c'est l'outil idéal pour ce genre d'opération smile

Dernière modification par OhCheat (Wed 06 May 2015 15:55)

Hors ligne

 

#4 Wed 06 May 2015 15:56

altigis
Participant assidu
Date d'inscription: 20 Jun 2013
Messages: 308

Re: éclater un shape en plusieurs shape distincts

merci pour vos réponses. Je n'ai pas ET GEOWIZARDS, malheureusement....
pour l'xport des polygons un à un pas terrible quand même.

Merci Daniel pour le détail du MB. Je vais regarder cela de plus près.
On attends donc l'Addins avec impatience

merci pour vos réponses

Séb

Hors ligne

 

#5 Wed 06 May 2015 16:00

OhCheat
Participant actif
Lieu: Toulouse
Date d'inscription: 11 Apr 2014
Messages: 58

Re: éclater un shape en plusieurs shape distincts

Ça veux dire qu'il n'y aucun outil déjà présent sans add qui peut faire ça ? C'est quand même pas très pratique...
Je trouve ça un peut bête de ne pas avoir accès à des fonctions "basique" telles que celles la sans extensions hmm

Hors ligne

 

#6 Thu 28 May 2015 10:19

Xavier Julian
Participant assidu
Lieu: Orange
Date d'inscription: 19 Jan 2015
Messages: 218

Re: éclater un shape en plusieurs shape distincts

Si tu possèdes FME, il y a une fonction qui s'appelle répartir.
http://georezo.net/forum/viewtopic.php?id=96627

Hors ligne

 

#7 Thu 28 May 2015 14:16

Nicolas Granier
Participant assidu
Date d'inscription: 19 Apr 2007
Messages: 271

Re: éclater un shape en plusieurs shape distincts

Bonjour,
Voici un exemple pour faire cette manip par un fichier python de script.
Ce script est exécutable soit par la fenêtre de ligne de commande d'Arcgis soit en mode autonome depuis la console.

Code:

import arcpy,os  # import des modules
couche = r"C:\Users\ngranier\Desktop\znro.shp" #la couche en entree
sortie=r"C:\Users\ngranier\Desktop\out" #le repertoire - dossier de sortie
champDeTri="LOCALISATI" # le champ de tri
valeurPossible=[]     # on cree une liste vide qui va contenir toutes les valeurs possibles du champ de tri
table=arcpy.SearchCursor(couche) #on parcourt la table
for ligne in table :
    valeurChamp=ligne.getValue(champDeTri)
    if valeurChamp not in valeurPossible :
        valeurPossible.append(valeurChamp) #on ajoute dans la liste des valeurs possibles chaque nouvelle valeur trouvee

compteur=0
for valeur in valeurPossible[1:] : #pour chaque des valeurs du champ de tri
    compteur+=1 # on met un compteur pour faire une sortie fichier_1, fichier_2
    coucheSortie=sortie +"/" + os.path.basename(couche).split('.')[0] + "_" + str(compteur) # on genere un  nom pour la couche en sortie
    arcpy.Select_analysis (couche,coucheSortie,"\"%s\"='(%s)' " %(champDeTri,valeur))  # on exporte la couche

Attention : il ne doit pas y avoir d'apostrophes dans les valeurs du champs de tri (pas géré dans ce script)

A+
Nicolas GRANIER

Hors ligne

 

#8 Thu 28 May 2015 17:33

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

Re: éclater un shape en plusieurs shape distincts

D'autres infos si besoin (en anglais par contre): http://gis.stackexchange.com/questions/ … alues-usin

Hors ligne

 

#9 Fri 19 May 2017 14:47

Evelyne
Participant occasionnel
Lieu: Rimouski
Date d'inscription: 8 Jul 2013
Messages: 18

Re: éclater un shape en plusieurs shape distincts

Si tu as l'extention X-Tool Pro (disponible en version d'essaie gratuitement mais après il faut quand même payé...) il y a Split by attribut sous l'onglet feature convertion


Evelyne, Géographe M. Sc , Auxiliaire de recherche - Laboratoire de dynamique et de gestion intégrée des zones côtières UQAR

Hors ligne

 

#10 Fri 19 May 2017 15:00

nitram
Participant assidu
Lieu: Brest
Date d'inscription: 19 May 2009
Messages: 990
Site web

Re: éclater un shape en plusieurs shape distincts

Bonjour,

Il y a aussi la toolbox GME (Geospatial Modelling Environment) qui dispose de la commande splitdataset.
http://www.spatialecology.com/gme/splitdataset.htm

Martin

Hors ligne

 

#11 Mon 12 November 2018 12:08

SanFritz
Juste Inscrit !
Date d'inscription: 15 Mar 2011
Messages: 2

Re: éclater un shape en plusieurs shape distincts

Bonjour à tous,

ça fait un moment que ce message a été posté mais je souhaitais faire remonter le sujet car je suis dans une impasse.

Tout d'abord, je travaille sous Arcgis 10.5. Je tente de faire fonctionner le script ci-dessus, c'est-à-dire, éclater un fichier.shp afin de créer un fichier.shp pour chaque ligne de ma table attributaire. Du coup, j'ai adapté les variables à mon projet en indiquant les bons chemins. Le script se lance et fonctionne en créant un .shp pour chaque ligne mais les fichiers générés sont vides, et n'ont donc aucune géométrie ?

Quelqu'un aurait une piste ? Une fonction que j'aurais oublié d'utiliser ?

Merci beaucoup.

Fritz

Hors ligne

 

#12 Wed 14 November 2018 09:34

kant_ein
Participant occasionnel
Date d'inscription: 7 Apr 2008
Messages: 34

Re: éclater un shape en plusieurs shape distincts

Bonjour,

Si les fichiers de sortie sont vides, il est vraisemblable que le problème vienne de la sélection.
Tu as changé les chemins mais as-tu changé le nom du champ ?

Code:

champDeTri="LOCALISATI" # le champ de tri

Dans le script proposé, le champ est de type string (voir requête SQL). Est-ce également ton cas ?

Code:

arcpy.Select_analysis (couche,coucheSortie,"\"%s\"='(%s)' " %(champDeTri,valeur))  # on exporte la couche

Il serait intéressant de vérifier si la liste de valeurs est correctement constituée en ajoutant un print.

Code:

for ligne in table :
    valeurChamp=ligne.getValue(champDeTri)
    if valeurChamp not in valeurPossible :
        valeurPossible.append(valeurChamp) #on ajoute dans la liste des valeurs possibles chaque nouvelle valeur trouvee
print valeurPossible
compteur=0

Enfin je ne comprends pas pourquoi la 1ère valeur de la liste est exclue du traitement.

Code:

for valeur in valeurPossible[1:] : #pour chaque des valeurs du champ de tri

Dernière modification par kant_ein (Wed 14 November 2018 09:35)

Hors ligne

 

#13 Thu 09 January 2020 10:35

CedricO
Participant occasionnel
Lieu: Epinal
Date d'inscription: 21 Nov 2013
Messages: 11
Site web

Re: éclater un shape en plusieurs shape distincts

Bonjour,

Je viens de réutiliser le code python.

Dans la ligne: arcpy.Select_analysis (couche,coucheSortie,"\"%s\"='(%s)' " %(champDeTri,valeur)) , les parenthèses dans le where sont mal placées, ce qui engendre un résultat vide ex; "sig_coop_d"='(Lor_Ex05)' au lieu de "sig_coop_d"='Lor_Ex05'. Si les parenthèdes sont necessaire dans votre cas, il les faut à l'extérieur des guillement "\"%s\"=('%s'). C'est donc:

Code:

arcpy.Select_analysis (couche,coucheSortie,"\"%s\"='%s' " %(champDeTri,valeur))  # on exporte la couche

Voici mon code autonome avec des print de contrôle et les valeurs de tri dans le nom de shape en sortie:

Code:

import arcpy,os  # import des modules

arcpy.env.overwriteOutput = True #autorise le remplacement du géotraitement

couche = r"L:\Bureau_Epinal\cedric\fusion_secteur.shp" #la couche en entree
sortie=r"L:\Bureau_Epinal\cedric" #le repertoire - dossier de sortie
champDeTri="sig_coop_d" # le champ de tri

valeurPossible=[]     # on cree une liste vide qui va contenir toutes les valeurs possibles du champ de tri
table=arcpy.SearchCursor(couche) #on parcourt la table

for ligne in table :
    valeurChamp=ligne.getValue(champDeTri)
    print ("trouver : ", valeurChamp)
    print ("existe : ",valeurChamp not in valeurPossible)

    if valeurChamp not in valeurPossible :
        valeurPossible.append(valeurChamp) #on ajoute dans la liste des valeurs possibles chaque nouvelle valeur trouvee

for valeur in valeurPossible : #pour chaque des valeurs du champ de tri
    print valeur
    compteur+=1 # on met un compteur pour faire une sortie fichier_1, fichier_2
    coucheSortie=sortie +"/" + os.path.basename(couche).split('.')[0] + "_" + str(valeur) # on genere un  nom pour la couche en sortie
    where = "\"%s\"='%s' " %(champDeTri,valeur)
    print where
    arcpy.Select_analysis (couche,coucheSortie,where)  # on exporte la couche

print "Terminer"

Dernière modification par CedricO (Thu 09 January 2020 10:36)

Hors ligne

 

Pied de page des forums

Powered by FluxBB