Mapas de OpenStreetMaps con GeoIP simples

Hace ya un tiempo monte un sistema de mapas de Google Maps simple para que cualquier persona con conocimientos básicos pudiese implementarlo.

Hoy en el trabajo ha surgido la posibilidad de implementar mapas en una de las aplicaciones que está en proyecto y he aprovechado para implementar de forma muy sencilla OpenStreetMaps con GeoIP para el posicionamiento.

El funcionamiento es muy sencillo, se le pasa a una función una IP o un host y ésta nos devuelve un mapa de OpenStreetMap posicionado según la posición de esa IP.

Para preparar nuestro servidor simplemente haremos los siguientes pasos (Versión Debian, claro):

wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz

mkdir /usr/share/GeoIP/

gunzip GeoLiteCity.dat.gz /usr/share/GeoIP/
gunzip GeoIP.dat.gz /usr/share/GeoIP/

ln -s /usr/share/GeoIP/GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat

Además, nuestro servidor necesitará el soporte de GeoIP en PHP. Esto es muy sencillo en Debian

aptitude install php5-geoip

/etc/init.d/apache2 restart

Listo, ya tenemos nuestro servidor preparado para utilizar GeoIP. Ahora simplemente llamamos a la función que he creado con la ip o el host que queremos localizar. Esto es un ejemplo de tres peticiones distintas:

osm_map(‘meneame.net’);
osm_map(‘130.206.130.95’);
osm_map(‘sukiweb.net’);

Y esta es una imágen del resultado:
osm1

La función es realmente simple, se puede descargar de aquí:

Otros ejemplos de uso:

//Mapa de BolsaPHP (400×400)
osm_map(‘bolsaphp.sukiweb.net’, ‘400’, ‘400’);

//Mapa de la DNS de telefónica 195.235.113.3 con debug
osm_map(‘195.235.113.3’, ‘400’, ‘400’, TRUE);

¿Que os parece? ¿Simple verdad? Pasadme los enlaces si lo utilizais en algún sitio y evidentemente, sed libres de mejorar y optimizar el código. :)