Geolocalização e Mapas em PHP: Bibliotecas, API e Exemplos de Código

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Geolocalização e Mapas em PHP: Visão Geral das Ferramentas e Exemplos de Código



No desenvolvimento web moderno, a funcionalidade de geolocalização e trabalho com mapas tornou-se parte integrante de muitos projetos. O PHP, sendo uma linguagem do lado do servidor, lida muito bem com o processamento de dados geoespaciais, integração de serviços de mapas e determinação da localização dos usuários. Neste artigo, abordaremos em detalhes as principais bibliotecas e ferramentas para trabalhar com geolocalização e mapas em PHP, além de fornecer exemplos práticos de código.



1. Determinação de Localização por Endereço IP (GeoIP)



A maneira mais simples de obter a geolocalização aproximada de um usuário é determinar seu país e cidade pelo endereço IP. Para isso, existem várias soluções em PHP:



Biblioteca geoip2 (MaxMind GeoIP2)



A MaxMind fornece o banco de dados gratuito GeoLite2 e o pago GeoIP2. Instalação via Composer:



composer require geoip2/geoip2


Exemplo de determinação de localização:



<?phprequire_once 'vendor/autoload.php';

use GeoIp2\\Database\\Reader;

// Informe o caminho para o banco de dados GeoLite2-City.mmdb baixado$reader = new Reader('/caminho/para/GeoLite2-City.mmdb');$record = $reader->city('8.8.8.8'); // Endereço IP para verificação

echo "País: " . $record->country->name . "<br>";echo "Cidade: " . $record->city->name . "<br>";echo "Latitude: " . $record->location->latitude . "<br>";echo "Longitude: " . $record->location->longitude . "<br>";?>


Função embutida geoip_record_by_name()



Se a extensão GeoIP (obsoleta) estiver instalada no servidor, você pode usar:



<?php$record = geoip_record_by_name('8.8.8.8');echo "Cidade: " . $record['city'];?>


2. Trabalhando com Mapas via JavaScript + PHP



O PHP gera HTML/JavaScript, e a renderização dos mapas ocorre no lado do cliente. As bibliotecas mais populares são:



  • Leaflet — leve, gratuito, sem necessidade de chaves de API
  • OpenLayers — poderoso, para tarefas geoespaciais complexas
  • Google Maps JavaScript API — requer chave, mas oferece funcionalidades ricas


Exemplo de Integração do Leaflet com PHP



Vamos criar um mapa simples com um marcador, cujas coordenadas são passadas do PHP:



<?php$lat = 55.7558;  // Moscou$lng = 37.6173;?><!DOCTYPE html><html><head>    <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />    <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script></head><body>    <div id="map" style="height: 400px; width: 100%;"></div>    <script>        var map = L.map('map').setView([<?= $lat ?>, <?= $lng ?>], 10);        L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {            attribution: '&copy; OpenStreetMap contributors'        }).addTo(map);        L.marker([<?= $lat ?>, <?= $lng ?>]).addTo(map)            .bindPopup('Marcador do PHP');    </script></body></html>


3. Geocodificação (Conversão de Endereço em Coordenadas)



Para obter coordenadas a partir de um endereço, use APIs:



  • Nominatim (OpenStreetMap) — gratuito, mas com limitações (1 requisição por segundo)
  • Google Geocoding API — pago após exceder o limite
  • Yandex Geocoder — popular na Rússia


Exemplo de Geocodificação via Nominatim



<?phpfunction geocode($address) {    $url = "https://nominatim.openstreetmap.org/search?format=json&q=" . urlencode($address);    $opts = [        'http' => [            'method' => 'GET',            'header' => "User-Agent: MyApp/1.0\\r"                    

Recommendations