Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Geocoding API en PHP

Estas en el tema de Geocoding API en PHP en el foro de PHP en Foros del Web. Hola, he estado buscando por internet, y no veo ningún ejemplo que me explique como utilizar Geocoding con PHP sin Mysql/XML... La API de codificación ...
  #1 (permalink)  
Antiguo 20/06/2012, 05:47
Avatar de luna690  
Fecha de Ingreso: marzo-2012
Ubicación: Barcelona
Mensajes: 61
Antigüedad: 12 años, 1 mes
Puntos: 3
Geocoding API en PHP

Hola,

he estado buscando por internet, y no veo ningún ejemplo que me explique como utilizar Geocoding con PHP sin Mysql/XML...

La API de codificación geográfica de Google la teneis aquí explicada: https://developers.google.com/maps/d...ding/?hl=es-ES

He comprovado mediante el navegador si poniendo ciudades en español funciona, por ejemplo: "Buenos Aires". http://maps.googleapis.com/maps/api/...es&sensor=true

Así puedo obtener las coordenadas:
"location" : {
"lat" : -34.60372320,
"lng" : -58.38159310
}


Pero como puedo hacerlo en PHP para saber las coordenadas, para después mostrar un mapa de la ciudad (Google Maps)?

Código PHP:
function get_coordenadas($nombre){
    
$SERVER_URL "http://maps.googleapis.com/maps/api/geocode/json?address=".$nombre."&sensor=true";
    
    

  #2 (permalink)  
Antiguo 20/06/2012, 08:05
txemaarbulo
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Geocoding API en PHP

Cita:
Iniciado por luna690 Ver Mensaje
Hola,
he estado buscando por internet, y no veo ningún ejemplo que me explique como utilizar Geocoding con PHP sin Mysql/XML...
No entiendo la pregunta.
La toma (o lectura) de datos que nos ofrece Google Maps y que nos permte realizar ingeniería inversa es
Código Javascript:
Ver original
  1. if (status == google.maps.GeocoderStatus.OK) {
  2.   if (results[0]) {
  3.     direccion = results[0].formatted_address;
  4.     coordenadas = results[0].geometry.location;
  5.   }
  6. }

Desde un dato de Longitud, latitud puedo saber la dirección o desde una dirección puedo saber sus coordenadas

Podré acceder al país, región, ciudad o calle.

La segunda parte es la que no entiendo: ¿Qué tengo que hacer con los datos?
  #3 (permalink)  
Antiguo 20/06/2012, 08:12
Avatar de luna690  
Fecha de Ingreso: marzo-2012
Ubicación: Barcelona
Mensajes: 61
Antigüedad: 12 años, 1 mes
Puntos: 3
Respuesta: Geocoding API en PHP

Mira, tengo una página dónde escojo de dos desplegables país y ciudad, y puedo poner un comentario que lo guardo en la BD (guardo pais+ciudad+comentario+usuario+fecha).

Más abajo tengo un textbox en el cual puedo poner el nombre de una ciudad y clicar ACEPTAR. Entonces, se va a otra página donde habrá todos los comentarios de la ciudad seleccionada y un pequeño mapa de la ciudad.

Para poner un mapa de la ciudad (GoogleMaps), necesito tener las coordenadas de la ciudad verdad? Por lo tanto, tengo que pasar el nombre de la ciudad a coordenadas.

Te dejo escrito el código que tengo (en éste caso siempre sale el mismo mapa, si te fijas). Te dejo la página 2:

Código PHP:
<?php include("funcionsBD.php");
    
$estado $_POST['txt_cerca'];
    
    
$coordLat "-34.60372320";
    
$coordLng "-58.38159310";
    
    
$comentaris get_comentarisEstado($estado);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>DWS</title>
    <link rel="stylesheet" type="text/css" href="estil.css">
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>
    <script type="text/javascript" src="jquery/jquery.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            load_map();
        });
        
        function load_map() {
            var myLatlng = new google.maps.LatLng(document.getElementById("hdd_coordLat").value, document.getElementById("hdd_coordLng").value);
            var myOptions = {
                zoom: 7,
                center: myLatlng,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            var map = new google.maps.Map($("#map_canvas").get(0), myOptions);
        }
    </script>
</head>

<body>
<div class="fondo"></div>
<h3><?php echo $estado?></h3>
<a href="index.php">Tornar a la pagina principal</a><br /><br />

<div id="demo">
    <div id="map_canvas"></div>
    <br />
     <?php while ($row mysql_fetch_assoc($comentaris)){ ?>
        <div id="visualitzar">
            <?php if($row['imatge']!=NULL && $row['imatge']!=""){ ?><img src="<?php echo "img/".$row['imatge']; ?>" width="60" height="45" align="left" /><?php ?>
            <span><b><?php echo $row['usuari']." (".$row['data']."): "?></b><?php echo $row['coment']; ?></span>
        </div>
        <div class="clear"></div>
    <?php ?>
    
</div>

<input type="hidden" name="hdd_estado" id="hdd_estado" value="<?php echo $estado?>" />
<input type="hidden" name="hdd_coordLat" id="hdd_coordLat" value="<?php echo $coordLat?>" />
<input type="hidden" name="hdd_coordLng" id="hdd_coordLng" value="<?php echo $coordLng?>" />

</body>
</html>
  #4 (permalink)  
Antiguo 20/06/2012, 08:44
Avatar de luna690  
Fecha de Ingreso: marzo-2012
Ubicación: Barcelona
Mensajes: 61
Antigüedad: 12 años, 1 mes
Puntos: 3
Respuesta: Geocoding API en PHP

Con ésta función he logrado obtener el array de las coordenadas+nombre del pais..., pero como cojo las coordenadas [lat] y [lng] ?

Código PHP:
function get_coordenadas($nombre){
    
$url "http://maps.googleapis.com/maps/api/geocode/json?address=".$nombre."&sensor=true";
    
$data = @file_get_contents($url);
    
$jsondata json_decode($data,true);

    
print_r($jsondata); echo "<br><br>";
    if(
is_array($jsondata)){
        
$lat $jsondata['results'][0]['formatted_address'];
    }
    echo 
$lat; exit(1);

  #5 (permalink)  
Antiguo 20/06/2012, 09:00
txemaarbulo
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Geocoding API en PHP

Te sugiero lo siguiente:

En la primera pagina inserta un input type="hidden" y recogelo en tu base de datos. (latitud y longitud, o lat lng, como quieras).
No olvides incluir el enlace a src="http://maps.google.com/maps/api/js?sensor=true" en la primera hoja

Código HTML:
Ver original
  1. <input type="hidden" name="hdd_coordLatLng" id="hdd_coordLatLng" value="" />

En javascript rellenas el campo vacío de latitud y longitud:
Código Javascript:
Ver original
  1. function estado() {  //puedes incluirlo en la función donde recoges los datos para la base de datos
  2.   var estado = document.getElementById('estado').value;  //El id que tengas para recoger la ciudad
  3.   if (geocoder) {
  4.     geocoder.geocode({
  5.       'address': estado, //el mismo nombre que la variable anterior
  6.       function (results, status) {
  7.       if (status == google.maps.GeocoderStatus.OK) {
  8.         if (results[0]) {
  9.           document.getElementById("hdd_coordLatLng").value = results[0].geometry.location;
  10.           }
  11.        }     
  12.       }
  13.     }
  14.   }
  15. }

Luego lo trasladarás a tu segunda hoja, ya como
Código PHP:
Ver original
  1. $coordLatLng = $_POST['coordLatLng'];'];

Confío haberte comentado lo importante. Revisa los nombres y ya ves que en la segunda hoja van unidos lat y lng

Última edición por txemaarbulo; 20/06/2012 a las 09:08
  #6 (permalink)  
Antiguo 20/06/2012, 09:12
txemaarbulo
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Geocoding API en PHP

Hay una segunda solución que voy a tratar de armártela ahora. Y es inssrtar la ingeniería inversa en la segunda hoja.

Voy a trabajar tu javascript
  #7 (permalink)  
Antiguo 20/06/2012, 09:36
txemaarbulo
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Geocoding API en PHP

Es más fácil la ingeniería inversa solamente en el script final

Este código reemplaza el que tienes en la cabecera.

Ahí va:
Código Javascript:
Ver original
  1. $(document).ready(function () {
  2.   load_map();
  3. });
  4.  
  5. function load_map() {
  6.   var myLatlng = new google.maps.LatLng(document.getElementById("hdd_coordLatLng").value, document.getElementById("hdd_coordLng").value);
  7.   var myOptions = {
  8.     zoom: 7,
  9.     center: new google.maps.LatLng(42.846664, -2.673563),
  10.     mapTypeId: google.maps.MapTypeId.ROADMAP
  11.   };
  12.   var map = new google.maps.Map($("#map_canvas").get(0), myOptions);
  13.   coordenadas();
  14. }
  15.  
  16. function coordenadas() {
  17.   var ciudad = document.getElementById('ciudad').value;  //El id que tengas para recoger la ciudad
  18.   if (geocoder) {
  19.     geocoder.geocode({
  20.       'address': ciudad //el mismo nombre que la variable anterior
  21.       function (results, status) {
  22.       if (status == google.maps.GeocoderStatus.OK) {
  23.         if (results[0]) {
  24.           document.getElementById("hdd_coordLatLng").value = results[0].geometry.location;
  25.           }
  26.        }      
  27.       }
  28.     }
  29.   }
  30. }

Te recuerdo que ya solamente va un solo campo lat lng con valor vacío
Código HTML:
Ver original
  1. <input type="hidden" name="hdd_coordLatLng" id="hdd_coordLatLng" value="" />

(Nos ahorramos la base de datos)

Última edición por txemaarbulo; 20/06/2012 a las 09:45
  #8 (permalink)  
Antiguo 20/06/2012, 09:48
txemaarbulo
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Geocoding API en PHP

En el javascript de mi primera entrada (y lo corregí en la segunda), en la línea
'address': ciudad //el mismo nombre que la variable anterior
NO DEBE IR coma (,) después de ciudad.

Creo que ambos te funcionarán pero es menos lioso el segundo.
Saludos
  #9 (permalink)  
Antiguo 20/06/2012, 12:52
Avatar de luna690  
Fecha de Ingreso: marzo-2012
Ubicación: Barcelona
Mensajes: 61
Antigüedad: 12 años, 1 mes
Puntos: 3
Respuesta: Geocoding API en PHP

Bieeen! Lo he solucionado, muchas gracias :)
  #10 (permalink)  
Antiguo 29/06/2012, 17:26
 
Fecha de Ingreso: junio-2012
Mensajes: 1
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Geocoding API en PHP

Gracias por las respuestas. El código no estava del todo correcto, faltavan '{ ' y alguna coma.

Antes se debe importar, por ejemplo:
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>

Ahi va el código arreglado:

Código:
function coordenadas() { 
//                var ciudad = document.getElementById('ciudad').value; *//El id que tengas para recoger la ciudad
                var geocoder= new google.maps.Geocoder(); 
                if(geocoder) {                                               
                     geocoder.geocode({
                        'address': direccion }, //el mismo nombre que la variable anterior
                     function(results, status){
                         if (status == google.maps.GeocoderStatus.OK) {
                               if (results[0]) {                                                             
                                       alert(results[0].geometry.location);
                               }
                          } else {
                              alert("error");
                          }
                     } );               
                } else {
                       alert('Error obteniendo objeto Geocoder');
                }
  }
Saludos!

Etiquetas: api
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:35.