Spaces:
Runtime error
Runtime error
| # Kamlan KML Analyzer - Gradio Version Deployment Instructions | |
| ## Overview | |
| This is a Gradio-based version of the Kamlan KML Analyzer that includes API endpoints for Google Sheets integration. The app provides both a web interface and REST API endpoints for programmatic access. | |
| ## Features | |
| - **Web Interface**: User-friendly Gradio interface for KML analysis | |
| - **REST API**: Endpoints for Google Sheets integration via Apps Script | |
| - **Geometry Analysis**: Centroid, area, perimeter calculations | |
| - **Map Visualization**: Interactive maps with satellite imagery | |
| - **Export Capabilities**: CSV download of metrics | |
| ## Quick Start | |
| ### 1. Local Development | |
| ```bash | |
| # Clone and navigate to the directory | |
| cd NDVI_PERG | |
| # Install dependencies | |
| pip install -r requirements_gradio.txt | |
| # Set up Earth Engine credentials (if not already done) | |
| # Option 1: Use existing credentials | |
| # Option 2: Set environment variable | |
| export EE="your_earth_engine_credentials_json" | |
| # Run the application | |
| python gradio_app.py | |
| ``` | |
| The app will be available at `http://localhost:7860` | |
| ### 2. Production Deployment | |
| #### Option A: Hugging Face Spaces | |
| 1. Create a new Hugging Face Space | |
| 2. Upload these files: | |
| - `gradio_app.py` | |
| - `functions.py` | |
| - `requirements_gradio.txt` | |
| 3. Set the Earth Engine credentials in the Space secrets: | |
| ``` | |
| EE = your_earth_engine_credentials_json | |
| ``` | |
| #### Option B: Cloud Deployment (AWS/GCP/Azure) | |
| 1. **Containerized Deployment** (Recommended): | |
| ```dockerfile | |
| # Dockerfile | |
| FROM python:3.9-slim | |
| WORKDIR /app | |
| COPY requirements_gradio.txt . | |
| RUN pip install -r requirements_gradio.txt | |
| COPY . . | |
| EXPOSE 7860 | |
| CMD ["python", "gradio_app.py"] | |
| ``` | |
| 2. **Build and run**: | |
| ```bash | |
| docker build -t kamlan-gradio . | |
| docker run -p 7860:7860 -e EE="your_credentials" kamlan-gradio | |
| ``` | |
| #### Option C: Direct Server Deployment | |
| 1. **Install dependencies**: | |
| ```bash | |
| pip install -r requirements_gradio.txt | |
| ``` | |
| 2. **Set up credentials**: | |
| ```bash | |
| export EE="your_earth_engine_credentials_json" | |
| ``` | |
| 3. **Run with process manager** (e.g., PM2, supervisor): | |
| ```bash | |
| # Using PM2 | |
| pm2 start gradio_app.py --name kamlan-gradio --interpreter python3 | |
| # Using nohup | |
| nohup python gradio_app.py > app.log 2>&1 & | |
| ``` | |
| ## API Endpoints | |
| ### Base URL | |
| Replace `YOUR_API_BASE_URL` with your deployed app URL (e.g., `https://your-space.hf.space`) | |
| ### Available Endpoints | |
| #### 1. Analyze KML | |
| **GET** `/api/analyze_kml?file_url=<kml_url>` | |
| **Response:** | |
| ```json | |
| { | |
| "success": true, | |
| "data": { | |
| "centroid_lat": 23.123456, | |
| "centroid_lon": 72.123456, | |
| "area_m2": 50000.25, | |
| "area_ha": 5.00, | |
| "perimeter_m": 894.35, | |
| "coordinates": [...], | |
| "gmaps_url": "http://maps.google.com/maps?q=23.123456,72.123456&layer=satellite" | |
| } | |
| } | |
| ``` | |
| #### 2. Health Check | |
| **GET** `/api/health` | |
| **Response:** | |
| ```json | |
| { | |
| "status": "healthy", | |
| "message": "KML Analyzer API is running" | |
| } | |
| ``` | |
| ## Google Sheets Integration | |
| ### 1. Set up Apps Script | |
| 1. Open Google Sheets | |
| 2. Go to Extensions > Apps Script | |
| 3. Copy the contents of `google_apps_script_example.js` | |
| 4. Update the `API_BASE_URL` variable with your deployed app URL | |
| 5. Save the script | |
| ### 2. Usage in Spreadsheet | |
| #### Formula-based usage: | |
| ``` | |
| =analyzeKML("https://example.com/your-file.kml") | |
| =getCentroid("https://example.com/your-file.kml") | |
| =getArea("https://example.com/your-file.kml") | |
| =getPerimeter("https://example.com/your-file.kml") | |
| ``` | |
| #### Batch processing: | |
| 1. Put KML URLs in Column A | |
| 2. Use the custom menu: "KML Analysis" > "Analyze KMLs in Column A" | |
| ## Environment Variables | |
| | Variable | Description | Required | | |
| |----------|-------------|----------| | |
| | `EE` | Earth Engine credentials JSON | Yes | | |
| | `PORT` | Port to run the app (default: 7860) | No | | |
| ## Troubleshooting | |
| ### Common Issues | |
| 1. **Earth Engine Authentication Error**: | |
| - Ensure EE credentials are properly set | |
| - Verify the credentials JSON format | |
| 2. **Memory Issues**: | |
| - For large KML files, increase container memory limits | |
| - Consider implementing file size limits | |
| 3. **API Rate Limiting**: | |
| - Implement request throttling for batch operations | |
| - Add caching for frequently accessed files | |
| ### Logs and Monitoring | |
| - Check application logs for debugging | |
| - Monitor API endpoint response times | |
| - Set up health check monitoring | |
| ## Security Considerations | |
| 1. **API Security**: | |
| - Implement API rate limiting | |
| - Add authentication if needed | |
| - Validate input URLs | |
| 2. **File Processing**: | |
| - Limit file size uploads | |
| - Sanitize file inputs | |
| - Implement timeout for processing | |
| ## Performance Optimization | |
| 1. **Caching**: | |
| - Cache processed KML results | |
| - Implement Redis for session storage | |
| 2. **Scaling**: | |
| - Use load balancers for multiple instances | |
| - Implement horizontal scaling | |
| 3. **Earth Engine Optimization**: | |
| - Use Earth Engine batch processing | |
| - Implement result caching | |
| ## Support | |
| For issues and questions: | |
| - Check the application logs | |
| - Review Earth Engine quotas and limits | |
| - Contact the Sustainability Lab at IIT Gandhinagar | |
| ## Credits | |
| Developed by [Sustainability Lab](https://sustainability-lab.github.io/), IIT Gandhinagar | |
| Supported by Gujarat Forest Department |