|
|
|
@ -1,4 +1,5 @@
|
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
/* Copyright 2021 Netsyms Technologies.
|
|
|
|
|
|
|
|
|
|
Redistribution and use in source and binary forms, with or without modification, are permitted
|
|
|
|
@ -23,6 +24,7 @@
|
|
|
|
|
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
|
|
|
|
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
class FixPhrase {
|
|
|
|
|
|
|
|
|
|
private const WORDLIST = [
|
|
|
|
@ -7676,31 +7678,43 @@ class FixPhrase {
|
|
|
|
|
return implode(" ", [self::WORDLIST[$groups[0]], self::WORDLIST[$groups[1]], self::WORDLIST[$groups[2]], self::WORDLIST[$groups[3]]]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Convert a phrase into coordinates.
|
|
|
|
|
* @param string $words
|
|
|
|
|
* @return array [latitude, longitude, accuracy (degrees), phrase]
|
|
|
|
|
* @throws Exception If the phrase is not valid.
|
|
|
|
|
*/
|
|
|
|
|
public static function decode(string $words): array {
|
|
|
|
|
$indexes = [-1, -1, -1, -1];
|
|
|
|
|
|
|
|
|
|
$words = explode(" ", strtolower($words));
|
|
|
|
|
|
|
|
|
|
$canonicalphrase = ["", "", "", ""];
|
|
|
|
|
|
|
|
|
|
if (count($words) < 2) {
|
|
|
|
|
throw new Exception("Not enough words!");
|
|
|
|
|
} else if (count($words) > 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];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -7748,7 +7762,7 @@ class FixPhrase {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return [round($latitude, 4), round($longitude, 4), $accuracy];
|
|
|
|
|
return [round($latitude, 4), round($longitude, 4), $accuracy, trim(implode(" ", $canonicalphrase))];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|