will-belo / geo-location-service
Serviço para encontrar lojas mais próximas baseado em geolocalização
v1.0.1
2025-03-25 22:34 UTC
Requires
- php: >=8.0
- guzzlehttp/guzzle: ^7.0
- illuminate/support: ^9.0 || ^10.0 || ^11.0 || ^12.0
Requires (Dev)
- phpunit/phpunit: ^9.0
README
Este projeto contém serviços para encontrar a loja mais próxima usando coordenadas geográficas.
📦 Instalação
via Composer:
composer require will-belo/geo-location-service
via git:
- Clone o repositório:
git clone https://github.com/seu-usuario/geo-location-service.git
cd geo-location-service
- Instale as dependências do Laravel (se aplicável):
composer install
⚙️ Configuração
- Adicione as configurações no
.env
Adicione as seguintes variáveis ao seu arquivo.env
GEOLOCATION_RADIUS=6371 GEOLOCATION_CACHE_DURATION=60 GEOLOCATION_GOOGLE_API_KEY=<YOUR_GoogleAPIKey_HERE> GEOLOCATION_ADDRESS_MODEL=App\Models\Address # Altere para o seu modelo de endereço, se necessário
- Configure sua model de endereço
O pacote pode ser usado com qualquer model, contanto que ela tenha as seguintes características:
✅ Colunas
latitude
elongitude
(em sua tabela de endereços) ✅ Um relacionamentorelatedEntity()
que aponta para a entidade que deseja associar ao endereço (ex.Store
,Shop
, etc.).
namespace App\Models; use Illuminate\Database\Eloquent\Model; class MyAddress extends Model { protected $table = 'addresses'; // Nome da tabela // Relacionamento com a entidade associada, como uma loja public function relatedEntity() { return $this->hasOne(\App\Models\Store::class); // Modelo que você deseja associar } }
- Configuração de Cache
Certifique-se de que a configuração de cache esteja corretamente definida no arquivo
.env
e emconfig/cache.php
.
🚀 Uso
- Encontrando a entidade mais próxima Agora você pode usar o serviço de geolocalização para encontrar a entidade (por exemplo, uma loja) mais próxima de uma latitude e longitude específicas. Exemplo de uso:
use GeoLocationService\Services\GeocodingService; $geoService = new GeocodingService(); $latitude = -23.550520; // Exemplo de latitude $longitude = -46.633308; // Exemplo de longitude $nearestEntity = $geoService->findNearestAddress($latitude, $longitude); if ($nearestEntity) { echo "Entidade mais próxima: " . $nearestEntity->relatedEntity->name; } else { echo "Nenhuma entidade encontrada próxima."; }
- Utilizando a API de Geocodificação (Google) Se você configurou a chave da API do Google Maps, você também pode usar o serviço para obter as coordenadas de um endereço:
use GeoLocationService\Services\GeoCodingAPI; $geoAPI = new GeoCodingAPI(); $address = "São Paulo, Brasil"; $coordinates = $geoAPI->getCoordinates($address); if ($coordinates) { echo "Latitude: " . $coordinates['lat']; echo "Longitude: " . $coordinates['lng']; } else { echo "Endereço não encontrado."; }
Licença
Este projeto está sob a licença MIT.