From cba94b2caa60316343b66286faabcc8219fa064a Mon Sep 17 00:00:00 2001 From: SebF Date: Mon, 1 Nov 2021 18:57:57 +0100 Subject: [PATCH 1/7] =?UTF-8?q?utilisation=20d'une=20requ=C3=AAte=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- osm_vc63/requetes.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/osm_vc63/requetes.py b/osm_vc63/requetes.py index bd22861..92001d0 100644 --- a/osm_vc63/requetes.py +++ b/osm_vc63/requetes.py @@ -93,13 +93,13 @@ CHAMPS_ADRESSE = { # pylint: disable=C0301 STATIONNEMENT_NON_PUBLIC_REQ = r'nwr["amenity"="bicycle_parking"]["access"~"(no|permit|private|customers|permissive)"](area:aire_de_recherche);' -REQS.append( +""" REQS.append( Requete( "stationnements_velos_non_publics", STATIONNEMENT_NON_PUBLIC_REQ, dict(CHAMPS_STATIONNEMENT, **CHAMPS_ADRESSE), ) -) +) """ REQS.append( Requete( @@ -109,7 +109,7 @@ REQS.append( dict(CHAMPS_STATIONNEMENT, **CHAMPS_ADRESSE), ) ) - +""" CHAMP_LOCAL = {"service:bicycle:diy": {"export_json": "Non", "FR": ""}} REQS.append( Requete( @@ -164,3 +164,4 @@ REQS.append( dict(CHAMP_LOCAL, **CHAMPS_POI, **CHAMPS_ADRESSE), ) ) + """ From dfd8d264b44b4a8c8361fb1cdaf8d30ddc1001c5 Mon Sep 17 00:00:00 2001 From: SebF Date: Mon, 1 Nov 2021 18:58:42 +0100 Subject: [PATCH 2/7] =?UTF-8?q?m=C3=A9thode=20d'appel=20csv=20g=C3=A9ocoda?= =?UTF-8?q?ge=20inverse?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- osm_vc63/utils.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++ rdoo.py | 3 ++- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/osm_vc63/utils.py b/osm_vc63/utils.py index b06fafb..d329ebd 100644 --- a/osm_vc63/utils.py +++ b/osm_vc63/utils.py @@ -25,6 +25,7 @@ import os import datetime import shutil import pathlib +import csv from collections import OrderedDict import requests from pyexcel_ods3 import save_data @@ -160,6 +161,18 @@ class Utils: return response.json() + def run_reverse_geocoding_csv(self, lat, lon): + """Retourne une adresse JSON à partir d'une position GPS.""" + + url = self.geo_api_url + "/reverse/" + + response = requests.get(url, params={"lon": str(lon), "lat": str(lat)}) + + if response.status_code != 200: + raise errors.GeoApiError(response.status_code) + + return response.json() + def geocodage(self, data): """Renseigne une adresse pour chaque élément de data""" @@ -224,6 +237,42 @@ class Utils: return data + def geocodage_csv(self, data2): + """ + Renseigne une adresse pour chaque élément de data + en une fois via csv + """ + + url = self.geo_api_url + "/reverse/csv/" + + with open("output.csv", "w", newline="") as data_to_file: + + csv_writer = csv.writer(data_to_file) + + for element in data2["elements"]: + if element["type"] == "node": + csv_writer.writerow([element["lat"], element["lon"]]) + else: + csv_writer.writerow( + [element["center"]["lat"], element["center"]["lon"]] + ) + + response = requests.post( + url, + files=OrderedDict( + [("data", ("output.csv", open("output.csv", "rb").read()))] + ), + ) + + if response.status_code != 200: + raise errors.GeoApiError(response.status_code) + + print(response) + + logging.info("Géocodage inversé terminé") + + return data2 + def traduction(self, tag, dictionnaire, data): """Traduit le champ tag des éléments de data avec dict""" diff --git a/rdoo.py b/rdoo.py index 98762e8..adc8f9d 100644 --- a/rdoo.py +++ b/rdoo.py @@ -169,7 +169,8 @@ def main(): if nb_resultats > 0: if args.geocoding_inverse: # géocodage inverse - data = utils.geocodage(data) + # data = utils.geocodage(data) + data = utils.geocodage_csv(data) # traduction data = utils.traduction( From bebc0602a924a9b61ada1a7cae41ce8bd7039cd6 Mon Sep 17 00:00:00 2001 From: SebF Date: Mon, 1 Nov 2021 19:30:44 +0100 Subject: [PATCH 3/7] correction de l'appel : header manquant --- osm_vc63/utils.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/osm_vc63/utils.py b/osm_vc63/utils.py index d329ebd..d3dea7a 100644 --- a/osm_vc63/utils.py +++ b/osm_vc63/utils.py @@ -237,7 +237,7 @@ class Utils: return data - def geocodage_csv(self, data2): + def geocodage_csv(self, data): """ Renseigne une adresse pour chaque élément de data en une fois via csv @@ -245,11 +245,12 @@ class Utils: url = self.geo_api_url + "/reverse/csv/" - with open("output.csv", "w", newline="") as data_to_file: + # création du fichier à envoyer à l'API + with open("tmp_geocodage.csv", "w", newline="") as tmp_csv_file: + csv_writer = csv.writer(tmp_csv_file) + csv_writer.writerow(["lat", "lon"]) - csv_writer = csv.writer(data_to_file) - - for element in data2["elements"]: + for element in data["elements"]: if element["type"] == "node": csv_writer.writerow([element["lat"], element["lon"]]) else: @@ -257,21 +258,20 @@ class Utils: [element["center"]["lat"], element["center"]["lon"]] ) - response = requests.post( - url, - files=OrderedDict( - [("data", ("output.csv", open("output.csv", "rb").read()))] - ), + # préparation et envoi de la requête + payload = dict( + [("data", ("tmp_geocodage.csv", open("tmp_geocodage.csv", "rb").read()))] ) + response = requests.post(url, files=payload) + + os.remove("tmp_geocodage.csv") if response.status_code != 200: raise errors.GeoApiError(response.status_code) - print(response) - logging.info("Géocodage inversé terminé") - return data2 + return data def traduction(self, tag, dictionnaire, data): """Traduit le champ tag des éléments de data avec dict""" From 0f5bc4ba1686dc2d830425eedb5145a8515bcdc8 Mon Sep 17 00:00:00 2001 From: SebF Date: Mon, 1 Nov 2021 21:10:43 +0100 Subject: [PATCH 4/7] affectation des addresses obtenues --- osm_vc63/utils.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/osm_vc63/utils.py b/osm_vc63/utils.py index d3dea7a..a7043aa 100644 --- a/osm_vc63/utils.py +++ b/osm_vc63/utils.py @@ -264,11 +264,43 @@ class Utils: ) response = requests.post(url, files=payload) + # nettoyage os.remove("tmp_geocodage.csv") if response.status_code != 200: raise errors.GeoApiError(response.status_code) + # affectation des addresses + for element in data["elements"]: + for row in csv.DictReader(response.text.splitlines()): + lat_ok = row["lat"] == str(element["lat"]) + lon_ok = row["lon"] == str(element["lon"]) + if lat_ok and lon_ok: + element["tags"]["api_adresse:geometry:coordinates:lon"] = row[ + "result_longitude" + ] + element["tags"]["api_adresse:geometry:coordinates:lat"] = row[ + "result_latitude" + ] + element["tags"]["api_adresse:properties:label"] = row[ + "result_label" + ] + element["tags"]["api_adresse:properties:housenumber"] = row[ + "result_housenumber" + ] + element["tags"]["api_adresse:properties:type"] = row["result_type"] + element["tags"]["api_adresse:properties:name"] = row["result_name"] + element["tags"]["api_adresse:properties:postcode"] = row[ + "result_postcode" + ] + element["tags"]["api_adresse:properties:citycode"] = row[ + "result_citycode" + ] + element["tags"]["api_adresse:properties:city"] = row["result_city"] + element["tags"]["api_adresse:properties:street"] = row[ + "result_street" + ] + logging.info("Géocodage inversé terminé") return data From f046e29a526dcdd244d736ae58c239620906580e Mon Sep 17 00:00:00 2001 From: SebF Date: Mon, 1 Nov 2021 21:12:11 +0100 Subject: [PATCH 5/7] =?UTF-8?q?Revert=20"utilisation=20d'une=20requ=C3=AAt?= =?UTF-8?q?e=20test"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit cba94b2caa60316343b66286faabcc8219fa064a. --- osm_vc63/requetes.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/osm_vc63/requetes.py b/osm_vc63/requetes.py index 92001d0..bd22861 100644 --- a/osm_vc63/requetes.py +++ b/osm_vc63/requetes.py @@ -93,13 +93,13 @@ CHAMPS_ADRESSE = { # pylint: disable=C0301 STATIONNEMENT_NON_PUBLIC_REQ = r'nwr["amenity"="bicycle_parking"]["access"~"(no|permit|private|customers|permissive)"](area:aire_de_recherche);' -""" REQS.append( +REQS.append( Requete( "stationnements_velos_non_publics", STATIONNEMENT_NON_PUBLIC_REQ, dict(CHAMPS_STATIONNEMENT, **CHAMPS_ADRESSE), ) -) """ +) REQS.append( Requete( @@ -109,7 +109,7 @@ REQS.append( dict(CHAMPS_STATIONNEMENT, **CHAMPS_ADRESSE), ) ) -""" + CHAMP_LOCAL = {"service:bicycle:diy": {"export_json": "Non", "FR": ""}} REQS.append( Requete( @@ -164,4 +164,3 @@ REQS.append( dict(CHAMP_LOCAL, **CHAMPS_POI, **CHAMPS_ADRESSE), ) ) - """ From 1d04f08264ae8fcfcf6b334a8690567a5685c1ce Mon Sep 17 00:00:00 2001 From: SebF Date: Mon, 1 Nov 2021 21:23:30 +0100 Subject: [PATCH 6/7] oubli des ways et relations --- osm_vc63/utils.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/osm_vc63/utils.py b/osm_vc63/utils.py index a7043aa..68a9965 100644 --- a/osm_vc63/utils.py +++ b/osm_vc63/utils.py @@ -273,8 +273,13 @@ class Utils: # affectation des addresses for element in data["elements"]: for row in csv.DictReader(response.text.splitlines()): - lat_ok = row["lat"] == str(element["lat"]) - lon_ok = row["lon"] == str(element["lon"]) + if element["type"] == "node": + lat_ok = row["lat"] == str(element["lat"]) + lon_ok = row["lon"] == str(element["lon"]) + else: + lat_ok = row["lat"] == str(element["center"]["lat"]) + lon_ok = row["lon"] == str(element["center"]["lon"]) + if lat_ok and lon_ok: element["tags"]["api_adresse:geometry:coordinates:lon"] = row[ "result_longitude" From 39992597cb92a43365983b3cc7b0b2f12e909ea8 Mon Sep 17 00:00:00 2001 From: SebF Date: Mon, 1 Nov 2021 21:42:22 +0100 Subject: [PATCH 7/7] =?UTF-8?q?suppression=20des=20m=C3=A9thodes=20de=20g?= =?UTF-8?q?=C3=A9ocodage=20inverse=20unitaires?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- osm_vc63/utils.py | 88 ----------------------------------------------- rdoo.py | 1 - 2 files changed, 89 deletions(-) diff --git a/osm_vc63/utils.py b/osm_vc63/utils.py index 68a9965..03a09b0 100644 --- a/osm_vc63/utils.py +++ b/osm_vc63/utils.py @@ -149,94 +149,6 @@ class Utils: return response.json() - def run_reverse_geocoding(self, lat, lon): - """Retourne une adresse JSON à partir d'une position GPS.""" - - url = self.geo_api_url + "/reverse/" - - response = requests.get(url, params={"lon": str(lon), "lat": str(lat)}) - - if response.status_code != 200: - raise errors.GeoApiError(response.status_code) - - return response.json() - - def run_reverse_geocoding_csv(self, lat, lon): - """Retourne une adresse JSON à partir d'une position GPS.""" - - url = self.geo_api_url + "/reverse/" - - response = requests.get(url, params={"lon": str(lon), "lat": str(lat)}) - - if response.status_code != 200: - raise errors.GeoApiError(response.status_code) - - return response.json() - - def geocodage(self, data): - """Renseigne une adresse pour chaque élément de data""" - - for element in data["elements"]: - - if element["type"] == "node": - rev_geocode = self.run_reverse_geocoding(element["lat"], element["lon"]) - else: - rev_geocode = self.run_reverse_geocoding( - element["center"]["lat"], element["center"]["lon"] - ) - - api_adresse = rev_geocode["features"][0] - - element["tags"]["api_adresse:geometry:coordinates:lon"] = api_adresse[ - "geometry" - ]["coordinates"][0] - element["tags"]["api_adresse:geometry:coordinates:lat"] = api_adresse[ - "geometry" - ]["coordinates"][1] - - element["tags"]["api_adresse:properties:label"] = api_adresse["properties"][ - "label" - ] - element["tags"]["api_adresse:properties:score"] = api_adresse["properties"][ - "score" - ] - - if "housenumber" in api_adresse["properties"]: - element["tags"]["api_adresse:properties:housenumber"] = api_adresse[ - "properties" - ]["housenumber"] - - element["tags"]["api_adresse:properties:type"] = api_adresse["properties"][ - "type" - ] - - element["tags"]["api_adresse:properties:name"] = api_adresse["properties"][ - "name" - ] - element["tags"]["api_adresse:properties:postcode"] = api_adresse[ - "properties" - ]["postcode"] - element["tags"]["api_adresse:properties:citycode"] = api_adresse[ - "properties" - ]["citycode"] - element["tags"]["api_adresse:properties:city"] = api_adresse["properties"][ - "city" - ] - - if "street" in api_adresse["properties"]: - element["tags"]["api_adresse:properties:street"] = api_adresse[ - "properties" - ]["street"] - - element["tags"]["api_adresse:properties:attribution"] = rev_geocode[ - "attribution" - ] - element["tags"]["api_adresse:properties:licence"] = rev_geocode["licence"] - - logging.info("Géocodage inversé terminé") - - return data - def geocodage_csv(self, data): """ Renseigne une adresse pour chaque élément de data diff --git a/rdoo.py b/rdoo.py index adc8f9d..09b4d2a 100644 --- a/rdoo.py +++ b/rdoo.py @@ -169,7 +169,6 @@ def main(): if nb_resultats > 0: if args.geocoding_inverse: # géocodage inverse - # data = utils.geocodage(data) data = utils.geocodage_csv(data) # traduction