81 lines
1.9 KiB
Markdown
81 lines
1.9 KiB
Markdown
# GIS Classification
|
|
|
|
Python project for land cover classification using GIS data (GeoTIFF + Shapefile).
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
gis-classification/
|
|
├── main.py # Main script with parameters
|
|
├── requirements.txt # Dependencies
|
|
├── data/ # Input data folder
|
|
├── output/ # Classification results
|
|
└── src/
|
|
├── classifier.py # Main classification pipeline
|
|
├── data/
|
|
│ └── loader.py # Data loading (GeoTIFF, Shapefile)
|
|
├── strategies/
|
|
│ ├── base.py # Strategy interface
|
|
│ └── classifiers.py # Built-in strategies (RF, SVM, LR)
|
|
└── utils/
|
|
```
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
## Usage
|
|
|
|
1. Place your input files in `data/`:
|
|
- `landsat.tif` - GeoTIFF from Landsat
|
|
- `polygons.shp` - Shapefile with class labels
|
|
|
|
2. Configure parameters in `main.py`:
|
|
- Input/output paths
|
|
- Classification strategy (RandomForest, SVM, LogisticRegression)
|
|
- Training parameters
|
|
|
|
3. Run:
|
|
```bash
|
|
python main.py
|
|
```
|
|
|
|
## Adding Custom Classification Strategy
|
|
|
|
Create a new class implementing `ClassificationStrategy`:
|
|
|
|
```python
|
|
from src.strategies import ClassificationStrategy
|
|
import numpy as np
|
|
|
|
class MyCustomStrategy(ClassificationStrategy):
|
|
def train(self, X: np.ndarray, y: np.ndarray) -> None:
|
|
# Your training logic
|
|
pass
|
|
|
|
def predict(self, X: np.ndarray) -> np.ndarray:
|
|
# Your prediction logic
|
|
pass
|
|
|
|
def predict_proba(self, X: np.ndarray) -> np.ndarray:
|
|
pass
|
|
|
|
def get_params(self) -> dict:
|
|
pass
|
|
|
|
@property
|
|
def name(self) -> str:
|
|
return "MyCustom"
|
|
```
|
|
|
|
Then use in `main.py`:
|
|
```python
|
|
STRATEGY = MyCustomStrategy()
|
|
```
|
|
|
|
## Output
|
|
|
|
- `output/classified.tif` - Classified raster (GeoTIFF)
|
|
- Console output with accuracy metrics
|