Diem: Geoposicionamiento automatico con Google Maps

Si necesitamos en nuestro proyecto diem que se muestren en un mapa de Google Maps algún punto de interés, este post te puede ser muy util.

Por ejemplo, si deseamos marcar los distribuidores de un producto en una ciudad, necesitaremos que a partir de la dirección del distribuidor, obtenga a partir de la dirección las coordenadas gps necesarias para situarlo en el mapa.

Geoposicionando al grabar el registro

La mejor manera de hacerlo es que sea transparente al usuario, es decir, que automaticamente obtenga las coordenadas gps sin que el usuario tenga que realizar ninguna operacion.

Asi que debemos modificar el panel de control.Lo haremos de manera que cuando estemos insertando un nuevo registro, automáticamente conecte con el api de google maps, para obtener las coordenadas gps.

Estos datos son guardados en la tabla del modulo correspondiente, y si editamos un registro, el formulario nos mostrara los campos "latitud" y "longitud", por si no se ha podido geolocalizar o no lo ha hecho de manera correcta.

Así que editamos el fichero /app/admin/modules/MODULO/config/generator.yml, y añadimos los dos campos para que nos lo muestre:

form:
   display:
     NONE: [name, address, city, province, postalcode, detailed]
     Situacion: [latitude, longitude]
   class: xxxxxAdminForm
   fields: {  }
   edit: ~
   new:
     display:
       NONE: [name, address, city, province, postalcode]

En form new, no declaramos el bloque "Situación", ya que al insertar un nuevo registro, obtendrá la latitud y longitud de manera automática. Por ultimo, debemos sobreescribir el método "save" del modelo, así que editamos el fichero /lib/model/doctrine/MODELO.class.php, añadiendo un método auxiliar:

public function getLatLng()
   {
     $url = 'http://maps.google.com/maps/geo?q='.urlencode($this->getAddress().','.$this->getPostalCode().','.$this->getCity().','.$this->getProvince()).'&output=csv';
     $ch = curl_init($url);

     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     $response = curl_exec($ch);
     curl_close($ch);
     return $response;
   }

public function save(Doctrine_Connection $conn = null)
{
     if ($this->isNew())
      {     
        $point=explode(',',$this->getLatLng());
	         
	$this->setLatitude($point[2]);
	$this->setLongitude($point[3]);
      }     
      return parent::save($conn);
}

Con esto nos aseguramos que cada vez que un usuario grabe o edite un registro, automáticamente se obtengan las coordenadas de latitud/longitud a partir de los datos de dirección asociados.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir