Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Me da error Aplicacion que llama a google maps (https://www.clubdelphi.com/foros/showthread.php?t=84414)

tulio 16-10-2013 18:04:05

Me da error Aplicacion que llama a google maps
 
Hola Amigos

Les cuento que tengo en un programa un procedimiento desarrollado por el amigo Neftali , que ingresando el domicilio ciudad y pais de un lugar te averigua la longitud y latitud, para despues entrar al google maps y marcar la ubicación. Esto anduvo perfecto hasta que hace una semana no anda mas y da el siguiente error : http/1.1 403 FORBIDDEN.
A continuacion les pego el codigo

Código Delphi [-]
Procedure TF_mapa.btn1Click(Sender: TObject);
const
  STR_WEB = 'http://maps.google.com/maps/geo?q=';
  STR_OUT = '&output=csv';    // formato de salida
  STR_KEY = '&key=ABQIAAAAFVb255bTSpn4DC0nkcIz3hTgmueMIh62ahlPS2dC-DIXqzciAxRZItsH3Fy4UcBpz0Q4D8XHzbxt3A';
var
  Stream: TStringStream;
  Str, res:string;
begin
  Stream := TStringStream.Create('');
  try
    Str := STR_WEB + edt1.text + STR_OUT + STR_KEY;
    idhttp2.Get(Str, Stream); //// esta es la linea que llama al componente y da el error (http/1.1 403 FORBIDDEN)
    edt2.Text := Stream.DataString;
  Finally
    FreeAndNil(Stream);
  end;
  editlatitude.text:= copy(edt2.text,7,11);
  editlongitude.text:= copy(edt2.text,19,11);
End;

A mi parecer como que se vencio la KEY que estoy ingresando, lo consulte a Neftali y me dio una direccion para obtener una nueva Key, al solicitarla me dan una clave que es mas corta y sigue el mismo error. (esta es la nueva que me dio google AIzaSyAyhlyxgsf1hBzRu1j-vWcB0yF9v9QNWEc)
Alguien me podria decir que es lo que estoy haciendo mal, o que tenga una KEY habilitada que me pase.

Saludos y gracias

tulio de Argentina

Neftali [Germán.Estévez] 16-10-2013 18:48:54

Por aquí dicen que es problema de la Key. ¿Seguro que es correcta para tu dominio?


También puedes probar un formato como este:
http://maps.googleapis.com/maps/api/...n&sensor=false

En este caso la salida será JSON, pero muy similar a la anterior y fácil de adaptar.

tulio 16-10-2013 19:08:39

Gracias Neftali

pregunta, dentro del codigo delphi como llamo a lo que vos decis, hay que usar algun componente .

saludos

tulio

Neftali [Germán.Estévez] 16-10-2013 19:36:48

No tienes que cambiar la forma de llamarla.

Es una dirección web. Prueba a construirla pasando la dirección y usando el mismo código que has puesto.

Una llamada con esta URL:
http://maps.googleapis.com/maps/api/...n&sensor=false

Devolverá con ese código un fichero como este:

Código Delphi [-]
{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Barcelona",
               "short_name" : "Barcelona",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Barcelona",
               "short_name" : "Barcelona",
               "types" : [ "political" ]
            },
            {
               "long_name" : "Barcelona",
               "short_name" : "B",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "Cataluña",
               "short_name" : "CT",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "España",
               "short_name" : "ES",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Barcelona, España",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 41.4695761,
                  "lng" : 2.2280099
               },
               "southwest" : {
                  "lat" : 41.320004,
                  "lng" : 2.0695258
               }
            },
            "location" : {
               "lat" : 41.3850639,
               "lng" : 2.1734035
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 41.4695761,
                  "lng" : 2.2280099
               },
               "southwest" : {
                  "lat" : 41.320004,
                  "lng" : 2.0695258
               }
            }
         },
         "types" : [ "locality", "political" ]
      }
   ],
   "status" : "OK"
}

tulio 17-10-2013 13:55:09

Gracias Neftali !!!!

http://maps.googleapis.com/maps/api/...a&sensor=false

tipiando esta linea de arriba en un navegador me muestra una pagina , en la cual aparece la latitud y longitud del domicilio pedido, pero no me doy cuenta como hacer por dentro del programa que se instancie esos valores en una variable para tomar la latitud y longitud, despues llamar al mapa que muestre graficamente esos valores.



saludos

tulio

Neftali [Germán.Estévez] 17-10-2013 14:21:13

Cita:

Empezado por tulio (Mensaje 468501)
en la cual aparece la latitud y longitud del domicilio pedido, pero no me doy cuenta como hacer por dentro del programa que se instancie esos valores en una variable para tomar la latitud y longitud, despues llamar al mapa que muestre graficamente esos valores.

Con el código que has colocado más arriba, lo que haces es solicitar a la página web unos valores en formato CSV; Esos valores se recogen y se guardan en edt2.Text.
Estas 2 líneas:
Código Delphi [-]
  editlatitude.text:= copy(edt2.text,7,11);
  editlongitude.text:= copy(edt2.text,19,11);

Extraen de edt2.Text los valores de Lat y Lon y los guardan en editlatitude.text y editlongitude.text.

Utilizando la nueva dirección Web, obtendrás en edt2.Text el texto que hay más arriba. Simplemente debes ampliar el código para extraer de ahí los valores de Lat y Lon y guardarlos en editlatitude.text y editlongitude.text.

A partir de ahí tu programa debería continuar igual.

tulio 17-10-2013 14:53:33

Vamos mejorando

ahora si pude instanciar en edit2.txt todo el contenido JSON, ahora el otro tema es ver como buscar dentro de edit2.tex el siguiente texto: "location" : {
"lat" : -34.0917803,
"lng" : -59.03305099999999

y luego debo tomar la latitud y longitud

Gracias campeon

saludos

tulio

Neftali [Germán.Estévez] 17-10-2013 16:33:14

Puedes pasarlo a un TStrings y parsear (revisar) por líneas.
Otra opción (aunque no se si para esto vale la pena) es utilizar un parser JSON y de esa forma te evitarás hacerlo tú mimo.

Si te decides por un parser, aquí tienes uno que va muy bien.

tulio 17-10-2013 19:21:49

Gracias NEFTALI !!!!!!!!!!!!!!!!!!!!


La franja horaria es GMT +2. Ahora son las 22:49:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi