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