#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: 1670
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