Utilisez Fiona de Sean Gillies, un wrapper très simple de la bibliothèque OGR ( The Fiona User Manual )
Tous les éléments d'un fichier de formes (schéma, enregistrements) sont traités à l'aide de dictionnaires Python:
schéma d'un de mes fichiers de formes comme exemple:
{'geometry': 'LineString', 'properties': {u'faille': 'str:20', u'type': 'str:20', u'id': 'int'}}
un enregistrement dans le fichier de formes:
{'geometry': {'type': 'LineString', 'coordinates': [(269884.20917418826, 151805.1917153612), (270409.89083992655, 153146.21637285672), (272298.05355768028, 154047.38494269375), (272941.74539327814, 155484.96337552898), (272169.31519056071, 156117.92701386689)]}, 'id': '1', 'properties': {'faille': u'de Salinas', 'type': u'normale'}}
donc pour dupliquer un fichier de formes:
from shapely.geometry import mapping, shape
import fiona
# Read the original Shapefile
with fiona.collection('original.shp', 'r') as input:
# The output has the same schema
schema = input.schema.copy()
# write a new shapefile
with fiona.collection(''file1.shp', 'w', 'ESRI Shapefile', schema) as output:
for elem in input:
output.write({'properties': elem['properties'],'geometry': mapping(shape(elem['geometry']))})
Si vous souhaitez diviser un grand fichier de formes en plusieurs plus petits, tout se déroule dans la boucle for mais tous les schémas du fichier de formes d'origine sont conservés dans le dictionnaire avec schema = input.schema.copy()
et{'properties': elem['properties']
voir Comment trouver le relèvement d'une ligne vectorielle dans QGIS ou GRASS? pour un exemple de
- fractionnement d'un fichier de formes
- conserver les attributs du fichier de formes d'origine dans le fichier de formes fractionné
- et ajouter un nouveau champ dans le fichier de formes divisé
Pour les utilisateurs de Mac OS X ou Linux, il est facile à installer. Pour les utilisateurs de Windows, utilisez la version de Christoph Gohlke Unofficial Windows Binaries for Python Extension Packages