File size: 3,201 Bytes
b411033
ee194aa
b411033
ee194aa
 
4f316ba
b411033
 
 
 
 
 
 
 
4f316ba
ee194aa
 
 
4f316ba
 
 
b411033
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ee194aa
 
 
 
 
 
 
e6ce7f9
ee194aa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e6ce7f9
 
 
 
ee194aa
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
from fastapi import FastAPI, HTTPException, Query
from typing import Dict, Any, List
from api_sources.lexicon import LexiconAPI
from domain.repositories.parcel_repository import ParcelRepository
from domain.use_cases.get_nearby_parcels_by_sampling import GetNearbyParcelsBySamplingUseCase

app = FastAPI(
    title="Data API",
    description="API pour récupérer des données de parcelles depuis différentes sources",
    version="1.0.0"
)

# Instance de l'API Lexicon
lexicon_api = LexiconAPI()

# Repository et use cases
parcel_repository = ParcelRepository(lexicon_api)

@app.get("/")
def greet_json():
    return {"Hello": "World!"}

@app.get("/tools/parcel-identifier")
async def get_parcel_identifier(
    latitude: float = Query(..., description="Latitude en degrés décimaux"),
    longitude: float = Query(..., description="Longitude en degrés décimaux")
) -> Dict[str, Any]:
    """
    Récupère les informations d'identification de parcelle à partir des coordonnées GPS.
    
    Args:
        latitude: Latitude en degrés décimaux
        longitude: Longitude en degrés décimaux
        
    Returns:
        Dict contenant les données de la parcelle
    """
    try:
        # Appel de l'API Lexicon pour récupérer les données
        parcel_data = await lexicon_api.get_parcel_from_lat_lon(latitude, longitude)
        return parcel_data
    
    except Exception as e:
        raise HTTPException(
            status_code=500, 
            detail=f"Erreur lors de la récupération des données de parcelle: {str(e)}"
        )

@app.get("/tools/get_nearby_parcel")
async def get_nearby_parcels(
    latitude: float = Query(..., description="Latitude du point central en degrés décimaux"),
    longitude: float = Query(..., description="Longitude du point central en degrés décimaux"),
    radius_m: float = Query(200, description="Rayon de recherche en mètres", gt=0),
    step_m: float = Query(100, description="Pas d'échantillonnage en mètres (densité des points)", gt=0)
) -> Dict :
    """
    Récupère les parcelles à proximité d'un point donné par échantillonnage.
    
    Args:
        latitude: Latitude du point central en degrés décimaux
        longitude: Longitude du point central en degrés décimaux  
        radius_m: Rayon de recherche en mètres
        step_m: Pas d'échantillonnage en mètres (plus petit = plus dense)
        
    Returns:
        Liste des parcelles trouvées dans la zone
    """
    try:

        # Création du use case avec les paramètres
        get_nearby_parcels_use_case = GetNearbyParcelsBySamplingUseCase(
            parcel_repository=parcel_repository,
            buffer_radius_m=radius_m,
            step_m=step_m
        )
        
        # Exécution du use case
        nearby_parcels = await get_nearby_parcels_use_case(latitude, longitude)
        
        return {
            "parcels": nearby_parcels["parcels"], 
            "number_of_points": nearby_parcels["number_of_points"]
        }
    
    except Exception as e:
        raise HTTPException(
            status_code=500,
            detail=f"Erreur lors de la récupération des parcelles à proximité: {str(e)}"
        )