#1 Sat 22 October 2011 18:19
- Marinedu69
- Participant occasionnel
- Date d'inscription: 1 Oct 2011
- Messages: 13
Création de shapefiles par polygones
Bonjour Ă tous,
J'ai 22 shapefiles comportant chacun plusieurs miliers de polygones. Ma question est : comment créer un shapefile par polygones de maniÚre rapide ?
Par exemple pour le 1er shp comportant 500 polygones, comment créer rapidement 500 shp correspondants aux 500 polygones ? Et je dois faire ça pour les 22 shp. Je commence à paniquer car il me semble que je vais devoir passer par un code VBA ou python et je ne suis pas du tout une programmeuse avertie ? Auriez-vous quelques idées à me suggérer ?
Merci pour votre aide.
marine
Hors ligne
#2 Mon 24 October 2011 11:05
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1769
Re: Création de shapefiles par polygones
Bonjour,
Dans quel but dois-tu créer autant de shapefiles que de polygones?
Hors ligne
#3 Mon 24 October 2011 13:10
- dominique.lys
- Participant assidu
- Date d'inscription: 5 Oct 2006
- Messages: 473
- Site web
Re: Création de shapefiles par polygones
Bonjour,
Comme j'avais en stock un bout de code Python assez proche de l'idée, le voici un peu adapté.
Il te faut Python d'installĂ© (ce qui devrait dĂ©jĂ ĂȘtre fait si tu as ArcGIS) et la librairie pyshp dispo ici : http://code.google.com/p/pyshp/
Il suffit de télécharger le fichier shapefile.py et de le copier dans "C:\Python2x\Lib\site-packages"
Ensuite copier le code ci-dessous dans un nouveau fichier d'extension *.py. Avant de lâexĂ©cuter avec Python il faut modifier les dossiers d'entrĂ©e et de sortie dĂ©finis dans le code (sous INPUTS).
Bien sûr le code est librement modifiable selon tes besoins. A noter aussi qu'il est complétement indépendant d'ArcGIS.
Code:
# -*- coding:Latin-1 -*-
import os, sys
import shapefile
#FONCTIONS
def filesList(inFolder, ext):
"""Lister les fichiers d'un dossier. La liste est filtrée selon une extension donnée"""
lst = os.listdir(inFolder)
extLst=[elem for elem in lst if os.path.splitext(elem)[1]==ext]
extLst.sort()
return extLst
def addZeros(num, precision):
"""Retourne une chaine représentant le nombre en entrée préfixé
de zeros afin que la longueur de la chaine soit égale à la precision"""
numZeros=str(num)
while len(numZeros)<precision: numZeros='0'+numZeros
return numZeros
#INPUTS
inFolder="C:\\Documents and Settings\\dominique\\Bureau"
outFolder="C:\\Documents and Settings\\dominique\\Bureau\\output"
#MAIN
shpList=filesList(inFolder, '.shp')
for pathShp in shpList:
shp=shapefile.Reader(pathShp)
shapeRec = shp.shapeRecords()
fields=shp.fields
for idx,entity in enumerate(shapeRec):
geomType=entity.shape.shapeType
NewShp = shapefile.Writer(geomType)
NewShp.fields = list(fields)
NewShp._shapes.extend([entity.shape])#argument doit ĂȘtre itĂ©rable --> conversion en list nĂ©cessaire
NewShp.records.extend([entity.record])#idem
#Saving
basename=os.path.basename(pathShp)
fileName=basename[:-4]
extension=basename[len(basename)-4:len(basename)]
NewShp.save(outFolder+os.sep+fileName+'_'+addZeros(idx,5)+extension)Hors ligne

