kopia lustrzana https://github.com/cyoung/stratux
determine tail before lat lon validation
rodzic
43c8be5cd3
commit
606e737736
25
main/ogn.go
25
main/ogn.go
|
@ -172,6 +172,19 @@ func importOgnTrafficMessage(msg OgnMessage, data string) {
|
||||||
// For ICAO it will be null, so traffic is merged. For others it will be 1, so traffic is kept seperately
|
// For ICAO it will be null, so traffic is merged. For others it will be 1, so traffic is kept seperately
|
||||||
key := uint32(addrType) << 24 | address
|
key := uint32(addrType) << 24 | address
|
||||||
|
|
||||||
|
trafficMutex.Lock()
|
||||||
|
defer trafficMutex.Unlock()
|
||||||
|
|
||||||
|
if existingTi, ok := traffic[key]; ok {
|
||||||
|
ti = existingTi
|
||||||
|
// ogn-rx sends 2 types of messages.. normal ones with coords etc, and ones that only supply registration info. These usually don't have
|
||||||
|
// coords, so we can't validate them easily. Therefore, this is handled before other validations and only if we already received the traffic earlier
|
||||||
|
if len(msg.Reg) > 0 {
|
||||||
|
ti.Tail = msg.Reg
|
||||||
|
traffic[key] = ti
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// Sometimes there seems to be wildly invalid lat/lons, which can trip over distRect's normailization..
|
// Sometimes there seems to be wildly invalid lat/lons, which can trip over distRect's normailization..
|
||||||
if msg.Lat_deg > 360 || msg.Lat_deg < -360 || msg.Lon_deg > 360 || msg.Lon_deg < -360 {
|
if msg.Lat_deg > 360 || msg.Lat_deg < -360 || msg.Lon_deg > 360 || msg.Lon_deg < -360 {
|
||||||
|
@ -180,22 +193,14 @@ func importOgnTrafficMessage(msg OgnMessage, data string) {
|
||||||
|
|
||||||
// Basic plausibility check:
|
// Basic plausibility check:
|
||||||
dist, _, _, _ := distRect(float64(mySituation.GPSLatitude), float64(mySituation.GPSLongitude), float64(msg.Lat_deg), float64(msg.Lon_deg))
|
dist, _, _, _ := distRect(float64(mySituation.GPSLatitude), float64(mySituation.GPSLongitude), float64(msg.Lat_deg), float64(msg.Lon_deg))
|
||||||
if dist >= 50000 || (msg.Lat_deg == 0 && msg.Lon_deg == 0) {
|
if (isGPSValid() && dist >= 50000) || (msg.Lat_deg == 0 && msg.Lon_deg == 0) {
|
||||||
// more than 50km away? Ignore. Most likely invalid data
|
// more than 50km away? Ignore. Most likely invalid data
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
trafficMutex.Lock()
|
|
||||||
defer trafficMutex.Unlock()
|
|
||||||
|
|
||||||
if existingTi, ok := traffic[key]; ok {
|
|
||||||
ti = existingTi
|
|
||||||
}
|
|
||||||
ti.Icao_addr = address
|
ti.Icao_addr = address
|
||||||
ti.Addr_type = addrType
|
ti.Addr_type = addrType
|
||||||
if len(msg.Reg) > 0 {
|
|
||||||
ti.Tail = msg.Reg
|
|
||||||
}
|
|
||||||
if len(ti.Tail) == 0 {
|
if len(ti.Tail) == 0 {
|
||||||
ti.Tail = getTailNumber(msg.Addr, msg.Sys)
|
ti.Tail = getTailNumber(msg.Addr, msg.Sys)
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue