Implementar la API de Google Maps cómo una libreria en Code Igniter
Para implementar una librería específica para la API de Google Maps en Code Igniter he seguido las instrucciones que puedes encontrar en el wiki de CI. Vayamos por pasos:
- Por un lado necesitas descargar la librería GoogleMapAPI para PH. Descomprime el archivo GoogleMapAPI.class.php y pónlo en system/application/libraries
- Ahora haremos compatible la libreria PHP que hemos descargado con CI. Para ello crea el archivo Cigooglemapapi.php dentro de system/application/libraries con el siguiente contenido:
require('GoogleMapAPI.class.php'); class CiGoogleMapAPI extends GoogleMapAPI{ function CiGoogleMapAPI(){ parent::GoogleMapAPI(); } function fetchURL($url) { if(ini_get('allow_url_fopen')==true) { return file_get_contents($url); }else{ return $this->curlFetchURL($url); } } function curlFetchURL($url){ // create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // grab URL and pass it to the browser $content= curl_exec($ch); // close curl resource, and free up system resources curl_close($ch); return $content; } function getCache($address) { $_ret = array(); $this->ci =& get_instance(); $this->ci->load->database(); $sql='SELECT lon,lat FROM ' . $this->_db_cache_table. ' WHERE address ="'.$address.'"'; $_res=$this->ci->db->query($sql); if($_row = $_res->row()) { $_ret['lon'] = $_row->lon; $_ret['lat'] = $_row->lat; } return !empty($_ret) ? $_ret : false; } function putCache($address, $lon, $lat) { if(strlen($address) == 0 || strlen($lon) == 0 || strlen($lat) == 0) return false; $this->ci =& get_instance(); $this->ci->load->database(); $data = array( 'address' => $address, 'lon' => $lon, 'lat' => $lat, ); $this->ci->db->insert($this->_db_cache_table, $data); return true; } } - Éste paso es opcional pero muy aconsejable si queremos tener una considerable mejora del rendimiento y tiempo de carga del mapa. Crea la tabla GEOCODES en la base de datos de tu aplicacion CI, a continuación el código MySQL:
CREATE TABLE GEOCODES ( address varchar(255) NOT NULL default '', lon float default NULL, lat float default NULL, PRIMARY KEY (address) );
Ya está todo preparado, para comprobar que funciona, vamos a crear un controlador y una vista que muestre un mapa con 3 coordenadas, para ello:
- En system/application/controllers creamos el archivo gmap.php con el contenido:
load->library('Cigooglemapapi'); $this->cigooglemapapi->setAPIKey('PON_AQUI_LA_APIKEY'); } function index() { $this->cigooglemapapi->setWidth('100%'); $this->cigooglemapapi->disableDirections(); $this->cigooglemapapi->addMarkerByAddress('Obispo Cobos 12 Ubeda Spain','Mi casa','Mi casa'); $this->cigooglemapapi->addMarkerByAddress('Trinidad 6 Ubeda Spain','La casa de Juán','La casa de Juan'); $this->cigooglemapapi->addMarkerByAddress('Rastro 2 Ubeda Spain',"La casa de Marta","La casa de Marta"); $this->load->view('gmap'); } } ?> - En system/application/views creamos el archivo vermapa.php con el contenido:
cigooglemapapi->printHeaderJS(); ?> cigooglemapapi->printMapJS(); ?> cigooglemapapi->printMap(); ?>
Ahora ponemos en nuestro navegador: http://localhost/index.php/gmap y debería aparecer el mapa.

6 Comentarios
Carlos Guzman
Hola Jose;
Excelente articulo, pero tienes un error cuando llamas a la vista lo haces de esta forma.
$this->load->view(‘gmap’);
y la vista la llamas de esta forma vermapa.php, es un error creo que mas de pasar de la hoja a tu pagina.. yo tambien soy freelance de colombia y desarrollo en codeigniter y ruby on rails…
Hasta la Proxima;
12 de junio, 2009 a las 2:35 amJose Dueñas
Hola Carlos,
efectivamente tienes razón compañero, debería haber llamado a la vista de ésta forma:
this->load->view('vermapa');Gracias y espero verte a menudo por aquí.
12 de junio, 2009 a las 8:13 amCarlos Armando Guzman Sua
Hola Jose,
Bueno me alegro que no te moleste que te corrija, si me lo permites podria escribir algunos articulos de code igniter y ruby en tu sitio. ah y para agradecer lo del api de google me ha servido mucho para el sitio que estoy realizando en estos momentos donde tengo que ubicar las estaciones bases de una compañia de telefonia movil celular en el mapa. bueno pero eso es otro cuento. El unico problema que se me ha presentado es con la Key Api porque es para una intranet corporativa.. y no tengo salida a internet y eso creo que lo prohibe google.. no se si sabes algo sobre eso.
Hasta la Proxima..
14 de junio, 2009 a las 7:48 amJose Dueñas
Hola Carlos,
claro que no, gracias a ti.
Tus post serán bienvenidos. En cuanto a la api key, yo suelo desarrollar mis proyectos primero en local y genero una api key para http://localhost y funciona correctamente, por lo que creo que no habría problema al generarla para una url que no está accesible desde internet.
Un saludo.
14 de junio, 2009 a las 11:59 amWillian
Hola estoy empezando a programar en codeigniter tome tu codigo pero me aprece un error que dice que apache dejo de funcionar, yo le agrege al codigo Cigooglemapapi.php el inicio y cierre de php no se si sera por eso, cualquier ayudita me serviria, tambien me gustaria que me guiares sobre como configurar XAJAX
1 de diciembre, 2009 a las 10:06 pmCompartiendo desde delicious. 11 de Diciembre – 12 de Diciembre | David Táboas
[...] Implementar la API de Google Maps cómo una libreria en Code Igniter – [...]
12 de diciembre, 2009 a las 7:02 amEscribe tu comentario