diff --git a/Meshtastic/Views/Map/Custom/MapViewSwiftUI.swift b/Meshtastic/Views/Map/Custom/MapViewSwiftUI.swift index 71b4bbf2..687d3130 100644 --- a/Meshtastic/Views/Map/Custom/MapViewSwiftUI.swift +++ b/Meshtastic/Views/Map/Custom/MapViewSwiftUI.swift @@ -25,6 +25,7 @@ struct MapViewSwiftUI: UIViewRepresentable { let userTrackingMode: MKUserTrackingMode let showNodeHistory: Bool let showRouteLines: Bool + let showMultipleNodes: Bool @AppStorage("meshMapRecentering") private var recenter: Bool = false // Offline Map Tiles @AppStorage("lastUpdatedLocalMapFile") private var lastUpdatedLocalMapFile = 0 @@ -91,6 +92,8 @@ struct MapViewSwiftUI: UIViewRepresentable { } func updateUIView(_ mapView: MKMapView, context: Context) { + + mapView.mapType = mapViewType if self.customMapOverlay != self.presentCustomMapOverlayHash || self.loadedLastUpdatedLocalMapFile != self.lastUpdatedLocalMapFile { @@ -116,60 +119,58 @@ struct MapViewSwiftUI: UIViewRepresentable { } } - DispatchQueue.main.async { + // DispatchQueue.main.async { let latest = positions .filter { $0.latest == true } .sorted { $0.nodePosition?.num ?? 0 > $1.nodePosition?.num ?? -1 } let annotationCount = waypoints.count + (showNodeHistory ? positions.count : latest.count) - if annotationCount > mapView.annotations.count { - print("Annotation Count: \(annotationCount) Map Annotations: \(mapView.annotations.count)") - if showRouteLines { - // Remove all existing PolyLine Overlays - for overlay in mapView.overlays { - if overlay is MKPolyline { - mapView.removeOverlay(overlay) - } - } - var lineIndex = 0 - for position in latest { - - let nodePositions = positions.filter { $0.time! >= Calendar.current.startOfDay(for: Date()) && $0.nodePosition?.num ?? 0 == position.nodePosition?.num ?? -1 } - let lineCoords = nodePositions.map ({ - (position) -> CLLocationCoordinate2D in - return position.nodeCoordinate! - }) - let polyline = MKPolyline(coordinates: lineCoords, count: nodePositions.count) - polyline.title = "\(String(position.nodePosition?.num ?? 0))-\(String(lineIndex))" - mapView.addOverlay(polyline) - lineIndex += 1 - // There are 18 colors for lines, start over if we are at index 17 - if lineIndex > 17 { - lineIndex = 0 - } + print("Annotation Count: \(annotationCount) Map Annotations: \(mapView.annotations.count)") + mapView.removeAnnotations(mapView.annotations) + mapView.addAnnotations(waypoints) + if showRouteLines { + // Remove all existing PolyLine Overlays + for overlay in mapView.overlays { + if overlay is MKPolyline { + mapView.removeOverlay(overlay) } } - mapView.removeAnnotations(mapView.annotations) - mapView.addAnnotations(waypoints) - if userTrackingMode == MKUserTrackingMode.none { - mapView.showsUserLocation = false - if recenter { - if latest.count == 1 { - mapView.fit(annotations:showNodeHistory ? positions : latest, andShow: true) - } else { - mapView.addAnnotations(showNodeHistory ? positions : latest) - mapView.fitAllAnnotations() - } + var lineIndex = 0 + for position in latest { + + let nodePositions = positions.filter { $0.time! >= Calendar.current.startOfDay(for: Date()) && $0.nodePosition?.num ?? 0 == position.nodePosition?.num ?? -1 } + let lineCoords = nodePositions.map ({ + (position) -> CLLocationCoordinate2D in + return position.nodeCoordinate! + }) + let polyline = MKPolyline(coordinates: lineCoords, count: nodePositions.count) + polyline.title = "\(String(position.nodePosition?.num ?? 0))-\(String(lineIndex))" + mapView.addOverlay(polyline) + lineIndex += 1 + // There are 18 colors for lines, start over if we are at index 17 + if lineIndex > 17 { + lineIndex = 0 + } + } + } + if userTrackingMode == MKUserTrackingMode.none { + mapView.showsUserLocation = false + if recenter { + if !showMultipleNodes { + mapView.fit(annotations:showNodeHistory ? positions : latest, andShow: true) } else { mapView.addAnnotations(showNodeHistory ? positions : latest) + mapView.fitAllAnnotations() } } else { - // Centering Done by tracking mode mapView.addAnnotations(showNodeHistory ? positions : latest) - mapView.showsUserLocation = true } - mapView.setUserTrackingMode(userTrackingMode, animated: true) + } else { + // Centering Done by tracking mode + mapView.addAnnotations(showNodeHistory ? positions : latest) + mapView.showsUserLocation = true } - } + mapView.setUserTrackingMode(userTrackingMode, animated: true) + //} } func makeCoordinator() -> MapCoordinator { @@ -361,7 +362,7 @@ struct MapViewSwiftUI: UIViewRepresentable { let index = Int(titleString.components(separatedBy: "-").last ?? "0") let renderer = MKPolylineRenderer(polyline: routePolyline) renderer.strokeColor = parent.lineColors[index ?? 0] - renderer.lineWidth = 5 + renderer.lineWidth = 7 return renderer } return MKOverlayRenderer() diff --git a/Meshtastic/Views/Nodes/NodeDetail.swift b/Meshtastic/Views/Nodes/NodeDetail.swift index f7c8ab6f..a2ba57c0 100644 --- a/Meshtastic/Views/Nodes/NodeDetail.swift +++ b/Meshtastic/Views/Nodes/NodeDetail.swift @@ -77,6 +77,7 @@ struct NodeDetail: View { userTrackingMode: MKUserTrackingMode.none, showNodeHistory: meshMapShowNodeHistory, showRouteLines: meshMapShowRouteLines, + showMultipleNodes: false, customMapOverlay: self.customMapOverlay ) VStack(alignment: .leading) { diff --git a/Meshtastic/Views/Nodes/NodeMap.swift b/Meshtastic/Views/Nodes/NodeMap.swift index 4cba5089..3bf9c241 100644 --- a/Meshtastic/Views/Nodes/NodeMap.swift +++ b/Meshtastic/Views/Nodes/NodeMap.swift @@ -77,8 +77,9 @@ struct NodeMap: View { waypoints: Array(waypoints), mapViewType: mapType, userTrackingMode: userTrackingMode, - showNodeHistory: meshMapShowNodeHistory, + showNodeHistory: meshMapShowNodeHistory, showRouteLines: meshMapShowRouteLines, + showMultipleNodes: true, customMapOverlay: self.customMapOverlay ) VStack { diff --git a/Meshtastic/Views/Settings/Config/PositionConfig.swift b/Meshtastic/Views/Settings/Config/PositionConfig.swift index 5687a141..72e6830c 100644 --- a/Meshtastic/Views/Settings/Config/PositionConfig.swift +++ b/Meshtastic/Views/Settings/Config/PositionConfig.swift @@ -467,7 +467,7 @@ struct PositionConfig: View { self.gpsAttemptTime = Int(node?.positionConfig?.gpsAttemptTime ?? 30) self.positionBroadcastSeconds = Int(node?.positionConfig?.positionBroadcastSeconds ?? 900) self.broadcastSmartMinimumIntervalSecs = Int(node?.positionConfig?.broadcastSmartMinimumIntervalSecs ?? 30) - self.broadcastSmartMinimumDistance = Int(node?.positionConfig?.broadcastSmartMinimumDistance ?? 40) + self.broadcastSmartMinimumDistance = Int(node?.positionConfig?.broadcastSmartMinimumDistance ?? 50) self.positionFlags = Int(node?.positionConfig?.positionFlags ?? 3) let pf = PositionFlags(rawValue: self.positionFlags)