Получить текущее местоположение в Laravel: пакет геокодера и API геолокации по IP

Чтобы получить текущее местоположение в Laravel, вы можете использовать различные методы в зависимости от ваших требований. Вот некоторые распространенные подходы с примерами кода:

Метод 1: использование пакета «геокодер»

  1. Установите пакет «геокодер» с помощью Composer:
    composer require geocoder-php/geo-coder
  2. В ваш контроллер или класс импортируйте необходимые классы:
    use Geocoder\GeocoderFactory;
    use Geocoder\Exception\NoResult;
    // ...
    public function getCurrentLocation()
    {
    $geocoder = GeocoderFactory::create();
    try {
        $result = $geocoder->geocode(request()->ip()); // Pass the user's IP address
        $location = $result->first();
        $latitude = $location->getLatitude();
        $longitude = $location->getLongitude();
        // Use the latitude and longitude as per your requirements
        return "Latitude: $latitude, Longitude: $longitude";
    } catch (NoResult $e) {
        return "Unable to determine the location.";
    }
    }

Метод 2. Использование API геолокации по IP

  1. Подпишитесь на службу API геолокации по IP. Некоторые популярные варианты включают IPStack, GeoIP и FreeGeoIP.
  2. Получите ключ API, следуя документации поставщика.
  3. Установите пакет HTTP-клиента с помощью Composer:
    composer require guzzlehttp/guzzle
  4. В вашем контроллере или классе используйте следующий код:
    use GuzzleHttp\Client;
    // ...
    public function getCurrentLocation()
    {
    $client = new Client();
    $response = $client->get('https://api.ipgeolocationapi.com/geolocate');
    $data = json_decode($response->getBody(), true);
    $latitude = $data['geo']['latitude'];
    $longitude = $data['geo']['longitude'];
    // Use the latitude and longitude as per your requirements
    return "Latitude: $latitude, Longitude: $longitude";
    }

Обратите внимание, что эти методы предоставляют приблизительную информацию о местоположении на основе геолокации IP-адреса и не всегда могут быть точными.