def calc_occurs(target, result, field_name, field_type, field_length): """ Calculates frequencies on a field in target (table, feature, shp) and returns a table of results. """ # création du dictionnaire (temporaire) des occurences/fréquences dico_freq = {} # création de la table résultat (= en sortie) new_table(path.split(result)[0], path.split(result)[1]) # curseurs pour parcourir (r = read) et écrire (w = write) les données ligne par ligne curs_r = SearchCursor(target, "", "", field_name) curs_w = InsertCursor(result) # ajout des 2 champs dans la table résultat add_field(result, "OCCUR", field_type, "", "", field_length) add_field(result, "FREQ", "SHORT") # calcul et ajout au dictionnaire intermédiaire for obj in curs_r: value = obj.getValue(field_name) if dico_freq.has_key(value): dico_freq[value] = dico_freq.get(value)+1 else: dico_freq[value] = 1 del curs_r # mise à jour de la table résultats for occur in dico_freq.keys(): row = curs_w.newRow() row.OCCUR = occur row.FREQ = dico_freq.get(occur) curs_w.insertRow(row) # nettoyage des curseurs (pour éviter le verrouillage des données = .lock) del row, curs_w # fin de fonction return dico_freq
clc_nat = clc + "_zones_nats" sel_analyz(clc, clc_nat, expr_sel_codes_nat) clc_nat_diss = clc_nat + "_dissolved" dissout(clc_nat, clc_nat_diss) print u"\n\t- ZONES NATURELLES -\nZones naturelles isolées et fusionnées" # sélection des routes aux vocations voulues expr_sel_routes_vocations = '"VOCATION" IN %s' % str(('1', '2', '6')) routes_class = bd_carto + "_vocas" sel_analyz(bd_carto, routes_class, expr_sel_routes_vocations) print u"\n\t- RESEAU ROUTIER -\nRoutes isolées selon les vocations" # ajout d'un champ destiné à la taille du tampon aux données de routes add_field(routes_class, "buffer_siz", "SHORT") print u"Champ pour les zones tampons créé" # mise à jour du champ du buffer selon les types de route expr_calc_buffer_routes = "buffer_size(!USAGE!, !NB_VOIES!)" cb_routes_type_voies = """def buffer_size(usage, nb_voies): if usage == '2': return '10' elif usage == '3': return '8' elif usage == '1' and nb_voies != '5': return '25' elif usage == '1' and nb_voies == '5': return '15' elif usage == '1' and nb_voies == 'S': return '8'"""