From 106277faf4ef4e43a5f2be7b04d6c4627341a1ec Mon Sep 17 00:00:00 2001 From: stopflock Date: Mon, 6 Oct 2025 22:51:30 -0500 Subject: [PATCH] Suspected nodes respect min zoom level, max number rendered --- lib/widgets/map_view.dart | 59 ++++++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/lib/widgets/map_view.dart b/lib/widgets/map_view.dart index 2fd5fee..1d2d083 100644 --- a/lib/widgets/map_view.dart +++ b/lib/widgets/map_view.dart @@ -352,31 +352,46 @@ class MapViewState extends State { shouldDim: shouldDimCameras, ); - // Build suspected location markers + // Build suspected location markers (respect same zoom and count limits as cameras) final suspectedLocationMarkers = []; if (appState.suspectedLocationsEnabled && mapBounds != null) { - final suspectedLocations = appState.getSuspectedLocationsInBounds( - north: mapBounds.north, - south: mapBounds.south, - east: mapBounds.east, - west: mapBounds.west, - ); + // Check zoom level (same logic as cameras) + double currentZoom = 15.0; // fallback + try { + currentZoom = _controller.mapController.camera.zoom; + } catch (_) { + // Controller not ready yet, use fallback + } - // Filter out suspected locations that are too close to real nodes - final filteredSuspectedLocations = _filterSuspectedLocationsByProximity( - suspectedLocations: suspectedLocations, - realNodes: cameras, - minDistance: appState.suspectedLocationMinDistance, - ); - - suspectedLocationMarkers.addAll( - SuspectedLocationMarkersBuilder.buildSuspectedLocationMarkers( - locations: filteredSuspectedLocations, - mapController: _controller.mapController, - selectedLocationId: appState.selectedSuspectedLocation?.ticketNo, - onLocationTap: widget.onSuspectedLocationTap, - ), - ); + final minZoom = _getMinZoomForCameras(context); + if (currentZoom >= minZoom) { + final suspectedLocations = appState.getSuspectedLocationsInBounds( + north: mapBounds.north, + south: mapBounds.south, + east: mapBounds.east, + west: mapBounds.west, + ); + + // Apply same node count limit as cameras + final maxNodes = appState.maxCameras; + final limitedSuspectedLocations = suspectedLocations.take(maxNodes).toList(); + + // Filter out suspected locations that are too close to real nodes + final filteredSuspectedLocations = _filterSuspectedLocationsByProximity( + suspectedLocations: limitedSuspectedLocations, + realNodes: cameras, + minDistance: appState.suspectedLocationMinDistance, + ); + + suspectedLocationMarkers.addAll( + SuspectedLocationMarkersBuilder.buildSuspectedLocationMarkers( + locations: filteredSuspectedLocations, + mapController: _controller.mapController, + selectedLocationId: appState.selectedSuspectedLocation?.ticketNo, + onLocationTap: widget.onSuspectedLocationTap, + ), + ); + } } // Get current zoom level for direction cones