You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
1.9 KiB

  1. <?php
  2. $app->get('/api/geocode', function() use($app) {
  3. $params = $app->request()->params();
  4. if(
  5. (k($params, 'latitude') !== null && k($params, 'longitude') !== null)
  6. || k($params, 'input') !== null
  7. ) {
  8. $response = [
  9. 'latitude' => null,
  10. 'longitude' => null,
  11. 'locality' => null,
  12. 'region' => null,
  13. 'country' => null,
  14. 'best_name' => null,
  15. 'full_name' => null,
  16. 'postal-code' => null,
  17. 'timezone' => null,
  18. 'offset' => null,
  19. 'seconds' => null,
  20. 'localtime' => null,
  21. ];
  22. if(k($params, 'input')) {
  23. $adr = p3k\Geocoder::geocode($params['input']);
  24. } else {
  25. $lat = (float)$params['latitude'];
  26. $lng = (float)$params['longitude'];
  27. $response['latitude'] = $lat;
  28. $response['longitude'] = $lng;
  29. $adr = p3k\Geocoder::adrFromLocation($lat, $lng);
  30. }
  31. if($adr) {
  32. $response['latitude'] = $adr->latitude;
  33. $response['longitude'] = $adr->longitude;
  34. $response['locality'] = $adr->localityName;
  35. $response['region'] = $adr->regionName;
  36. $response['country'] = $adr->countryName;
  37. $response['best_name'] = $adr->bestName;
  38. $response['full_name'] = $adr->fullName;
  39. $response['postal-code'] = $adr->postalCode;
  40. }
  41. $tz = p3k\Timezone::timezone_for_location($response['latitude'], $response['longitude'], k($params,'date'));
  42. $timezone = false;
  43. if($tz) {
  44. $timezone = new p3k\timezone\Result($tz, k($params, 'date'));
  45. }
  46. if($timezone) {
  47. $response['timezone'] = $timezone->name;
  48. $response['offset'] = $timezone->offset;
  49. $response['seconds'] = $timezone->seconds;
  50. $response['localtime'] = $timezone->localtime;
  51. }
  52. json_response($app, $response);
  53. } else {
  54. json_response($app, [
  55. 'error' => 'invalid_request',
  56. 'error_description' => 'Request was missing parameters'
  57. ], 400);
  58. }
  59. });