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: 1663

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

Powered by FluxBB