* feat: meilisearch bounding box intersection and map filtering * feat: tiered clustering and polyline filtering based on bounding box diagonal Addressing review comments with optimized performance and data accuracy: - Implemented a two-tiered search strategy (Summary vs. Detailed) to provide 100% accurate cluster counts while minimizing metadata traffic. - Added a client-side ID-based cache to eliminate redundant network requests for trails already in memory. - Introduced tiered 'detail shedding' that dynamically hides small trail lines when zooming out to maintain smooth panning performance. - Fixed Svelte 5 reactivity issues to ensure clusters reappear instantly when trail detail is shed. - Consolidated zoom thresholds into centralized constants for system-wide consistency. - Updated Meilisearch configuration to support efficient ID-based filtering. * feat: implement server-side map clustering using Meilisearch and Supercluster - Implemented SvelteKit server-side clustering route at `/api/v1/search/trails/cluster` using the `supercluster` library. - Integrated backend search results with the new clustering endpoint to improve performance for large trail datasets. - Fixed Svelte 5 reactivity in `MapWithElevationMaplibre.svelte` by making `mapLoaded` reactive and fixing destructuring of `` map data. - Removed obsolete client-side zoom constraints (`minzoom`/`maxzoom`) from `TrailLayer`, `PreviewLayer`, and `ClusterLayer` to allow dynamic visibility controlled by backend attributes. - Fixed a bug where unauthenticated users generated invalid Meilisearch filters. - Optimized map page performance by caching bounding box and filter values in the route loader. - Updated `ClusterLayer` font to `Noto Sans Regular` to match available tileserver resources. * feat: implement dynamic polyline visibility based on result density - Replaced static zoom-based diagonal thresholds with a dynamic "Top N" approach for polyline visibility. - Updated `/api/v1/search/trails/cluster` to mark only the top `MAP_MAX_POLYLINES` (default 100) trails by bounding box diagonal as "large". - Modified `trails_search_bounding_box` store function to always fetch polylines for trails marked as large, regardless of zoom level. - Removed obsolete `MAP_*_ZOOM_DIAGONAL_LIMIT` constants and simplified map layer constructors by removing tier-based filtering. - Updated environment configurations and documentation to use the new `PUBLIC_MAP_MAX_POLYLINES` variable. * refactor: remove obsolete zoom-based map clustering thresholds Following the transition to dynamic server-side clustering based on result density (Top N polylines), this commit removes all remaining zoom-based thresholds and logic. - Removed PUBLIC_MAP_LOW_ZOOM_THRESHOLD, PUBLIC_MAP_MEDIUM_ZOOM_THRESHOLD, and PUBLIC_MAP_HIGH_ZOOM_THRESHOLD environment variables. - Removed the 'mapClusterMinZoom' user setting from the schema, models, and settings UI. - Simplified the map component and MapLibre layer managers by removing unused 'clusterMinZoom', 'minZoom', and 'maxZoom' parameters. - Cleaned up obsolete 'map-cluster-zoom-level' translation keys across all locales. - Updated documentation to reflect the removal of these variables. * chore: remove map clustering debug logs * docs: update changelog and fix global zoom feature disappearance * fix: address PR reviews and refine map cluster/preview visuals * feat: implement configurable map cluster zoom and trail start marker settings * feat: render single unclustered shedded trails as start markers instead of cluster circles * minor fixes * minor ui changes * fix missing entries in map list * remove redundant map clustering zoom clamp * fix merge issues * fix merge issues * fixes * hide popup for trails without details * several improvements * prevent import of client trail_store in server cluster code * update changelog --------- Co-authored-by: slothful-vassal <89943360+slothful-vassal@users.noreply.github.com>
103 lines
2.6 KiB
YAML
103 lines
2.6 KiB
YAML
version: '3'
|
|
|
|
x-common-env: &cenv
|
|
MEILI_URL: http://search:7700
|
|
MEILI_MASTER_KEY: vODkljPcfFANYNepCHyDyGjzAMPcdHnrb6X5KyXQPWo
|
|
|
|
services:
|
|
search:
|
|
container_name: wanderer-search
|
|
image: getmeili/meilisearch:v1.36.0
|
|
environment:
|
|
<<: *cenv
|
|
MEILI_NO_ANALYTICS: "true"
|
|
ports:
|
|
- 7700:7700
|
|
networks:
|
|
- wanderer
|
|
volumes:
|
|
- ./data/data.ms:/meili_data/data.ms
|
|
restart: unless-stopped
|
|
healthcheck:
|
|
test: curl --fail http://localhost:7700/health || exit 1
|
|
interval: 15s
|
|
retries: 10
|
|
start_period: 20s
|
|
timeout: 10s
|
|
db:
|
|
container_name: wanderer-db
|
|
image: flomp/wanderer-db
|
|
depends_on:
|
|
search:
|
|
condition: service_healthy
|
|
environment:
|
|
<<: *cenv
|
|
POCKETBASE_ENCRYPTION_KEY: fde406459dc1f6ca6f348e1f44a9a2af
|
|
ORIGIN: http://localhost:3000
|
|
ports:
|
|
- "8090:8090"
|
|
networks:
|
|
- wanderer
|
|
restart: unless-stopped
|
|
volumes:
|
|
- ./data/pb_data:/pb_data
|
|
healthcheck:
|
|
test: ["CMD", "/curl", "--fail", "http://localhost:8090/health"]
|
|
interval: 15s
|
|
retries: 10
|
|
start_period: 20s
|
|
timeout: 10s
|
|
web:
|
|
container_name: wanderer-web
|
|
image: flomp/wanderer-web
|
|
depends_on:
|
|
search:
|
|
condition: service_healthy
|
|
db:
|
|
condition: service_healthy
|
|
environment:
|
|
<<: *cenv
|
|
ORIGIN: http://localhost:3000
|
|
BODY_SIZE_LIMIT: Infinity
|
|
PUBLIC_POCKETBASE_URL: http://db:8090
|
|
PUBLIC_DISABLE_SIGNUP: "false"
|
|
UPLOAD_FOLDER: /app/uploads
|
|
UPLOAD_USER:
|
|
UPLOAD_PASSWORD:
|
|
OVERPASS_API_URL: https://overpass-api.de
|
|
VALHALLA_URL: https://valhalla1.openstreetmap.de
|
|
NOMINATIM_URL: https://nominatim.openstreetmap.org
|
|
PUBLIC_MAP_MAX_POLYLINES: 100
|
|
volumes:
|
|
- ./data/uploads:/app/uploads
|
|
# - ./data/about.md:/app/build/client/md/about.md
|
|
ports:
|
|
- "3000:3000"
|
|
networks:
|
|
- wanderer
|
|
restart: unless-stopped
|
|
healthcheck:
|
|
test: ["CMD", "curl", "--fail", "http://localhost:3000/"]
|
|
interval: 15s
|
|
retries: 10
|
|
start_period: 20s
|
|
timeout: 10s
|
|
# valhalla:
|
|
# image: ghcr.io/gis-ops/docker-valhalla/valhalla:latest
|
|
# ports:
|
|
# - "8002:8002"
|
|
# volumes:
|
|
# - ./data/valhalla:/custom_files
|
|
# environment:
|
|
# - tile_urls=https://download.geofabrik.de/europe/germany/bayern/oberbayern-latest.osm.pbf
|
|
# - use_tiles_ignore_pbf=True
|
|
# - force_rebuild=False
|
|
# - force_rebuild_elevation=False
|
|
# - build_elevation=True
|
|
# - build_admins=True
|
|
# - build_time_zones=True
|
|
|
|
networks:
|
|
wanderer:
|
|
driver: bridge
|