/** * Compute coordinates from Odd and Even Message (for bette result even message must be catched in first) * @param \Kletellier\Adsb $adsb_odd * @param \Kletellier\Adsb $adsb_even * @return key value array with latitude and longitude keys */ public static function getCoordinates(\Kletellier\Adsb $adsb_odd, \Kletellier\Adsb $adsb_even) { $ret = array(); $cprlat_odd = $adsb_odd->getLatitude(); $cprlon_odd = $adsb_odd->getLongitude(); $cprlat_even = $adsb_even->getLatitude(); $cprlon_even = $adsb_even->getLongitude(); $dlat_even = 360.0 / 60; $dlat_odd = 360.0 / 59; // calculate Latitude index $j = floor((59 * $cprlat_even - 60 * $cprlat_odd) / 131072 + 0.5); $lat_even = $dlat_even * (self::modPos($j, 60) + $cprlat_even / 131072); if ($lat_even >= 270) { $lat_even = $lat_even - 360; } $lat_odd = $dlat_odd * (self::modPos($j, 59) + $cprlat_odd / 131072); if ($lat_odd >= 270) { $lat_odd = $lat_odd - 360; } if (self::cprNL($lat_even) == self::cprNL($lat_odd)) { $lat = ""; $lon = ""; if ($adsb_even->getTs() > $adsb_odd->getTs()) { $lat = $lat_even; $ni = self::cprN($lat_even, 0); $m = floor(($cprlon_even * (self::cprNL($lat_even) - 1) - $cprlon_odd * self::cprNL($lat_even)) / 131072.0 + 0.5); $lon = 360.0 / $ni * (self::modPos($m, $ni) + $cprlon_even / 131072); } else { $lat = $lat_odd; $ni = self::cprN($lat_odd, 1); $m = floor(($cprlon_even * (self::cprNL($lat_odd) - 1) - $cprlon_odd * self::cprNL($lat_odd)) / 131072 + 0.5); $lon = 360.0 / $ni * (self::modPos($m, $ni) + $cprlon_odd / 131072); } $lon -= floor(($lon + 180) / 360) * 360; if ($lat > -91 && $lat < 91 && $lon > -181 && $lon < 181) { $ret["longitude"] = $lon; $ret["latitude"] = $lat; } else { $ret = FALSE; } } else { // incorrect value $ret = FALSE; } return $ret; }
public function testJsonDecoding() { $inst = new Adsb("*8D503DB0200C61F550C8202BA2C7;"); $json = $inst->toJson(); $inst2 = new Adsb(); $inst2->fromJson($json); $this->assertEquals($inst, $inst2); }