From 80451562cc34e94c8622d5019d7e23cfbe54a9b3 Mon Sep 17 00:00:00 2001 From: Pierre LD Date: Thu, 3 Oct 2024 14:56:12 +0200 Subject: [PATCH] Update routes.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ajoute la possibilité de mettre un geom en 4326 ou 2154 comme paramètre dans l'url. Ce qui permet de retourner les intersections avec les différentes zonages. Les autres filtres sont cumulables ce qui permet d'obtenir directement via l'api la commune ou la maille. Exemple fonctionnel sur mon server https://geonature.bretagne-vivante.org/api/geo/areas?geom=POINT(-3.168399%2047.316017) https://geonature.bretagne-vivante.org/api/geo/areas?geom=POINT(-3.168399%2047.316017)&type_code=ORA&enable=all --- src/ref_geo/routes.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/ref_geo/routes.py b/src/ref_geo/routes.py index 3cb6a50..27689aa 100644 --- a/src/ref_geo/routes.py +++ b/src/ref_geo/routes.py @@ -192,7 +192,27 @@ def get_areas(): .options(joinedload("area_type").load_only("type_code")) .order_by(LAreas.area_name.asc()) ) - + # Detect geom in param + geom_param = request.args.get('geom') + if geom_param: + try: + # print("Received geometry parameter:", geom_param) + geom_shape = wkt.loads(geom_param) + # Detect the SRID of the input geometry + input_srid = 4326 # Default to 4326 + if geom_shape.is_valid and hasattr(geom_shape, 'srid'): + input_srid = geom_shape.srid if geom_shape.srid else 4326 + # print("Input geometry SRID:", input_srid) + geom_filter = from_shape(geom_shape, srid=input_srid) + # Transform geometry to match the database's SRID (2154) if needed + if input_srid != 2154: + geom_filter = func.ST_Transform(geom_filter, 2154) + query = query.where(LAreas.geom.ST_Intersects(geom_filter)) + # print("Query after adding geometry filter:", query) + except Exception as e: + # print("Error processing geometry:", str(e)) + return {"message": "Invalid geometry format.", "status": "error"}, 400 + if "enable" in params: enable_param = params["enable"].lower() accepted_enable_values = ["true", "false", "all"]