5.9 KiB
5.9 KiB
Crop Zoning API Guide For Frontend
این فایل برای تیم فرانت نوشته شده و رفتار endpointهای ماژول crop-zoning را به صورت کاربردی توضیح میدهد.
Base Path
/api/crop-zoning/
Authentication
- همه endpointها با تنظیم فعلی پروژه نیاز به احراز هویت دارند.
- هدر پیشنهادی:
Authorization: Bearer <access_token>
Content-Type: application/json
Flow پیشنهادی فرانت
- ابتدا
GET /area/را باsensor_uuidصدا بزنید. - اگر
task.statusبرابرPENDINGیاPROCESSINGبود، polling انجام دهید. - وقتی
task.statusبرابرSUCCESSشد:areaرا برای polygon اصلی زمین استفاده کنید.zonesرا برای grid map و کارتهای overview استفاده کنید.
- برای legend محصولات،
GET /products/را بزنید.
وضعیتهای Task
IDLE: هنوز area/taskی برای سنسور وجود ندارد.PENDING: تسک ساخته شده ولی پردازش هنوز شروع نشده یا در صف است.PROCESSING: بخشی از زونها در حال پردازش هستند یا برخی کامل شدهاند.SUCCESS: همه زونها کامل پردازش شدهاند.FAILURE: یک یا چند زون با خطا مواجه شدهاند.
Stageهای Task
waiting_to_startqueuedprocessing_zonescontinuing_processingcompletedfailed
فیلد stage_label متن فارسی آماده برای نمایش در UI است.
1) Get Area
GET /api/crop-zoning/area/?sensor_uuid=<sensor_uuid>
Query Params
sensor_uuid: اجباری، UUID سنسور
کاربرد
- گرفتن آخرین area مربوط به سنسور
- ساخت area و zoneها در صورت نبود داده
- دریافت وضعیت task
- دریافت لیست کامل
zonesبرای نمایش روی نقشه
نمونه پاسخ موفق
{
"status": "success",
"data": {
"task": {
"status": "SUCCESS",
"stage": "completed",
"stage_label": "پردازش همه زونها کامل شده است",
"area_uuid": "c0eaa4d7-92bf-4542-a60d-6010b45e7c96",
"total_zones": 364,
"completed_zones": 364,
"processing_zones": 0,
"pending_zones": 0,
"failed_zones": 0,
"remaining_zones": 0,
"progress_percent": 100,
"summary": {
"done": 364,
"in_progress": 0,
"remaining": 0,
"failed": 0
},
"message": "از مجموع 364 زون، 364 زون پردازش شده، 0 زون در حال پردازش و 0 زون باقی مانده است.",
"failed_zone_errors": [],
"cell_side_km": 0.1
},
"area": {
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [[[51.418934, 35.706815], [51.423054, 35.691062], [51.384258, 35.689389], [51.418934, 35.706815]]]
},
"properties": {
"center": {
"latitude": 35.69575533,
"longitude": 51.40874867
},
"area_sqm": 3109868.97,
"cell_side_km": 0.1,
"area_hectares": 310.9869
}
},
"zones": [
{
"zoneId": "zone-0",
"zoneUuid": "d7a9a19b-b3ec-4721-b514-9aae5c9ea940",
"geometry": {
"type": "Polygon",
"coordinates": [[[51.384258, 35.689389], [51.38536404, 35.689389], [51.38536404, 35.69028731], [51.384258, 35.69028731], [51.384258, 35.689389]]]
},
"center": {
"latitude": 35.68983816,
"longitude": 51.38481102
},
"area_sqm": 9999.91,
"area_hectares": 1,
"sequence": 0,
"processing_status": "completed",
"processing_error": "",
"crop": "wheat",
"matchPercent": 89,
"waterNeed": "4820-5820 m³/ha",
"estimatedProfit": "۱۵-۲۵ میلیون/هکتار",
"waterNeedLayer": {
"level": "medium",
"value": "4820-5820 m³/ha",
"color": "#0ea5e9"
},
"soilQualityLayer": {
"level": "high",
"score": 89,
"color": "#22c55e"
},
"cultivationRiskLayer": {
"level": "low",
"color": "#22c55e"
}
}
]
}
}
فیلدهای مهم zones
zoneId: شناسه نمایشی زون، مثلzone-0zoneUuid: UUID داخلی زونgeometry: polygon زونcenter: مرکز زونarea_sqm: مساحت به متر مربعarea_hectares: مساحت به هکتارsequence: ترتیب زونprocessing_status: یکی ازpending,processing,completed,failedprocessing_error: متن خطا در صورت failurecrop: محصول پیشنهادیmatchPercent: درصد تطابقwaterNeed: نیاز آبی پیشنهادیestimatedProfit: سود تخمینیwaterNeedLayer: داده layer نیاز آبیsoilQualityLayer: داده layer کیفیت خاکcultivationRiskLayer: داده layer ریسک کشت
خطاها
وقتی sensor_uuid ارسال نشود
{
"status": "error",
"message": "sensor_uuid is required."
}
وقتی سنسور پیدا نشود
{
"status": "error",
"message": "Sensor not found."
}
2) Get Products
GET /api/crop-zoning/products/
کاربرد
- گرفتن لیست محصولات برای legend و labelها
نمونه پاسخ
{
"status": "success",
"data": {
"products": [
{
"id": "wheat",
"label": "گندم",
"color": "#6bcb77"
},
{
"id": "canola",
"label": "کلزا",
"color": "#ffd93d"
},
{
"id": "saffron",
"label": "زعفران",
"color": "#9b59b6"
}
]
}
}