Geolocalización y mapas en PHP: bibliotecas, API y ejemplos de código

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Geolocalización y mapas en PHP: resumen de herramientas y ejemplos de código



En el desarrollo web moderno, la funcionalidad de geolocalización y trabajo con mapas se ha convertido en una parte integral de muchos proyectos. PHP, como lenguaje del lado del servidor, maneja excelentemente el procesamiento de datos geoespaciales, la integración de servicios cartográficos y la determinación de la ubicación de los usuarios. En este artículo, analizaremos en detalle las principales bibliotecas y herramientas para trabajar con geolocalización y mapas en PHP, y también proporcionaremos ejemplos prácticos de código.



1. Determinación de ubicación por dirección IP (GeoIP)



La forma más sencilla de obtener la geolocalización aproximada de un usuario es determinar su país y ciudad a partir de la dirección IP. Para esto, en PHP existen varias soluciones:



Biblioteca geoip2 (MaxMind GeoIP2)



MaxMind proporciona la base de datos gratuita GeoLite2 y la de pago GeoIP2. Instalación a través de Composer:



composer require geoip2/geoip2


Ejemplo de determinación de ubicación:



<?phprequire_once 'vendor/autoload.php';

use GeoIp2\\Database\\Reader;

// Indique la ruta a la base de datos descargada GeoLite2-City.mmdb$reader = new Reader('/path/to/GeoLite2-City.mmdb');$record = $reader->city('8.8.8.8'); // Dirección IP para verificar

echo "País: " . $record->country->name . "<br>";echo "Ciudad: " . $record->city->name . "<br>";echo "Latitud: " . $record->location->latitude . "<br>";echo "Longitud: " . $record->location->longitude . "<br>";?>


Función incorporada geoip_record_by_name()



Si la extensión GeoIP (obsoleta) está instalada en el servidor, se puede usar:



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


2. Trabajo con mapas a través de JavaScript + PHP



PHP genera HTML/JavaScript, y el renderizado de mapas ocurre del lado del cliente. Las bibliotecas más populares son:



  • Leaflet — ligera, gratuita, sin claves API
  • OpenLayers — potente, para tareas geoespaciales complejas
  • Google Maps JavaScript API — requiere clave, pero ofrece una funcionalidad rica


Ejemplo de integración de Leaflet con PHP



Creemos un mapa simple con un marcador cuyas coordenadas se pasan desde PHP:



<?php$lat = 55.7558;  // Moscú$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 desde PHP');    </script></body></html>


3. Geocodificación (conversión de dirección a coordenadas)



Para obtener coordenadas a partir de una dirección, use las API:



  • Nominatim (OpenStreetMap) — gratuito, pero con limitaciones (1 solicitud por segundo)
  • Google Geocoding API — de pago después de exceder el límite
  • Yandex Geocoder — popular en Rusia


Ejemplo de geocodificación a través de 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