#!/usr/bin/python
# -*- coding: iso-8859-1 -*-

import sys
import os
import osgeo.osr
import osgeo.ogr

driver = osgeo.ogr.GetDriverByName("ESRI Shapefile")
data_source = osgeo.ogr.Open(sys.argv[1])

threshold = int(sys.argv[2])

if data_source == None:
     print "Non riesco a leggere il file shape"
     sys.exit(1)

# leggi il primo (e di solito unico) layer 
layer =  data_source.GetLayer(0)

# cicla sulle features e salva i vari shp
feature = layer.GetNextFeature();
i = 0
data_source_new = None
layer_new = None
while feature:
    print i
    if( i%threshold == 0):
        # chiudi lo shape attualmente aperto (tranne la prima volta)
        if data_source_new != None:
            data_source_new.Destroy()
        # crea un nuovo shape
        data_source_new = driver.CreateDataSource(".")
        # duplica il layer
        layer_defn = layer.GetLayerDefn()
        layer_new = data_source_new.CreateLayer(
            layer_defn.GetName() + "_" + str(i/threshold),
            layer.GetSpatialRef(),
            layer_defn.GetGeomType())
        # duplica gli attributi del layer
        field_count = layer_defn.GetFieldCount()
        for j in range(field_count):
          field_defn = layer_defn.GetFieldDefn(j)
          layer_new.CreateField(field_defn)

    # scrivi la feature nel nuovo layer
    layer_new.CreateFeature(feature)

    # chiudi la feature
    feature.Destroy()

    # passa alla prossima
    i = i + 1
    feature = layer.GetNextFeature()

# chiudi l'ultimo shape aperto
if data_source_new != None:
    data_source_new.Destroy()
