diff options
| -rw-r--r-- | LearnMapKit/ContentView.swift | 3 | ||||
| -rw-r--r-- | LearnMapKit/FlighState.swift | 84 |
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") |
