mirror of
https://github.com/meshtastic/Meshtastic-Apple.git
synced 2026-04-20 22:13:56 +00:00
* Add SwiftUI previews for simple helper views Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Apple/sessions/a2a43e8c-24fd-443a-8a98-13b678770edd Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com> * Add previews for action buttons, ChannelForm, MetricsColumnDetail, and DeviceOnboarding Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Apple/sessions/a2a43e8c-24fd-443a-8a98-13b678770edd Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com> * Add previews for config views, log views, AppLog, Firmware, AppData, and UserConfig Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Apple/sessions/a2a43e8c-24fd-443a-8a98-13b678770edd Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com> * Add preview for PositionConfig Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Apple/sessions/a2a43e8c-24fd-443a-8a98-13b678770edd Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com> * Fix formatting bugs in #Preview blocks: restore missing .environmentObject/.environment modifiers and add proper tab indentation Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Apple/sessions/7eeb7a54-7928-466f-8e39-b00d0012a09d Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com> * Linting fixes --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com> Co-authored-by: Garth Vander Houwen <garthvh@yahoo.com>
71 lines
2.7 KiB
Swift
71 lines
2.7 KiB
Swift
//
|
|
// GPSStatus.swift
|
|
// Meshtastic
|
|
//
|
|
// Copyright(c) by Garth Vander Houwen 12/22/23.
|
|
//
|
|
|
|
import SwiftUI
|
|
import CoreLocation
|
|
|
|
struct GPSStatus: View {
|
|
|
|
var largeFont: Font = .footnote
|
|
var smallFont: Font = .caption2
|
|
|
|
@ObservedObject var locationsHandler: LocationsHandler = LocationsHandler.shared
|
|
var body: some View {
|
|
|
|
if let newLocation = locationsHandler.locationsArray.last {
|
|
let horizontalAccuracy = Measurement(value: newLocation.horizontalAccuracy, unit: UnitLength.meters)
|
|
let verticalAccuracy = Measurement(value: newLocation.verticalAccuracy, unit: UnitLength.meters)
|
|
let altitiude = Measurement(value: newLocation.altitude, unit: UnitLength.meters)
|
|
let speed = Measurement(value: newLocation.speed, unit: UnitSpeed.kilometersPerHour)
|
|
let speedAccuracy = Measurement(value: newLocation.speedAccuracy, unit: UnitSpeed.metersPerSecond)
|
|
let courseAccuracy = Measurement(value: newLocation.courseAccuracy, unit: UnitAngle.degrees)
|
|
|
|
Label("Coordinate \(String(format: "%.5f", newLocation.coordinate.latitude)), \(String(format: "%.5f", newLocation.coordinate.longitude))", systemImage: "mappin")
|
|
.font(largeFont)
|
|
.textSelection(.enabled)
|
|
HStack {
|
|
Label("Accuracy \(horizontalAccuracy.formatted())", systemImage: "scope")
|
|
.font(largeFont)
|
|
Label("Sats Estimate \(LocationsHandler.satsInView)", systemImage: "sparkles")
|
|
.font(largeFont)
|
|
|
|
}
|
|
HStack {
|
|
if newLocation.verticalAccuracy > 0 {
|
|
Label("Altitude \(altitiude.formatted())", systemImage: "mountain.2")
|
|
.font(largeFont)
|
|
}
|
|
Label("Accuracy \(verticalAccuracy.formatted())", systemImage: "lines.measurement.vertical")
|
|
.font(smallFont)
|
|
}
|
|
HStack {
|
|
let degrees = Angle.degrees(newLocation.course)
|
|
Label {
|
|
let heading = Measurement(value: degrees.degrees, unit: UnitAngle.degrees)
|
|
Text("Heading: \(heading.formatted(.measurement(width: .narrow, numberFormatStyle: .number.precision(.fractionLength(0)))))")
|
|
} icon: {
|
|
Image(systemName: "location.north")
|
|
.symbolRenderingMode(.hierarchical)
|
|
.rotationEffect(degrees)
|
|
}
|
|
.font(largeFont)
|
|
Label("Accuracy \(courseAccuracy.formatted(.measurement(width: .narrow, numberFormatStyle: .number.precision(.fractionLength(0)))))", systemImage: "safari")
|
|
.font(smallFont)
|
|
}
|
|
HStack {
|
|
Label("Speed \(speed.formatted(.measurement(width: .abbreviated, numberFormatStyle: .number.precision(.fractionLength(0)))))", systemImage: "speedometer")
|
|
.font(largeFont)
|
|
Label("Accuracy \(speedAccuracy.formatted(.measurement(width: .abbreviated, numberFormatStyle: .number.precision(.fractionLength(0)))))", systemImage: "gauge.with.dots.needle.bottom.50percent.badge.plus")
|
|
.font(smallFont)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#Preview {
|
|
GPSStatus()
|
|
}
|