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Ă© ?

#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

 

Pied de page des forums

Copyright Association GeoRezo