Enhance crop zoning features with new API integrations and UI updates
- Added Persian translations for legend levels in fa.json to improve localization. - Updated CROP_ZONING_APIS.md to include new API endpoints for water need, soil quality, and cultivation risk, enhancing data retrieval capabilities. - Refactored crop zoning components to support new data structures and improve rendering logic for different layers. - Enhanced LayerControl and ZoneLegend components to dynamically display information based on the active layer, improving user experience. - Implemented loading states and error handling in CropZoningWrapper for better data management during asynchronous operations.
This commit is contained in:
@@ -10,18 +10,24 @@
|
||||
## نمای کلی و جریان درخواستها
|
||||
|
||||
```
|
||||
۱. GET area → منطقهٔ ثابت (کاربر امکان رسم ندارد)
|
||||
۲. GET products → لیست محصولات و رنگها
|
||||
۳. POST zones/initial → ارسال محدودهٔ مربعها → دریافت دیتای اولیه (نقشه + هاور/tooltip)
|
||||
۴. GET zone/:zoneId → کلیک روی مربع → دریافت دیتای تکمیلی (پنل جزئیات: reason, criteria, ...)
|
||||
۱. GET area → منطقهٔ ثابت (کاربر امکان رسم ندارد)
|
||||
۲. GET products → لیست محصولات و رنگها
|
||||
۳. POST zones/initial → ارسال محدودهٔ مربعها → دیتای محصولات پیشنهادی (نقشه + tooltip)
|
||||
۴. POST zones/water-need → ارسال محدودهٔ مربعها → نیاز آبی هر منطقه
|
||||
۵. POST zones/soil-quality → ارسال محدودهٔ مربعها → کیفیت خاک هر منطقه
|
||||
۶. POST zones/cultivation-risk → ارسال محدودهٔ مربعها → ریسک کشت هر منطقه
|
||||
۷. GET zone/:zoneId → کلیک روی مربع → دیتای تکمیلی (پنل جزئیات: reason, criteria, ...)
|
||||
```
|
||||
|
||||
| ردیف | API | هدف |
|
||||
|------|-----|------|
|
||||
| ۱ | **منطقهٔ اولیه** | دریافت منطقهٔ زمین به صورت GeoJSON؛ کاربر نمیتواند چیزی رسم کند |
|
||||
| ۲ | **لیست محصولات و رنگها** | دریافت محصولات قابل کشت به همراه رنگ نمایش و لیبل فارسی |
|
||||
| ۳ | **دیتای اولیه زونها** | ارسال محدودهٔ مربعها، دریافت دیتا برای نقشه و **هاور/tooltip** |
|
||||
| ۴ | **دیتای تکمیلی زون** | با کلیک روی هر مربع، دریافت دیتای جزئیات (دلیل، معیارها، نمودار) |
|
||||
| ۳ | **دیتای اولیه زونها (محصولات)** | ارسال محدودهٔ مربعها، دریافت محصول پیشنهادی برای نقشه و tooltip |
|
||||
| ۴ | **نیاز آبی** | ارسال محدودهٔ مربعها، دریافت نیاز آبی هر منطقه برای لایهٔ نیاز آبی |
|
||||
| ۵ | **کیفیت خاک** | ارسال محدودهٔ مربعها، دریافت کیفیت خاک هر منطقه برای لایهٔ کیفیت خاک |
|
||||
| ۶ | **ریسک کشت** | ارسال محدودهٔ مربعها، دریافت ریسک کشت هر منطقه برای لایهٔ ریسک کشت |
|
||||
| ۷ | **دیتای تکمیلی زون** | با کلیک روی هر مربع، دریافت دیتای جزئیات (دلیل، معیارها، نمودار) |
|
||||
|
||||
---
|
||||
|
||||
@@ -241,15 +247,164 @@
|
||||
|------|-----|--------|--------|
|
||||
| `zoneId` | string | بله | شناسهٔ یکتا برای درخواست دیتای تکمیلی |
|
||||
| `geometry` | Polygon | بله | هندسهٔ همان مربع ارسالی |
|
||||
| `crop` | string | بله | محصول پیشنهادی (رنگ نقشه + tooltip) |
|
||||
| `matchPercent` | number | بله | درصد تطابق (هاور/tooltip) |
|
||||
| `waterNeed` | string | بله | نیاز آبی (هاور/tooltip) |
|
||||
| `estimatedProfit` | string | بله | سود تخمینی (هاور/tooltip) |
|
||||
| `crop` | string \| null | خیر | محصول پیشنهادی؛ اگر `null`/خالی/`uncultivable` باشد → زون **غیرقابل کشت** و رنگ خاکستری |
|
||||
| `matchPercent` | number | خیر | درصد تطابق (هاور/tooltip) |
|
||||
| `waterNeed` | string | خیر | نیاز آبی (هاور/tooltip) |
|
||||
| `estimatedProfit` | string | خیر | سود تخمینی (هاور/tooltip) |
|
||||
|
||||
**زون غیرقابل کشت:** اگر برای مربعی اطلاعاتی نیاید یا `crop` خالی/`null`/`uncultivable` باشد، آن مربع خاکستری نمایش داده شده و در tooltip «غیر قابل کشت» نشان داده میشود. کلیک روی آن پنل جزئیات باز نمیشود.
|
||||
|
||||
**نکته:** این فیلدها هنگام **هاور** روی مربع در tooltip نمایش داده میشوند؛ نیازی به درخواست جداگانه برای tooltip نیست.
|
||||
|
||||
---
|
||||
|
||||
## ۲.۱ API نیاز آبی (Water Need)
|
||||
|
||||
نیاز آبی هر منطقه را بر اساس محدودهٔ مربعها برمیگرداند. با تغییر لایه به «نیاز آبی» در LayerControl، فرانت این API را صدا میزند و نقشه و Legend را بهروزرسانی میکند.
|
||||
|
||||
### مشخصات
|
||||
|
||||
- **متد:** `POST`
|
||||
- **آدرس پیشنهادی:** `POST /api/crop-zoning/zones/water-need/`
|
||||
- **هدف:** دریافت نیاز آبی هر منطقه برای نمایش روی نقشه در لایهٔ نیاز آبی.
|
||||
|
||||
### ورودی (Request Body)
|
||||
|
||||
همان ساختار `POST zones/initial/`:
|
||||
|
||||
| فیلد | نوع | اجباری | توضیح |
|
||||
|------|-----|--------|--------|
|
||||
| `zones` | GeoJSON FeatureCollection | بله | محدودهٔ هر مربع به صورت Polygon |
|
||||
|
||||
### خروجی (Response Body)
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "success",
|
||||
"data": {
|
||||
"zones": [
|
||||
{
|
||||
"zoneId": "zone-0",
|
||||
"geometry": { "type": "Polygon", "coordinates": [...] },
|
||||
"level": "low",
|
||||
"value": "۳۰۰۰-۴۰۰۰ m³/ha",
|
||||
"color": "#7dd3fc"
|
||||
},
|
||||
{
|
||||
"zoneId": "zone-1",
|
||||
"geometry": { "type": "Polygon", "coordinates": [...] },
|
||||
"level": "medium",
|
||||
"value": "۵۰۰۰-۶۰۰۰ m³/ha",
|
||||
"color": "#0ea5e9"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
| فیلد | نوع | توضیح |
|
||||
|------|-----|--------|
|
||||
| `zoneId` | string | شناسهٔ زون |
|
||||
| `geometry` | Polygon | هندسهٔ مربع |
|
||||
| `level` | string | سطح: `low`, `medium`, `high` |
|
||||
| `value` | string | مقدار نیاز آبی (مثلاً m³/ha) |
|
||||
| `color` | string | رنگ hex برای نمایش |
|
||||
|
||||
---
|
||||
|
||||
## ۲.۲ API کیفیت خاک (Soil Quality)
|
||||
|
||||
کیفیت خاک هر منطقه را برمیگرداند. با تغییر لایه به «کیفیت خاک»، فرانت این API را صدا میزند.
|
||||
|
||||
### مشخصات
|
||||
|
||||
- **متد:** `POST`
|
||||
- **آدرس پیشنهادی:** `POST /api/crop-zoning/zones/soil-quality/`
|
||||
|
||||
### ورودی (Request Body)
|
||||
|
||||
همان `zones` (FeatureCollection).
|
||||
|
||||
### خروجی (Response Body)
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "success",
|
||||
"data": {
|
||||
"zones": [
|
||||
{
|
||||
"zoneId": "zone-0",
|
||||
"geometry": { "type": "Polygon", "coordinates": [...] },
|
||||
"level": "low",
|
||||
"score": 35,
|
||||
"color": "#f87171"
|
||||
},
|
||||
{
|
||||
"zoneId": "zone-1",
|
||||
"geometry": { "type": "Polygon", "coordinates": [...] },
|
||||
"level": "high",
|
||||
"score": 85,
|
||||
"color": "#22c55e"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
| فیلد | نوع | توضیح |
|
||||
|------|-----|--------|
|
||||
| `level` | string | سطح: `low`, `medium`, `high` |
|
||||
| `score` | number | امتیاز ۰–۱۰۰ |
|
||||
| `color` | string | رنگ hex |
|
||||
|
||||
---
|
||||
|
||||
## ۲.۳ API ریسک کشت (Cultivation Risk)
|
||||
|
||||
ریسک کشت هر منطقه را برمیگرداند. با تغییر لایه به «ریسک کشت»، فرانت این API را صدا میزند.
|
||||
|
||||
### مشخصات
|
||||
|
||||
- **متد:** `POST`
|
||||
- **آدرس پیشنهادی:** `POST /api/crop-zoning/zones/cultivation-risk/`
|
||||
|
||||
### ورودی و خروجی
|
||||
|
||||
ورودی: همان `zones` (FeatureCollection).
|
||||
|
||||
خروجی نمونه:
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "success",
|
||||
"data": {
|
||||
"zones": [
|
||||
{
|
||||
"zoneId": "zone-0",
|
||||
"geometry": { "type": "Polygon", "coordinates": [...] },
|
||||
"level": "low",
|
||||
"color": "#22c55e"
|
||||
},
|
||||
{
|
||||
"zoneId": "zone-1",
|
||||
"geometry": { "type": "Polygon", "coordinates": [...] },
|
||||
"level": "high",
|
||||
"color": "#ef4444"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
| فیلد | نوع | توضیح |
|
||||
|------|-----|--------|
|
||||
| `level` | string | سطح: `low`, `medium`, `high` |
|
||||
| `color` | string | رنگ hex |
|
||||
|
||||
**نکته:** برای هر لایه (نیاز آبی، کیفیت خاک، ریسک کشت) فرانت یک **درخواست جداگانه** ارسال میکند و نقشه و Legend متناسب با همان لایه بهروزرسانی میشوند.
|
||||
|
||||
---
|
||||
|
||||
## ۳. API دیتای تکمیلی زون (با کلیک روی مربع)
|
||||
|
||||
وقتی کاربر روی یک مربع کلیک میکند، فرانت با `zoneId` دیتای **تکمیلی** را درخواست میکند — برای نمایش پنل جزئیات: دلیل پیشنهاد، معیارها، نمودار راداری.
|
||||
@@ -369,8 +524,13 @@ const CROP_COLORS: Record<CropType, string> = {
|
||||
## ۶. جریان فرانت با APIها
|
||||
|
||||
1. **لود صفحه:** `GET /api/crop-zoning/products/` → لیست محصولات و رنگها.
|
||||
2. **رسم منطقه / بهینهسازی:** فرانت با Turf از polygon منطقه گرید میسازد → `POST /api/crop-zoning/zones/initial/` با `zones` (FeatureCollection) → نقشه و هاور/tooltip با دیتای اولیه رسم میشود.
|
||||
3. **کلیک روی مربع:** `GET /api/crop-zoning/zones/{zoneId}/details/` → دیتای تکمیلی → پنل جزئیات باز میشود (reason, criteria, نمودار راداری).
|
||||
2. **رسم منطقه / بهینهسازی:** فرانت با Turf از polygon منطقه گرید میسازد → `POST /api/crop-zoning/zones/initial/` با `zones` (FeatureCollection) → نقشه و tooltip با دیتای محصولات رسم میشود.
|
||||
3. **تغییر لایه در LayerControl:** برای هر لایه یک درخواست جداگانه ارسال میشود:
|
||||
- محصولات پیشنهادی: `POST zones/initial/` (در مرحلهٔ ۲)
|
||||
- نیاز آبی: `POST zones/water-need/` → نقشه و Legend بهروزرسانی میشوند
|
||||
- کیفیت خاک: `POST zones/soil-quality/` → نقشه و Legend بهروزرسانی میشوند
|
||||
- ریسک کشت: `POST zones/cultivation-risk/` → نقشه و Legend بهروزرسانی میشوند
|
||||
4. **کلیک روی مربع:** `GET /api/crop-zoning/zones/{zoneId}/details/` → دیتای تکمیلی → پنل جزئیات باز میشود (reason, criteria, نمودار راداری).
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user