Files
(jenkins) 228032c913
Tests / backend-test (pull_request) Successful in 10s
Tests / frontend-test (pull_request) Successful in 9m25s
Tests / e2e-test (pull_request) Has been cancelled
Update application ports to 3050 and enhance Playwright tests with WebGL mock
2026-04-01 11:04:16 +01:00

265 lines
5.3 KiB
Markdown

# Line of Sight 🌍
Interactive web application that visualizes lines of sight around the Earth, showing major conurbations along any selected path.
## 🚀 Features
- **Interactive Map**: Click anywhere to select starting coordinates
- **360° Direction Selector**: Choose any direction with compass-style control
- **Fuzziness Tolerance**: Adjustable search radius around the line of sight
- **Tube-Line Visualization**: Shows up to 20 major cities along the path
- **Real-time Rendering**: Instant feedback on map with city markers
- **Map Style Toggle**: Switch between light and dark themes
## 🛠️ Tech Stack
### Frontend
- **Framework**: React 18
- **Map Library**: MapLibre GL JS
- **HTTP Client**: Axios
- **Styling**: Custom CSS
### Backend
- **Runtime**: Node.js 18
- **Framework**: Express.js
- **Database**: PostgreSQL 15 with PostGIS 3.3
### DevOps
- **Containerization**: Docker + Docker Compose
- **Database**: PostGIS spatial extension
## 📋 Prerequisites
- Docker 20.10+
- Docker Compose 2.0+
- Git (for repository access)
## 🚦 Getting Started
### 1. Clone Repository
```bash
git clone https://repos.retroweb.dev/ai-zone/line-of-sight.git
cd line-of-sight
```
### 2. Run with Docker
```bash
docker-compose up --build
```
### 3. Access Application
- **Frontend**: http://localhost:3050
- **Backend API**: http://localhost:3001
- **Database**: localhost:5432 (PostgreSQL with PostGIS)
## 🎮 How to Use
1. **Select Point**: Click anywhere on the map to set your starting coordinate
2. **Set Direction**: Use the slider to choose 0-360° direction
3. **Adjust Tolerance**: Set fuzziness (how close cities must be to the line)
4. **Show Line of Sight**: Click the button to visualize the path
5. **View Results**: See up to 20 major conurbations along the path
## 🧪 Running Tests
### Backend Tests
```bash
docker-compose exec backend npm test
```
### Frontend Tests
```bash
docker-compose exec frontend npm test
```
## 📡 API Endpoints
### GET /api/line-of-sight
Returns conurbations along a line of sight.
**Parameters:**
- `lat` (float): Starting latitude
- `lon` (float): Starting longitude
- `direction` (int): Direction in degrees (0-360)
- `tolerance` (int): Fuzziness tolerance in km (default: 50)
**Response:**
```json
{
"success": true,
"data": {
"start_point": { "lat": 51.5074, "lon": -0.1278 },
"direction": 45,
"tolerance_km": 50,
"conurbations": [...],
"line_coordinates": [...]
}
}
```
### GET /api/health
Health check endpoint.
## 🐳 Docker Commands
### Start Services
```bash
docker-compose up
```
### Start in Background
```bash
docker-compose up -d
```
### Stop Services
```bash
docker-compose down
```
### Rebuild and Start
```bash
docker-compose up --build
```
### View Logs
```bash
docker-compose logs -f
```
### Access Database
```bash
docker-compose exec postgres psql -U line_of_sight -d line_of_sight
```
## 📁 Project Structure
```
line_of_sight/
├── backend/
│ ├── app/
│ │ └── server.js # Express API server
│ ├── tests/ # Backend tests
│ ├── Dockerfile
│ └── package.json
├── frontend/
│ ├── src/
│ │ ├── App.js # Main React component
│ │ ├── services/ # API client
│ │ └── styles/ # CSS files
│ ├── public/
│ ├── Dockerfile
│ └── package.json
├── docker/
│ └── init.sql # Database initialization
├── docker-compose.yml # Container orchestration
├── README.md # This file
└── .gitignore
```
## 🧩 Development
### Frontend Development
```bash
cd frontend
npm install
npm start
```
### Backend Development
```bash
cd backend
npm install
npm run dev
```
## 📝 Current Status
**MVP Version 1.0**
- ✅ Interactive map with coordinate selection
- ✅ Direction selector (0-360°)
- ✅ Fuzziness tolerance control
- ✅ Mock API returning 20 conurbations
- ✅ Line visualization on map
- ✅ City markers with popup info
- ⏳ Real geospatial calculations (Phase 2)
- ⏳ Natural Earth data import (Phase 2)
- ⏳ GeoNames integration (Phase 3)
## 🔮 Roadmap
### Phase 1: MVP ✅
- Basic map interface
- Dummy API endpoints
- Docker containerization
### Phase 2: Real Geospatial
- Great circle calculations
- PostGIS queries with ST_DWithin()
- Natural Earth data import
### Phase 3: Enhanced Features
- GeoNames dataset integration
- 3D globe visualization
- Distance calculations
- Performance optimization
### Phase 4: Production Ready
- User authentication
- Saved searches
- Export functionality
- Mobile optimization
## 🐛 Troubleshooting
### Port Already in Use
```bash
# Find process using port
lsof -i :3050
lsof -i :3001
# Kill process
kill -9 <PID>
```
### Database Connection Issues
```bash
# Check if database is running
docker-compose ps
# Restart database
docker-compose restart postgres
```
### Build Issues
```bash
# Clean and rebuild
docker-compose down
docker-compose build --no-cache
docker-compose up
```
## 🤝 Contributing
1. Create a feature branch
2. Make your changes
3. Add tests for new functionality
4. Ensure all tests pass
5. Submit a Pull Request
## 📄 License
MIT License
## 📞 Support
For issues or questions, please open an issue on the repository.
---
*Built with ❤️ by Agent Zero*