From 1abbae863cc0b156266b42d119ef8d33e9c76f5c Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Sun, 9 Apr 2023 22:56:09 -0700 Subject: [PATCH] Additional map and location cleanup --- Meshtastic/Helpers/BLEManager.swift | 21 ++++++++++--------- .../Views/Map/Custom/MapViewSwiftUI.swift | 1 + Meshtastic/Views/Map/WaypointFormView.swift | 12 ++++------- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/Meshtastic/Helpers/BLEManager.swift b/Meshtastic/Helpers/BLEManager.swift index e810febe..52be56e2 100644 --- a/Meshtastic/Helpers/BLEManager.swift +++ b/Meshtastic/Helpers/BLEManager.swift @@ -36,7 +36,7 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject { var timeoutTimerCount = 0 var timeoutTimerRuns = 0 var positionTimer: Timer? - var lastPosition: CLLocationCoordinate2D? + var lastPosition: CLLocation? let emptyNodeNum: UInt32 = 4294967295 /* Meshtastic Service Details */ var TORADIO_characteristic: CBCharacteristic! @@ -784,25 +784,26 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject { if lastPosition != nil { let connectedNode = getNodeInfo(id: connectedPeripheral?.num ?? 0, context: context!) if connectedNode?.positionConfig?.smartPositionEnabled ?? false { - if lastPosition!.distance(from: LocationHelper.currentLocation.coordinate) < Double(connectedNode?.positionConfig?.broadcastSmartMinimumDistance ?? 50) { + if lastPosition!.distance(from: LocationHelper.currentLocation) < Double(connectedNode?.positionConfig?.broadcastSmartMinimumDistance ?? 50) { return false } } } } - lastPosition = LocationHelper.currentLocation.coordinate + let locationHelper = LocationHelper() + lastPosition = locationHelper.lastLocation var positionPacket = Position() - positionPacket.latitudeI = Int32(LocationHelper.currentLocation.coordinate.latitude * 1e7) - positionPacket.longitudeI = Int32(LocationHelper.currentLocation.coordinate.longitude * 1e7) - positionPacket.time = UInt32(LocationHelper.currentLocation.timestamp.timeIntervalSince1970) - positionPacket.timestamp = UInt32(LocationHelper.currentLocation.timestamp.timeIntervalSince1970) - positionPacket.altitude = Int32(LocationHelper.currentLocation.altitude) + positionPacket.latitudeI = Int32(locationHelper.lastLocation?.coordinate.latitude ?? 0 * 1e7) + positionPacket.longitudeI = Int32(locationHelper.lastLocation?.coordinate.longitude ?? 0 * 1e7) + positionPacket.time = UInt32(locationHelper.lastLocation?.timestamp.timeIntervalSince1970 ?? 0) + positionPacket.timestamp = UInt32(locationHelper.lastLocation?.timestamp.timeIntervalSince1970 ?? 0) + positionPacket.altitude = Int32(locationHelper.lastLocation?.altitude ?? 0) positionPacket.satsInView = UInt32(LocationHelper.satsInView) if LocationHelper.currentLocation.speed >= 0 { - positionPacket.groundSpeed = UInt32(LocationHelper.currentLocation.speed * 3.6) + positionPacket.groundSpeed = UInt32(locationHelper.lastLocation?.speed ?? 0 * 3.6) } if LocationHelper.currentLocation.course >= 0 { - positionPacket.groundTrack = UInt32(LocationHelper.currentLocation.course) + positionPacket.groundTrack = UInt32(locationHelper.lastLocation?.course ?? 0) } var meshPacket = MeshPacket() meshPacket.to = UInt32(destNum) diff --git a/Meshtastic/Views/Map/Custom/MapViewSwiftUI.swift b/Meshtastic/Views/Map/Custom/MapViewSwiftUI.swift index 34950ae0..9581e603 100644 --- a/Meshtastic/Views/Map/Custom/MapViewSwiftUI.swift +++ b/Meshtastic/Views/Map/Custom/MapViewSwiftUI.swift @@ -121,6 +121,7 @@ struct MapViewSwiftUI: UIViewRepresentable { .filter { $0.latest == true } .sorted { $0.nodePosition?.num ?? 0 > $1.nodePosition?.num ?? -1 } let annotationCount = waypoints.count + (showNodeHistory ? positions.count : latest.count) + print("Waypoint Count: \(waypoints.count)") print("Annotation Count: \(annotationCount) Map Annotations: \(mapView.annotations.count)") mapView.removeAnnotations(mapView.annotations) mapView.addAnnotations(waypoints) diff --git a/Meshtastic/Views/Map/WaypointFormView.swift b/Meshtastic/Views/Map/WaypointFormView.swift index 43dd23cf..c53d26e5 100644 --- a/Meshtastic/Views/Map/WaypointFormView.swift +++ b/Meshtastic/Views/Map/WaypointFormView.swift @@ -13,9 +13,7 @@ struct WaypointFormView: View { @EnvironmentObject var bleManager: BLEManager @Environment(\.dismiss) private var dismiss @State var coordinate: WaypointCoordinate - @FocusState private var iconIsFocused: Bool - @State private var name: String = "" @State private var description: String = "" @State private var icon: String = "📍" @@ -36,7 +34,7 @@ struct WaypointFormView: View { .textSelection(.enabled) .foregroundColor(Color.gray) .font(.caption2) - if coordinate.coordinate?.latitude ?? -1 != LocationHelper.DefaultLocation.coordinate.latitude && coordinate.coordinate?.longitude ?? 0 != LocationHelper.DefaultLocation.coordinate.longitude { + if coordinate.coordinate?.latitude ?? 0 != 0 && coordinate.coordinate?.longitude ?? 0 != 0 { DistanceText(meters: distance) .foregroundColor(Color.gray) .font(.caption2) @@ -127,27 +125,26 @@ struct WaypointFormView: View { Button { var newWaypoint = Waypoint() - + // Loading a waypoint from edit if coordinate.waypointId > 0 { newWaypoint.id = UInt32(coordinate.waypointId) let waypoint = getWaypoint(id: Int64(coordinate.waypointId), context: bleManager.context!) newWaypoint.latitudeI = waypoint.latitudeI newWaypoint.longitudeI = waypoint.longitudeI } else { + // New waypoint newWaypoint.id = UInt32.random(in: UInt32(UInt8.max).. 0 ? name : "Dropped Pin" newWaypoint.description_p = description - // Unicode scalar value for the icon emoji string let unicodeScalers = icon.unicodeScalars // First element as an UInt32 let unicode = unicodeScalers[unicodeScalers.startIndex].value newWaypoint.icon = unicode if locked { - if lockedTo == 0 { newWaypoint.lockedTo = UInt32(bleManager.connectedPeripheral!.num) } else { @@ -212,7 +209,6 @@ struct WaypointFormView: View { let unicode = unicodeScalers[unicodeScalers.startIndex].value newWaypoint.icon = unicode if locked { - if lockedTo == 0 { newWaypoint.lockedTo = UInt32(bleManager.connectedPeripheral!.num) } else { @@ -261,7 +257,7 @@ struct WaypointFormView: View { description = "" locked = false expires = false - expire = Date.now.addingTimeInterval(60 * 120) + expire = Date.now.addingTimeInterval(60 * 480) icon = "📍" latitude = coordinate.coordinate?.latitude ?? 0 longitude = coordinate.coordinate?.longitude ?? 0