locator.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. # Debug
  3. ini_set('display_errors', 1);
  4. ini_set('display_startup_errors', 1);
  5. error_reporting(E_ALL);
  6. require "vendor/autoload.php";
  7. if (isset($_GET["address"])) {
  8. $address = filter_var($_GET["address"], FILTER_SANITIZE_STRING);
  9. $address = base64_decode($address);
  10. $address = ucwords(trim($address));
  11. # Nominatim Usage Policy
  12. # https://operations.osmfoundation.org/policies/nominatim/
  13. # sleep(1);
  14. # OpenStreetMap Nominatim API
  15. $url = 'https://nominatim.openstreetmap.org/search?q=' . urlencode($address) . '&limit=1&format=json';
  16. $ch = curl_init();
  17. # Set cURL User Agent
  18. curl_setopt($ch, CURLOPT_USERAGENT, "PostmanRuntime/7.28.4");
  19. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  20. curl_setopt($ch, CURLOPT_URL, $url);
  21. $response = curl_exec($ch);
  22. curl_close($ch);
  23. # Response
  24. $a = json_decode($response, true);
  25. $valid = false;
  26. foreach ($a as $array) {
  27. foreach ($array as $k => $v) {
  28. switch ("$k") {
  29. case "lat":
  30. echo "<div class='alert alert-primary' role='alert'>";
  31. echo "<b>Latitude</b>: " . round($v, 8) . "<br>";
  32. $valid = true;
  33. break;
  34. case "lon":
  35. echo "<b>Longitude</b>: " . round($v, 8);
  36. echo "</div>";
  37. $valid = true;
  38. break;
  39. }
  40. }
  41. }
  42. if ($valid === false) {
  43. echo "<div class='alert alert-danger' role='alert'>";
  44. echo "Something goes wrong!";
  45. echo "</div>";
  46. }
  47. } else {
  48. $favicon = <<<EOL
  49. data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAADwCAYAAAA+VemSAAAABmJLR0QA/wD/AP+gvaeTAAANhUlEQVR4nO3dW6xeRRnG8f+mF
  50. FosIgZoKRQJBloLCJWgEDmUkEYIAkYFFCJGIRATD/FCxXjDJYYLI3hDQI2iQCLxhFEixoYKiNBiRBNoEYGUFlrUFii0lNbtxXwbetjHb6/5nnlnnl/yJlyU
  51. zMxa8+5v1rvWmjWERbQ/cBywsBeLgXnAwb04aIz/b3MvNgEvAE8Aq4EngaeAN7L22jo3pO6ATcoi4BxgKXAKcDQwo+M2dgLPAKuA5b1Y03EbZk04FLgK+Am
  52. wDhgWxTrgduDzwCFZR2wW3IHANcADpF9DVdKOFTt7fbum11czA04HbiNdm6qTdLKxCbgVOC3D8TAr3hBwCfBX9Mk43XisNxbXU6x6M4ArgcfRJ17X8bfe2L
  53. ourpkV4cOkXyt1ouWOR/HS2iqyALgHfWINOu4Bjuzg+JlJ7AdcD2xBn0yq2Ax8Bdh3eofSbLDeAzyEPoFKiQeAo6Z1RM0G5NPAK+iTprR4GbhsGsfVLKsDg
  54. B+jT5TS4xbSs9xmxVgAPIw+OaLEg8ARfR1ps44tIb3Zo06KaPECcHIfx9usM8uAV9EnQ9TYBJw15aNu1oFLgW3okyB6bCM9imk2MFcAb6Kf/LXEduBTUzoD
  55. Zn26hDJf94seO4BPTOE8mE3ZMtK2M+rJXmtsBc6c9Nkwm4IlpIcR1JO89tiMq9PWsQXAWvSTu5V4Dt8nto7MJr3rqp7UrcWj+ImtCfnl64l9F/iouhMNmk/
  56. ae+tedUcsrivQ/xK1Hh+f8CyZjWIRfsqqhNgEHDPBuTLbzT7An9FPXkeKP/XOie3B18Cj+zJwtboT9pajgI2kwpbtwluB7u0I0jeDvHl5WV4hXda8oO5ISf
  57. wLvLdbSN8fsrLsT/rkzC/VHSmJf4F3dzbpo16Rjss20mYCK3n7S4PrSY8lbuv9m1mk+9nzSb9iC4FTSdu/RrrXOgycQdpvzGw3Q8R5YGMjcBPpi4WzpjHm2
  58. cC5wM3ASwWMazKxklh/YG1APoZ+ck4UK4CLgJkZxj8TuJi0g6R6nBPFBRnGb8E9gn5ijhXLGezOFUtJfyzU4x4rHsw2cgvpfPSTcrR4Grgw47gnciHwr1H6
  59. VUIsyzhuC2Y5+gm5Z9wOzMk56Ek6ELgD/fHYM+7LOWiL4zT0k3HX2ApclXXE/bmW8vYAOzXriC2EH6CfiCOxkbIn5Qcpq1p9a97hWulmk3aAUE/EYdK92xP
  60. zDrcTJ1HOPtj/JdZ9bOvY5egn4TCwATg281i7tBj4D/rjNkza3tca9Rv0EzDqRm5LKeOa+BeZx2mFOpy0lal6An4290Azuhr98XsTmJt7oFaea9BPvruyjz
  61. K/u9EfxxKr9pbZnWgn3TrgoOyjzO9d6ItaP8s+SivKEOmWjXLS1fQVgsvQHsuXyfN8uBXqeLQT7g/5hzhQQ8D9aI/ph7KPskCt7jOkfI52GPi6sP0choFvi
  62. PvQ5GdKW01g5cn+I/CYsP1cHib9CqucLmzbBuxZdEu98/IPT+YCdMf16QGMzwowB/gfmkm2lrpXPTPQVaR3kh6NbUrNk2ksx6LbkuVO0h+PWu1Ed297H2I9
  63. jtqJFhP4OGHbvxa2PSjKMSrPrUSLCbxI1O6rpEJP7R4EXhO1rTq3Mi0msGqZ9RDp2evabUf3h8q/wA1QfTi6pc+CPCJqd76oXZkWE/gQUburRe0qqMaqOrc
  64. yLSbwu0XtrhG1q6Aaq+rcyrSYwO8QtfuiqF0F1VhL2MVzoFpM4P1E7W4Rtavwqqjd5vbHcgIPjhM4PydwA4bVHbBsan7KbVQtJvBWUbstfTD8naJ2Xxe1K9
  65. NiAqtOcksJrBqrE7gBql/geaJ2FQ4XtesEboCqmLRQ1K6CaqwtFQqBNhN4najdlh60VyWw6tzKOIEHZ4moXYVTRO06gRuwVtTumbRxn3I2cIaobdW5lWkxg
  66. Z8XtXsAZX86tCunoftDpTq3Mi0m8BPCtj8pbHtQlGNUnlsbkDmkvZsUG69toO4vCOyH7rOjO9C9qCLT4i/wFuAZUduHAeeK2h6EZehe6fsnuq18ZFpMYNBu
  67. rH6dsO3cviVsu8bN8ifUagIrt7c5mzq/InAm2nG1tGVR85aguU4bCX/crPt4f/ZRWjGG0H/T9jPZRzk4n0N7LNej26zfRO5CO+n8ge/u4qfZR1moVq+BAX4
  68. nbn8+cIu4D124Df2bVveK2zeBA0mvnyl/OYaBL+YeaEZfRX/8XqPBzews+RX6CbiVVMGNZimwDf3x+3nmcVrBLkM/AYeBV9C9wdOP00m/fOrjNkwbj6faGO
  69. aQkkc9CYdJldQT8w63EyehL1qNxGbSSyLWsO+gn4gjsQX4SN7hTsv5pD6qj9NI3Jh3uBbBItJ2pOrJOBJbgauyjrg/11LGNe9I7KTBD3rb6H6PfkLuGbdTR
  70. nX1QOAO9Mdjz/htzkFbLOehn5CjxVrg0ozjHs8QcDnpJXn1cRgtluUbukX0APpJOVYsB87KN/S9LAVWdDyGLuP+bCO3sJain5gTxQrgIvJsCjATuJiy/5CN
  71. RMT75jYA96GfnJOJjcBNwDnArGmMdzZpg4GbgZcKGNdkQv0IbFH8BsfuTgZWAjPUHZmCbcDDpH6vBp4kvSixGdjU+zcHk146OIJUdV9I2mBPuQFdP3YAHwD
  72. +ru6IletG9L8yjtHj2+Octyb5F3hvc0i7Gx6p7ojt5lngeBr8/tF4Wn6dcCxbgK+pO2F7uQ4nr03Bj9AvGR0pfjjBuTLbyxxgDfrJ23qspsH9nq0bpwLb0U
  73. /iVmM7sV6zHLhIt0sU1pNuXdS8GXvJvgncre6Exfd99L9GrcWtkzozZpMwC/gL+kndSqyg7m9ImcBRpLeD1JO79ngO34O3TN5Lui5WT/JaYx1wzKTPhlkfT
  74. kD3Cc2a49+kJ63MsjsDeBn9pK8lNlHnB9+sYIspd7eKSLEWeN8Uj71ZJ44GnkKfBFFjTe8YmsksIL2Lq06GaPEorjZbIfYFbkCfFFHiht4xMyvKl/Cz0+PF
  75. G8AX+j66ZgOwGFiFPllKi5W4WGVBzASuJ70IoU4cdezoHQsvmS2cpcA/0CeRKh5nsPtZm3VuH+BKYAP6hBpUvNgbs/dcs2ocBnyPVMhRJ1iu2Ebar/rQjo6
  76. ZWXEOJd1GeR19wnUVr/fG5MS1ZpyIPvG6ihM6PjZmIdTwLPXazo+KTZr3hdZape5AB2oYQ1hOYK0aJn8NYwjLCay1Ut2BDtQwhrB8n05rLumeaWRzSZ87NQ
  77. H/AmttIO0DFdXzOHmlnMB6ka8hI/e9Ck5gvchJELnvVXAC60VOgsh9N+vEXPQPY/Qbh2U4HjYF/gXWi1rIcgGrAE7gMkRcikbsc3WcwGWImAwR+1wdJ3AZI
  78. iZDxD6bZRGxkOUCltkuIr1a6FcIC+EldDkiLUkj9bVqTuByREqKSH2tmhO4HJGSIlJfzQYiUiFrbqZjYBZahEKWC1gF8RK6LBGWphH62AwncFkiJEeEPjbD
  79. CVyWCMkRoY9mEhEKWS5gmY2j5EKWC1iF8RK6PCUvUUvuW5OcwOUpOUlK7luTnMDlKTlJSu6bWRFKLmS5gGU2CSUWslzAKpCX0GUqcalaYp+a5wQuU4nJUmK
  80. fmucELlOJyVJin8yKVGIhywUssykoqZDlAlahvIQuV0lL1pL6YrtwAperpKQpqS+2CydwuUpKmpL6YhZCSYUsF7DM+rAOffI+n32U1jcvocu2Ut0ByuiDjc
  81. EJXLYSrj1L6IONwQlcthKSp4Q+mIVUQiHLBSyzaVAWslzAKpyX0OVTLmG9fC6cE7h8TmAbkxO4fMrbOL6FZDZNykKWC1hmHVAUslzACsBL6BgU16K+/g3AC
  82. RyDE9hG5QSOQVFMcgHLrCOKQpYLWGYdGmQhywWsILyEjmOQ16S+/g3CCRyHE9j24gSOwwlsFtggC1kuYJllMIhClgtYgXgJHcsglrZePgfiBI7FCWy7cQLH
  83. 4gQ2C2wQhSwXsMwyylnIcgErGC+h48m5xPXyORgncDxOYHuLEzgeJ7BZYPNwAcsstByFLBewAvISOqYcS10vnwNyAsfkBDbACRyVE9gssByFLBewzAaoy0K
  84. WC1hBeQkdV5dLXi+fg3ICx+UENidwYE5gs8AOxwUss9C6KGS5gBWYl9CxdbH09fI5MCdwbE7gxjmBY3MCmwXWRSHLBSwzofX0n7zrBP21DnkJHd90PsTtj3
  85. gH5wSObzrXsL7+Dc4JHJ8T2Cyw6RSyXMAyK0A/hSwXsCrgJXQd+ilGuYBVASdwHfq5lvX1bwWcwHVwApsF1k8hywUss4JMpZDlAlYlvISux1SWxF4+V8IJX
  86. A8ncIOcwPWYym0h30IyK8xUClkuYJkVaDKFLBewKuIldF0mc23r69+KOIHr4gRujBO4LpMpTrmAZVaoyRSyXMAyK9h4hSwXsCrjJXR9xrvG9fVvZZzA9XEC
  87. N8QJXB8nsFlg4xWyXMAyC2C0QpYLWBXyErpOoy2VvXyukBO4Tk7gRjiB6+QENgtstEKWC1hmgexayHIBq1JeQtdr1Rj/bRVxAtfLCdwAJ3C9nMBmgc3n7Wv
  88. geeK+mFkf1uMCVtX2VXfAslpF+gW2SjmB6+YErpwTuG5O4MrNUHfAstpCug7eou6I5fF/vHbSxLeHmIAAAAAASUVORK5CYII=
  89. EOL;
  90. // Smarty
  91. $smarty = new Smarty();
  92. $smarty->setTemplateDir("./smarty/template");
  93. $smarty->setCompileDir("./smarty/compile");
  94. $smarty->assign("title", "OSM Locator");
  95. $smarty->assign("favicon", $favicon);
  96. $smarty->display("locator.tpl");
  97. }