bal_2_osm.py 2.4 KB
Newer Older
1
2
3
#!/usr/bin/env python
# coding: utf-8

Lionel VIDALLER's avatar
Lionel VIDALLER committed
4
import sys
5
6
7
import pandas as pd
import osmium

Lionel VIDALLER's avatar
Lionel VIDALLER committed
8
fichier_bal = sys.argv[1]+'/bal_200046977.csv'
9
fichier_codes = './correspondance-code-insee-code-postal-gl.csv'
Lionel VIDALLER's avatar
Lionel VIDALLER committed
10
fichier_pbf =  sys.argv[1]+'/'+sys.argv[2]
11
12
13
14
15
16
17
18
19
20
21


# premier indice osm_id dans les données résultat
# start_id = 100000000000
start_id = 1000


df = pd.read_csv(fichier_bal,sep=';',header=0,index_col='cle_producteur',decimal='.',encoding='utf-8')

df = df.drop(['x', 'y'], axis=1)

22
23
24
25
26
if df['numero'].isnull().sum() > 0:
    dk = df['numero']
    index_with_nan = dk.index[dk.isnull()]
    dk.drop(index_with_nan,0, inplace=True)

27
28
29
# remplacement des valeurs nulles à '' dans 'numero'
df.loc[df['numero'].isnull(), 'numero'] = ''
df = df.astype({'numero': str})
30
31
32
33
34
35

# teste si les valeurs non nulles sont des entiers
if dk.astype(str).str.match("^[0-9]+.0$").all():
    # si oui, les entiers ont été transformés en flottant (.0) dans l'opération, suppression de la décimale
    df['numero'] = df['numero'].str[:-2]

36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
df['numero'] = df['numero'].replace('99999', '')

# remplacement des valeurs nulles à '' dans 'suffixe'
df.loc[df['suffixe'].isnull(), 'suffixe'] = ''
df = df.astype({'suffixe': str})

# extraction du code insee de la clé interop (utilisé pour la jointure avec les codes postaux)
df['insee'] = df['cle_interop'].str[:5]
df = df.astype({'insee': int})

df['addr:housenumber'] = df.numero.str.cat(df.suffixe,sep='')

df.rename(columns={'voie_nom': 'addr:street', 'commune_nom': 'addr:city', 'long': 'lon', 'date_der_maj': 'timestamp'}, inplace=True)


df_codes = pd.read_csv(fichier_codes,sep=';',header=0,index_col=False,decimal='.',encoding='utf-8')
del df_codes['Commune']
df_codes.rename(columns={'Code INSEE': 'insee', 'Code Postal': 'addr:postcode'}, inplace=True)
df_codes = df_codes.astype({'addr:postcode': str})


df = pd.merge(df, df_codes, on='insee')


60
# écriture du fichier osm.pbf
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
writer = osmium.SimpleWriter(fichier_pbf)

i = 0


for index, row in df.iterrows():

    tags = {'addr:country':'FR', 'addr:city':row['addr:city'], 'addr:postcode':row['addr:postcode'], 'addr:street':row['addr:street']}

    if row['addr:housenumber'] != '':
        tags['addr:housenumber'] = row['addr:housenumber']

    tags['source'] = row['source']

    n = osmium.osm.mutable.Node(location=(row['lon'],row['lat']), id=(start_id+i), visible=True, tags=tags)
    n.user_is_anonymous = True

    writer.add_node(n)

    i += 1

writer.close()