From d8f9e19940c922f49c63622dd49d557f94deda84 Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Sat, 13 Nov 2021 17:34:33 -0700 Subject: [PATCH] Update FixPhrase library --- lib/FixPhrase.lib.php | 89 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 78 insertions(+), 11 deletions(-) diff --git a/lib/FixPhrase.lib.php b/lib/FixPhrase.lib.php index 65123ad..6fc0d2e 100644 --- a/lib/FixPhrase.lib.php +++ b/lib/FixPhrase.lib.php @@ -1,5 +1,30 @@ 4) { - throw new Exception("Too many words!"); + //throw new Exception("Too many words!"); } // Convert words back into indices and do the math to make them coordinate chunks foreach ($words as $word) { $index = array_search($word, self::WORDLIST); if ($index === false) { - throw new Exception("Unrecognized word found!"); + //throw new Exception("Unrecognized word found!"); } if ($index >= 0 && $index < 2000) { $indexes[0] = $index; + $canonicalphrase[0] = self::WORDLIST[$index]; } else if ($index >= 2000 && $index < 5610) { $indexes[1] = $index - 2000; + $canonicalphrase[1] = self::WORDLIST[$index]; } else if ($index >= 5610 && $index < 6610) { $indexes[2] = $index - 5610; + $canonicalphrase[2] = self::WORDLIST[$index]; } else if ($index >= 6610 && $index < 7610) { $indexes[3] = $index - 6610; + $canonicalphrase[3] = self::WORDLIST[$index]; } } @@ -7684,18 +7726,43 @@ class FixPhrase { $lat = str_pad((string) $indexes[0], 4, "0", STR_PAD_LEFT); $lon = str_pad((string) $indexes[1], 4, "0", STR_PAD_LEFT); - // Get the last three digits of each coordinate + // Get second decimal for latitude and longitude + if ($indexes[2] != -1) { + $divby = 100.0; + $latlon2dec = str_pad((string) $indexes[2], 3, "0", STR_PAD_LEFT); + $lat .= substr($latlon2dec, 0, 1); + $lon .= substr($latlon2dec, 2, 1); + } + + // Get third and fourth latitude and fourth longitude if ($indexes[2] != -1 && $indexes[3] != -1) { $divby = 10000.0; - $lat .= str_pad((string) $indexes[2], 3, "0", STR_PAD_LEFT); - $lon .= str_pad((string) $indexes[3], 3, "0", STR_PAD_LEFT); + $latlon4dec = str_pad((string) $indexes[3], 3, "0", STR_PAD_LEFT); + $lat .= substr($latlon2dec, 1, 1) . substr($latlon4dec, 0, 1); + $lon .= substr($latlon4dec, 1, 2); } // Make them normal coordinates again with +/- and 0-90 or 0-180 $latitude = round((((int) $lat) / $divby) - 90.0, 4); $longitude = round((((int) $lon) / $divby) - 180.0, 4); - return [$latitude, $longitude]; + switch ($divby) { + case 10.0: + $latitude += 0.05; + $longitude += 0.05; + $accuracy = 0.1; + break; + case 100.0: + $latitude += 0.005; + $longitude += 0.005; + $accuracy = 0.01; + break; + case 10000.0: + $accuracy = 0.0001; + break; + } + + return [round($latitude, 4), round($longitude, 4), $accuracy, trim(implode(" ", $canonicalphrase))]; } }