Skip to content

Instantly share code, notes, and snippets.

@RCura
Created March 20, 2013 10:05
Show Gist options
  • Save RCura/745c7c03b5bf6b6f59d9 to your computer and use it in GitHub Desktop.
Save RCura/745c7c03b5bf6b6f59d9 to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
from osgeo import ogr
roadShpPath = "D:\\DonneesM2\\UMZ_2000_Cut.shp"
fieldToUse = 'Type'
driver = ogr.GetDriverByName("ESRI Shapefile")
datasource = driver.Open(roadShpPath)
layer = datasource.GetLayer()
layerFields = layer.GetLayerDefn()
layerList = []
for i in xrange(layerFields.GetFieldCount()):
layerList.append(layerFields.GetFieldDefn(i).GetName())
fieldIndex = layerList.index(fieldToUse)
# 1 - On récupere les valeurs de l'attribut
uniqueValuesList = []
# On boucle sur toutes les entités, et on ajoute la valeur si pas déjà dans la liste
feat = layer.GetNextFeature()
while feat is not None:
featAttributeValue = feat.GetFieldAsString(fieldIndex)
try:
uniqueValuesList.index(featAttributeValue)
except ValueError:
uniqueValuesList.append(featAttributeValue)
feat.Destroy()
feat = layer.GetNextFeature()
# 2 - On lance une boucle
# Première boucle sur les attributs
for i in uniqueValuesList:
# On crée le shp qui accueillera nos valeurs
# Il sera nommé comme le shape original, auquel on ajoute _value
newShapePath = roadShpPath.rstrip('.shp') + '_' + str(i) + '.shp'
newDriver = ogr.GetDriverByName('ESRI Shapefile')
newDS = newDriver.CreateDataSource(newShapePath)
newDS.CopyLayer(layer, str(i))
newLayer = newDS.GetLayer()
sqlQuery = fieldToUse + " <> '" + str(i) + "'"
newLayer.SetAttributeFilter(sqlQuery)
newFeat = newLayer.GetNextFeature()
featToDeleteList = []
while newFeat is not None:
featToDeleteList.append(newFeat.GetFID())
newFeat.Destroy()
newFeat = newLayer.GetNextFeature()
featToDeleteList.sort()
featToDeleteList.reverse()
for featFID in featToDeleteList:
newLayer.DeleteFeature(featFID)
newDS.Destroy()
datasource.Destroy()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment