Inicio > Delphi, Ejemplos, Programación > (Google Maps – API) Codificación Geográfica – I

(Google Maps – API) Codificación Geográfica – I

Share Button

Codificación Geográfica Se conoce como Codificación Geográfica, al proceso o sistema de transformar una dirección «o similar» en coordenadas geográficas de Longitud y Latitud, para posteriormente ser utilizadas en sistemas de posicionamiento (por ejemplo).

El API de Google incluye este servicio, que es el que se utiliza cuando buscamos una dirección desde Google Maps.

Normalmente este acceso se hace desde una página web con peticiones HTTP; Lo que vamos a ver es cómo integrar este servicio en un programa Delphi.

Un poco más arriba he comentado que la codificación geográfica se basa en dar una entrada (dirección) para obtener unas coordenadas. También he añadido el «similar», puesto que en el caso de Google Maps, podemos dar como entrada otras cosas que expresamente no son una dirección.

Así, podemos utilizar como dirección:

  • 08901,Spain
  • c/Balmes,214,Barcelona,Spain
  • Sevilla,Spain
  • Alhambra,Granada,Spain

Para hacer una prueba de lo que podemos obtener, basta con utilizar un componente TidHTTP de las Indy para realizar la petición. Coloca un componente TidHTTP en un formulario y un botón con el siguiente código:

procedure TForm1.btn1Click(Sender: TObject);
const
  STR_WEB = 'http://maps.google.com/maps/geo?q=';
  STR_OUT = '&output=csv';    // formato de salida
var
  Stream: TStringStream;
  Str, res:string;
begin
  // ini
  Stream := TStringStream.Create('');
  // proteccion para liberar
  try
    Str := STR_WEB + edt1.Text + STR_OUT;
    idhttp2.Get(Str, Stream);
    edt2.Text := Stream.DataString;
  finally
    FreeAndNil(Stream);
  end;
end;

Una imagen de lo que obtenemos  una vez realizada la petición es la siguiente:

Se puede descargar el código completo de este ejemplo desde aquí.

Y lo que obtenemos como respuesta en este caso es:

200,8,41.3979638,2.1515206

Los dos últimos parámetros son los que buscabamos y nos indican las coordenadas de ese punto (latitud y longitud).

Para comprobar que so correctas, basta con ir a la web de Google Maps, copiar estas dos coordenadas en el cuadro de búsqueda y pulsar sobre el botón de <Buscar en el Mapa>.

A parte de esto, Google Maps nos devuelve, en este caso, dos números más; El primero corresponde al un «código de Estado» o «código de retorno» de la consulta que hemos realizado; En él se devuelve información por parte del servidor. Y el segundo es lo que se conoce como «Accuracy» o «Exactitud», que corresponde justamente a eso; Al nivel de exactitud que Google asigna a la respuesta, segun la dirección que le hemos dado.

El código de retorno, en este caso, es un 200, que corresponde a la constante «G_GEO_SUCCESS» (consulta correcta).

El nivel de exactitud, en este caso, es un 8 (máxima precisión).

Los niveles de exactitud con lo que trabaja Google Maps son los siguientes:

  • 0:  Ubicación desconocida.
  • 1:  Precisión a nivel de país.
  • 2:  Precisión a nivel de región.
  • 3: Precisión a nivel de subregión.
  • 4: Precisión a nivel de ciudad o pueblo.
  • 5: Precisión a nivel de código postal.
  • 6: Precisión a nivel de calle.
  • 7: Precisión a nivel de intersección.
  • 8: Precisión a nivel de dirección.

Así en el ejemplo que hemos visto antes obteníamos una Exactitud de 8 (a nivel de dirección), mientras que si íntroducimos una dirección del tipo;

<08905,Barcelona,Spain>

Obtendremos un código 5 (a nivel de C.P.)

NOTA: La descripción detallada de los «códigos de precisión» se puede encontrar aquí; Y la descripción detallada de todos los «códigos de retorno» se puede encontrar aquí.


Vota este post
Subscribe
Notify of
guest

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

19 Comments
Inline Feedbacks
Ver todos los comentarios
Felipe
Felipe
14 years ago

Vaya!, que interesante amigo; gracias por el aporte.

Saludos!

Antonio
14 years ago

Muy interesante la entrada.

Como esto lo tengo fresco, voy a hacer un par de aportaciones.

En las consultas que he realizado de prueba en mi sistema, me he llevado varias sorpresas.

Una es que existe un nivel 9 de precisión: «9 Premise (building name, property name, shopping center, etc.) level accuracy. (Since 2.105)». Lo que sucede es que no aparece en la traducción de la ayuda del API, en la misma dirección en inglés se puede consultar: http://code.google.com/intl/en-US/apis/maps/documentation/reference.html##GGeoAddressAccuracy.9

