ago 312010
 

Buenas,

Vimos en un mensaje anterior cómo funcionaban las clases creadas para manejar la estructura JSON devuelta por el API de Google Maps. Ahora veremos cómo usarlas en una aplicación.

Para el ejemplo crearemos una aplicación nueva, pondremos un TEdit (eDireccion) para introducir la dirección a buscar, un TButton (bSearch) para realizar el proceso, un TMemo (mJson) para visualizar los datos recibidos – estructura JSON -, y un TValueListEditor (vlData) para visualizar el contenido del JSON de una forma más amigable.

A nivel de código, vamos a definir una variable de tipo TGeoCode en la parte privada del objeto TForm y, también en la misma sección, definiremos los manejadores de los eventos de la variable declarada que queramos manejar, en este caso los de “After”

  private
    GC: TGeoCode;

    procedure AfterGetData(Sender: TObject; AllData: string);
    procedure AfterGetValues(Sender: TObject; AllValues: TStrings);

Otra cosa que haremos es, o bien sobreescribir constructor y destructor para crear y liberar el objeto GC o bien usar los eventos OnCreate y OnDestroy del formulario. Personalmente tengo la costumbre de sobreescribir los métodos, así que vamos a ello.

Primero la declaración (en la parte pública, claro está)

  public
    constructor Create(aOwner: TComponent); override;
    destructor Destroy; override;

Y ahora la implementación (aunque obvia para muchos)

constructor TForm1.Create(aOwner: TComponent);
begin
  inherited;

  // creación del objeto
  GC := TGeoCode.Create;
  // asignación de los eventos
  GC.AfterGetData := AfterGetData;
  GC.AfterGetValues := AfterGetValues;

  eDireccion.Text := '';
  mJson.Lines.Text := '';
end;

destructor TForm1.Destroy;
begin
  if Assigned(GC) then FreeAndNil(GC);

  inherited;
end;

Lo que haremos en los eventos no es más que rellenar los componentes que hemos puesto en pantalla. En el AfterGetData rellenaremos el memo con la estructura JSON devuelta por el API de Google Maps y en el AfterGetValues rellenaremos el TValueListEditor.

AfterGetData tiene el parámetro AllData que contiene la estructura JSON, así que será una simple asignación.

AfterGetValues tiene el parámetro AllValues de tipo TStrings que contiene una lista formateada con los diferentes valores del estilo propiedad=valor, vamos, lo que necesita cualquier TValueListEditor para ser rellenado, así que también será una sencilla asignación.

procedure TForm1.AfterGetData(Sender: TObject; AllData: string);
begin
  mJson.Lines.Text := AllData;
end;

procedure TForm1.AfterGetValues(Sender: TObject; AllValues: TStrings);
begin
  vlData.Strings.Text := AllValues.Text;
end;

Y para terminar sólo nos queda ver el código del botón de búsqueda que, por otra parte, será algo muy sencillo dado que la clase se encarga de todo

procedure TForm1.bSearchClick(Sender: TObject);
begin
  tsPlaces.Tabs.Clear;
  GC.Clear;
  GC.Direccion := eDireccion.Text;
  GC.Execute;
end;

Con esto ya tenemos el programa terminado y, el usuario podrá ver de forma clara los resultados devueltos por el API de Google Maps.

Puedes descargarte la implementación de lo que llevamos explicado aquí.

Continuará…

Nos leemos

  3 Responses to “Jugando con la API de Google Maps (IV) – clases TGeoCode y TPlace”

  1. Hola Cadetill
    Estoy utilizando tu tutorial para trabajar con android y delphi
    Pero cuando recupero los datos con json (a partir de los ejemplos que aportas), no recupera los acentos en forma correcta. ¿Alguna idea de cómo solucionarlo?
    Muchas gracias

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)