summaryrefslogtreecommitdiff
path: root/LearnMapKit
diff options
context:
space:
mode:
authorArturs Artamonovs <arturs.artamonovs@protonmail.com>2026-09-09 16:07:50 +0100
committerArturs Artamonovs <arturs.artamonovs@protonmail.com>2026-09-09 16:07:50 +0100
commit083679320dcceb8e370c4c0b793d7c26c9745019 (patch)
tree1deb02c5d1049e26dfc6d31e769f5520fb562dcc /LearnMapKit
parent2b599499dc26f0f93537d1bea4733eae68333a1c (diff)
downloadADSBDecoder-fix/airplain-direction.tar.gz
ADSBDecoder-fix/airplain-direction.zip
planes icon's now turns according of plane movementfix/airplain-direction
Diffstat (limited to 'LearnMapKit')
-rw-r--r--LearnMapKit/ContentView.swift3
-rw-r--r--LearnMapKit/FlighState.swift84
2 files changed, 22 insertions, 65 deletions
diff --git a/LearnMapKit/ContentView.swift b/LearnMapKit/ContentView.swift
index 4042831..4d597f6 100644
--- a/LearnMapKit/ContentView.swift
+++ b/LearnMapKit/ContentView.swift
@@ -44,7 +44,8 @@ struct ContentView: View {
.stroke(.secondary,lineWidth: 5)
Image(systemName:"airplane.circle.fill")
.resizable()
- .frame(width:20,height: 20)
+ .frame(width:20,height: 20)
+ .rotationEffect(.degrees(flight.direction-90))
}
Text("\(flight.ICAOName)").font(.body)
}
diff --git a/LearnMapKit/FlighState.swift b/LearnMapKit/FlighState.swift
index 9e901c6..9bb6782 100644
--- a/LearnMapKit/FlighState.swift
+++ b/LearnMapKit/FlighState.swift
@@ -25,6 +25,8 @@ class FlightTracker: Identifiable {
var flightTo:String = ""
var id: String { String(ICAOaddress) }
+ var direction = 0.0
+
enum CodingKeys: String, CodingKey {
case ICAOName
@@ -55,8 +57,8 @@ class FlightState: ObservableObject {
var process_per_second = 120
var sourceDump1090Server = true
- var dump1090address = "64.226.23.78"
- var dump1090port = 30003
+ var dump1090address = "X.X.X.X"
+ var dump1090port = 12345
init() {
print("Init")
@@ -236,59 +238,6 @@ class FlightState: ObservableObject {
}
func addLocation(_ address: Int, _ lat: Double, _ long: Double) {
- /*
- //usign as dictionary
- if flight[address] == nil {
- flight[address] = FlightTracker()
- flight[address]?.last_time_seen = Int(Date().timeIntervalSince1970)
- flight[address]?.Position_avaliable = true
- flight[address]?.lat = lat
- flight[address]?.long = long
- print("new location")
- return
- } else {
- if let f = flight[address] {
- f.last_time_seen = Int(Date().timeIntervalSince1970)
- f.Position_avaliable = true
- f.lat = lat
- f.long = long
- if f.ICAOName_avaliable {
- print("Update location name: \(f.ICAOName) lat:\(f.lat) long:\(f.long)")
- } else {
- print("Update location addr: \(address) lat:\(f.lat) long:\(f.long)")
- }
- return
- }
-
- }*/
- //using as array
- /*
- if self.idx_flight[address] == nil {
- let f = FlightTracker()
- f.ICAOaddress = address
- f.last_time_seen = Int(Date().timeIntervalSince1970)
- f.Position_avaliable = true
- f.lat = lat
- f.long = long
- flight.append(f)
- print(idx_flight[address])
- idx_flight[address] = flight.count-1
- print("add new location \(address) ")
- } else {
- if let idx = idx_flight[address] {
- let f = flight[idx]
- f.last_time_seen = Int(Date().timeIntervalSince1970)
- f.Position_avaliable = true
- f.lat = lat
- f.long = long
- if f.ICAOName_avaliable {
- print("Update location name: \(f.ICAOName) lat:\(f.lat) long:\(f.long)")
- } else {
- print("Update location addr: \(address) lat:\(f.lat) long:\(f.long)")
- }
- return
- }
- }*/
if self.idx_flight[address] == nil {
let f = FlightTracker()
f.ICAOaddress = address
@@ -299,13 +248,16 @@ class FlightState: ObservableObject {
flight.append(f)
//print(idx_flight[address])
idx_flight[address] = flight.count-1
- print("add new location \(address) ")
+ print("Add new flight \(address) ")
} else {
if let idx = idx_flight[address] {
print("Flights loc \(flight.count)")
let f = flight[idx]
f.last_time_seen = Int(Date().timeIntervalSince1970)
f.Position_avaliable = true
+ if max(abs(lat - f.lat), abs(long - f.long)) >= 0.0005 {
+ f.direction = updateDirection(f.lat, f.long, lat, long)
+ }
f.lat = lat
f.long = long
if f.ICAOName_avaliable {
@@ -314,6 +266,7 @@ class FlightState: ObservableObject {
print("Update location addr: \(address) lat:\(f.lat) long:\(f.long)")
}
flight.append(f)
+ //self.objectWillChange.send()
return
}
}
@@ -321,6 +274,17 @@ class FlightState: ObservableObject {
//print("No update?")
}
+ func updateDirection(_ oldLat: Double, _ oldLong: Double, _ newLat: Double, _ newLong: Double) -> Double {
+ let deltaLat = newLat - oldLat
+ let deltaLong = newLong - oldLong
+ let meanLat = (newLat + oldLat) * 0.5 * .pi / 180.0
+ let east = deltaLong * cos(meanLat)
+ let north = deltaLat
+ let radians = atan2(east,north)
+ let degrees = radians * 180.0 / .pi
+ return degrees < 0 ? degrees + 360.0 : degrees
+ }
+
func addIcaoName(_ address: Int, _ icaoname: String) {
/*
if flight[address] == nil {
@@ -352,14 +316,6 @@ class FlightState: ObservableObject {
} else {
if let idx = idx_flight[address] {
print("Flights \(flight.count)")
- //let f = flight[idx]
- /*f.last_time_seen = Int(Date().timeIntervalSince1970)
- if f.ICAOName_avaliable == false {
- f.ICAOName_avaliable = true
- f.ICAOName = icaoname
- print("flight timestamp updated")
- return
- }*/
}
}
print("icao name")