def get_dict_fantoir(code_departement, code_commune): """ Retourne un dictionnaire qui mappe un nom normalizé du Fantoir (nature + libele de la voie) vers un tuple (string, boolean) représentant le CODE FANTOIR, et s'il s'agit d'un lieu dit non bâti (place=locality). """ code_insee = cadastre.code_insee(code_departement, code_commune) dict_fantoir = {} try: db_cursor = addr_fantoir_building.get_pgc().cursor() sql_query = ''' SELECT code_insee||id_voie||cle_rivoli, nature_voie||' '||libelle_voie, type_voie, ld_bati FROM fantoir_voie WHERE code_insee = \'''' + code_insee + '''\' AND caractere_annul NOT IN ('O','Q');''' db_cursor.execute(sql_query) for result in db_cursor: code_fantoir = result[0] nom_fantoir = ' '.join(result[1].replace('-',' ').split()) #lieu_dit_non_bati = (result[2] == '3') and (result[3] == '0') highway = result[2] in ['1', '4', '5'] dict_fantoir[normalize(nom_fantoir)] = (code_fantoir, highway) assert(len(dict_fantoir) > 0) return dict_fantoir except: # La connexion avec la base SQL a du échouer, on # charge les fichiers zip fantoir manuellement: filename = FANTOIR_ZIP ok_filename = filename + ".ok" if not (os.path.exists(filename) and os.path.exists(ok_filename)): sys.stdout.write("Téléchargement du fichier Fantoir " + FANTOIR_URL + "\n") if os.path.exists(filename): os.remove(filename) if os.path.exists(ok_filename): os.remove(ok_filename) write_stream_to_file(urllib2.urlopen(FANTOIR_URL), filename) open(ok_filename, "a").close() else: sys.stdout.write("Lecture du fichier FANTOIR.zip") sys.stdout.flush() num_commune = code_insee[2:5] debut = get_fantoir_code_departement(code_departement) + num_commune for line in ZipFile(filename, "r").open("FANTOIR.txt"): if line.startswith(debut): if line[108:109] != ' ': # C'est un unregistrement de voie if line[73] == ' ': # la voie n'est pas annulée assert(code_insee == line[0:2] + line[3:6]) id_voie = line[6:10] cle_rivoli = line[10] nature_voie = line[11:15].strip() libele_voie = line[15:41].strip() code_fantoir = code_insee + id_voie + cle_rivoli nom_fantoir = nature_voie + " " + libele_voie #lieu_dit_non_bati = line[108:110] == '30' highway = line[108:109] in ['1', '4', '5'] dict_fantoir[normalize(nom_fantoir)] = \ (code_fantoir, highway) return dict_fantoir
def open_osm_ways_commune(code_departement, code_commune, type_way, filtre="", nodes=False): cache_filename = code_commune + "-" + type_way + "s.osm" code_insee = cadastre.code_insee(code_departement, code_commune) area = 3600000000 + addr_fantoir_building.dicts.osm_insee[code_insee] requete_overpass = '******' % (area, type_way, filtre) if nodes: requete_overpass += "(._;>;);" requete_overpass += "out meta;" sys.stdout.write((u"Récupération des " + type_way + " de la commune\n").encode("utf-8")) return open_osm_overpass(requete_overpass, cache_filename, metropole=code_departement.startswith("0"))
def open_osm_ways_commune(code_departement, code_commune, type_way, filtre="", nodes=False): cache_filename = code_commune + "-" + type_way + "s.osm" code_insee = cadastre.code_insee(code_departement, code_commune) area = 3600000000 + addr_fantoir_building.dicts.osm_insee[code_insee] requete_overpass = '******' % (code_insee, type_way, filtre) if nodes: requete_overpass += "(._;>;);" requete_overpass += "out;" sys.stdout.write((u"Récupération des " + type_way + " de la commune\n").encode("utf-8")) return open_osm_overpass(requete_overpass, cache_filename, metropole=code_departement.startswith("0"))
def open_osm_multipolygon_s_ways_commune(code_departement, code_commune, type_multipolygon, filtre="", nodes=False): cache_filename = code_commune + "-multipolygon_" + type_multipolygon + "s.osm" code_insee = cadastre.code_insee(code_departement, code_commune) area = 3600000000 + addr_fantoir_building.dicts.osm_insee[code_insee] requete_overpass = '******' % (area, type_multipolygon, filtre) if nodes: requete_overpass += "(._;>;);" requete_overpass += "out meta;" sys.stdout.write((u"Récupération des multipolygon " + type_multipolygon + " de la commune\n").encode("utf-8")) return open_osm_overpass(requete_overpass, cache_filename, metropole=code_departement.startswith("0"))
def get_dict_fantoir(code_departement, code_commune): """ Retourne un dictionnaire qui mappe un nom normalizé du Fantoir (nature + libele de la voie) vers le code Fantoir. """ code_insee = cadastre.code_insee(code_departement, code_commune) try: addr_fantoir_building.pgc = addr_fantoir_building.get_pgc() addr_fantoir_building.dicts.load_fantoir(code_insee) assert len(addr_fantoir_building.dicts.fantoir) > 0 return addr_fantoir_building.dicts.fantoir except: # La connexion avec la base SQL a du échouer, on # charge les fichiers zip fantoir manuellement: dict_fantoir = {} zip_filename = get_fantoir_zip_filename(code_departement) filename = os.path.join(FANTOIR_DIR, zip_filename) ok_filename = filename + ".ok" if not (os.path.exists(filename) and os.path.exists(ok_filename)): sys.stdout.write("Téléchargement du fichier Fantoir " + zip_filename + "\n") if os.path.exists(filename): os.remove(filename) if os.path.exists(ok_filename): os.remove(ok_filename) if not os.path.exists(FANTOIR_DIR): os.mkdir(FANTOIR_DIR) write_stream_to_file(urllib2.urlopen(FANTOIR_URL + zip_filename), filename) open(ok_filename, "a").close() else: sys.stdout.write("Lecture du fichier Fantoir " + zip_filename + "\n") sys.stdout.flush() txt_filename = get_fantoir_txt_filename(code_departement) num_commune = code_insee[2:5] for line in ZipFile(filename, "r").open(txt_filename): if line[3:6] == num_commune: if line[108:109] != " ": # C'est un unregistrement de voie if line[73] == " ": # la voie n'est pas annulée assert code_insee == line[0:2] + line[3:6] id_voie = line[6:10] cle_rivoli = line[10] nature_voie = line[11:15].strip() libele_voie = line[15:41].strip() code_fantoir = code_insee + id_voie + cle_rivoli nom_fantoir = nature_voie + " " + libele_voie dict_fantoir[normalize(nom_fantoir)] = code_fantoir return dict_fantoir
def get_dict_fantoir(code_departement, code_commune): """ Retourne un dictionnaire qui mappe un nom normalizé du Fantoir (nature + libele de la voie) vers le code Fantoir. """ code_insee = cadastre.code_insee(code_departement, code_commune) try: addr_fantoir_building.pgc = addr_fantoir_building.get_pgc() addr_fantoir_building.dicts.load_fantoir(code_insee) assert(len(addr_fantoir_building.dicts.fantoir) > 0) return addr_fantoir_building.dicts.fantoir except: # La connexion avec la base SQL a du échouer, on # charge les fichiers zip fantoir manuellement: dict_fantoir = {} zip_filename = get_fantoir_zip_filename(code_departement) filename = os.path.join(FANTOIR_DIR, zip_filename) ok_filename = filename + ".ok" if not (os.path.exists(filename) and os.path.exists(ok_filename)): sys.stdout.write("Téléchargement du fichier Fantoir " + zip_filename + "\n") if os.path.exists(filename): os.remove(filename) if os.path.exists(ok_filename): os.remove(ok_filename) if not os.path.exists(FANTOIR_DIR): os.mkdir(FANTOIR_DIR) write_stream_to_file(urllib2.urlopen(FANTOIR_URL + zip_filename), filename) open(ok_filename, "a").close() else: sys.stdout.write("Lecture du fichier Fantoir " + zip_filename + "\n") sys.stdout.flush() txt_filename = get_fantoir_txt_filename(code_departement) num_commune = code_insee[2:5] for line in ZipFile(filename, "r").open(txt_filename): if line[3:6] == num_commune: if line[108:109] != ' ': # C'est un unregistrement de voie if line[73] == ' ': # la voie n'est pas annulée assert(code_insee == line[0:2] + line[3:6]) id_voie = line[6:10] cle_rivoli = line[10] nature_voie = line[11:15].strip() libele_voie = line[15:41].strip() code_fantoir = code_insee + id_voie + cle_rivoli nom_fantoir = nature_voie + " " + libele_voie dict_fantoir[normalize(nom_fantoir)] = code_fantoir return dict_fantoir