Otro tema es que cuando la consulta no sea muy precisa se pueden devolver varios resultados. En estos casos se obtiene mas precisión procesando la petición en xml en lugar de la csv. Además esta petición nos devuelve la información de la dirección muy bien codificada.

La último es un truco para ver directamente esas coordenadas en Google Maps, para ello hay que utilizar los parámetros de la página web, que no son públicos pero que unas almas cándidas se han encargado de recopilar en:
http://mapki.com/wiki/Google_Map_Parameters

Por ejemplo si se busca «Alhambra, Granada, ES» me devuelve una sola LatLong que puedo visualizar con un simple ShellExecute montando esta dirección:

http://maps.google.es/maps?z=12&mrt=loc&ie=ISO-8859-1&q=Alhambra,+Granada,+ES+(37.1764874%2C-3.5979291)+@37.1764874,-3.5979291

Ese @37… final es el que me precisa el punto que quiero marcar en Google Maps.

Otra cuestión interesante sería ver ese punto en un TWebBrowser para poder añadir manualmente precisión al punto marcado. Para evitar tener que introducir una key de acceso al API solo habría que montar un archivo html en disco, las peticiones locales no requieren de esa clave. Sin embargo no vale pasarle un stream al WebBrowser.

En mi blog aparecen algunas capturas:
http://criteriumcyp.blogspot.com/2009/04/geocodificar-direcciones.html

Las entradas del mismo están centradas en funcionalidades y cuestiones lógicas del desarrollo de un ERP, por eso no se dan detalles muy técnicos.

trackback
14 years ago

[…] con la entrada (Google Maps – API) Codificación Geográfica – I, vamos a ver cómo obtener más datos de este servicio de Google […]

Raul
Raul
14 years ago

Aquí tienes un ejemplo sobre cómo poner un flecha sobre un plano de google maps, (puede ser interesante para completar tu excelente post)

http://delphimagic.blogspot.com/2008/10/utilizar-google-maps-en-delphi.html

Antonio
14 years ago

Tengo la sensación de que la potencia real en el uso de GoogleEarth está en procesar archivos kml, concretamente su versión comprimida kmz, que entre otras lindezas permite adjuntar imágenes y entiendo que otro tipo de recursos.
Claro que si se pretende interactuar (pasar información) entre nuestra aplicación y googleearth no nos vale.

trackback
14 years ago

[…] Maps necesitamos obtener las coordenadas de Latitud y Longitud apropiadas. Para ello ya vimos  aquí (Codificación Geográfica – I) y aquí (Codificación Geográfica – II) cómo Google provee métodos para obtener las coordenadas […]

Fernando
Fernando
14 years ago

Muy bueno Neftali, como siempre. :-)

Solo una cosa, al abrir el ejemplo, me dá un error en una propiedad del idHTTP (yo estoy con BDS 2007):

Error reading idhttp2.Request.ProxyPort (does not exists)
Error reading idhttp3.Request.ProxyPort (does not exists)

Voy a seguir leyendo… :-) Saludos….

Fernando
Fernando
14 years ago

De nuevo aquí Neftali, perdona el retraso, he estado de viaje.

Bueno, pues comprobadas las indy, tengo la versión 10.1.5 que, si no me equivoco, son las que vienen con BDS 2007 por defecto.

A ver si actualio a BDS 2010.

Un abrazo.

wesbrrantes
wesbrrantes
14 years ago

buenas… te felicito inmensamente por tu gran aporte…

quisiera realizarte una consulta.. es que tengo un listado de los centros educativos de mi pais con las longitudes,latitudes,numero de estudiantes,numero de profesores y nombre de los centros educativos…
en un base de datos, y me gustaria muchisimo poder realizar una adaptacion de tu programa, pero en realidad aun estoy en pañales con este tema, ya logre incluir el nuermo de estudiantes y el resto de la informacion en un tab al escoger alguno de los centros educativos referenciados, pero lo hago por medio del txt llamado lugares y con la conexion ya existente…

mi pregunta es, si fueras tan amable y si tienes el conocimiento de como podria incluir la informacion, pero por medio de una base de datos a la que tengo acceso en sql 2008.

actualmente estoy trabajando en delphi 7 para seguir tus ejemplos…

nuevamente te agradesco muchisimo por tu tiempo

vernon maldonado cervera
vernon maldonado cervera
13 years ago

quisiera poder encontrar vehiculos,auto moviles con su matricula, modelo,etc haci como lugares gente,etc

Matias
Matias
13 years ago

No anda el link :( . muy buen aporte !! .me interesa muchisimo (Y)

vernon maldonado cervera
vernon maldonado cervera
12 years ago

muy pero muy amable hermosa de vernon maldonado cervera,a si y como me llama una canciòn ,quiero saber si sobre el metro tambien puedo tener mapas,d.f.ciao.

19
0
Would love your thoughts, please comment.x
()
x