Repository navigation
Dive Route Annotations and Points of Interest #57
Copy link
Copy link
Open
Labels
Description
Activity
I have reviewed the codebase to determine the status of the requested features for "Dive Route Annotations and Points of Interest."
Here is the breakdown of what has been implemented and what is still pending:
✅ Implemented Features
- Point Marking System: The core ability to place Points of Interest (POIs) is implemented. These markers are stored as GeoJSON
Pointfeatures within theroute_datacolumn of theDiveRoutemodel. - Icon Library: A comprehensive set of specialized underwater icons has been built (found in
frontend/src/utils/markerTypes.js). It includes categories like:- Wreck (Red Anchor)
- Cave/Cavern (Purple Warehouse)
- Rock (Gray Hexagon), Coral (Pink Flower), Wall/Drop-off (Brown Square)
- Marine Life, Ancient Artifacts, Hazards, and Canyon/Swim Throughs.
- Text Annotations: Implemented. Users can attach custom text
commentand media URLs to any marked point. These are rendered contextually inside map popups (handled inRouteDetail.jsx). - Management Tools (CRUD): Fully functional. The map editor interface (
RouteCanvas.jsx) allows users to create, read, update, and delete markers interactively while editing a route. - Contextual Display: Points of Interest render seamlessly inside the map layer of the Dive Route details page.
- Cross-Platform Support: The Leaflet map implementation for routing and annotations uses responsive React components, naturally supporting mobile viewing and creation.
- Data Portability (Export): The backend
RouteExportServicecorrectly parsesPointgeometries and converts them to<wpt>(waypoints) when exporting to GPX, and<Point>when exporting to KML.
⏳ Pending Features
- Discovery & Organization: There is currently no search or filtering functionality to help users discover dive routes based on specific annotations (e.g., searching specifically for "routes that feature a wreck" or "routes with cavern POIs").
- Social Sharing (Annotation-Specific): While users can share entire Dive Routes, there are no specific community-driven features to share or upvote individual annotations independently of the route.
- Data Portability (Import): Although exporting POIs via GPX/KML is supported, there's no endpoint or UI feature to import standalone POIs/waypoints from external files into a dive route.
- Quality Control: The backend stores the annotations as arbitrary GeoJSON properties. There are currently no explicit validation rules, length constraints, or quality checks specifically applied to user-submitted annotation comments.
- Performance Optimization (Marker Clustering): The codebase implements
leaflet.markerclusteron large maps (likeDivesMap.jsxandDivingCentersMap.jsx), but this clustering optimization has not yet been applied to theRouteDetail.jsxorRouteCanvas.jsxmaps. Rendering too many annotations on a single dive route may cause sluggishness.
- Point Marking System: The core ability to place Points of Interest (POIs) is implemented. These markers are stored as GeoJSON
Hello! I have conducted a comprehensive review of the codebase against the requested tasks in this issue and updated the issue description to reflect the current status:
✅ Already Implemented
- Core Annotation & CRUD System: Complete. Users can draw lines, place POI markers, and CRUD annotations inside the route editor (
RouteCanvas.jsx), which render dynamically inRouteDetail.jsx. - Advanced Filtering & Discovery: Complete. The frontend UI in
DiveRoutes.jsxalready features interactive POI marker filtering pills mapping to backendjson_containsSQL queries on theroute_datacolumn. - Portability (Export): Complete.
RouteExportServicefully supports GPX and KML waypoint/POI export.
🚫 Declared Superfluous / Out of Scope (Skipped)
- Individual Annotation Sharing: Route-level sharing and bookmarks are fully functional. Splitting child GeoJSON points into custom tables to support individual likes has a low ROI.
- Marker Clustering: Single route maps rarely exceed 10 POIs. Clustering them would merge sequential points on zoom, hurting navigation readability.
- Validation: Pydantic validators in
schemas/__init__.pyalready enforce GeoJSON integrity, and all text inputs are sanitized globally for XSS.
⏳ The Interesting Pending Task
- Data Portability (Import): GPX & KML Route and POI Import is the single major functional gap remaining. This will allow users to import tracks and waypoints from GPX/KML files directly into the map editor.
We are ready to begin the design and implementation of the GPX/KML Import feature!
- Core Annotation & CRUD System: Complete. Users can draw lines, place POI markers, and CRUD annotations inside the route editor (
Overview
Implement annotation system for dive routes allowing users to mark specific points with comments and icons indicating points of interest such as caverns, big rocks, ship wrecks, car wrecks, airplane wrecks, and other underwater features.
Tasks
Core Annotations & Map System (100% Completed)
Advanced Features & Discovery (100% Completed)
Declared Superfluous / Out of Scope (Skipped)
Data Portability & Integration (In Progress)
Priority
Medium
Status
In Progress
Related Files
docs/development/dive-route-annotations-implementation.md