Geocodificación del mapa de relojes

Posted on miércoles, febrero 02, 2011 by Pedro Wave

Al mostrar en el anterior artículo Cómo generar interfaces gráficos dinámicamente se ve un mapa mundial con las zonas horarias iluminadas por el Sol en tiempo real en el que se crean ciudades mediante geocodificación.

Esta técnica se emplea en los Sistemas de Información Geográfica - SIG para incluir las ciudades en una capa dentro de una Base de datos espacial en la que los puntos son las coordenadas geográficas terrestres medidas por latitud y longitud.


No se trata de competir con las múltiples aplicaciones de software SIG que hay en el mercado, pero si se puede decir que usar Excel como herramienta de geoetiquetado es más barato y sencillo y permite agregar información geográfica en los metadatos de imágenes que sirven para su georreferenciación.

La aportación de este Mapa de Zonas Horarias con Relojes Mundiales se puede catalogar dentro del movimiento de Información Geográfica Voluntaria o Participativa (VGI en su acrónimo inglés) difundiendo información geográfica proporcionada voluntariamente por personas, como el mapa de relojes que se puede ver en este video:


Geolocalización de ciudades

Veamos cómo se geolocalizan las ciudades sobre el mapa mundial.

Lo primero es obtener una lista de las ciudades y para ello se ha creado una conexión llamada Wordlclock desde la página Web:
http://www.timeanddate.com/worldclock/full.html?sort=0

Hoja Ciudades

En la hoja Ciudades se obtiene en las columnas:
A - El nombre de los países, provincias y ciudades separado por guiones.
B - Las horas locales de cada ciudad.
C - Las Zonas Horarias.

Mediante técnicas de separación o desconcatenación, a partir de los datos de la columna A se obtienen los datos de las columnas:
D - Los países.
E - Las provincias.
F - El nombre de las ciudades.

Con el Administrador de nombres se ha definido la lista de ciudades con:
ciudades=Ciudades!$F$3:$F$700

Hoja Coord

En esta hoja se almacenan temporalmente las coordenadas de las ciudades como:
Latitude: 38° 30' North
Longitude: 28° 00' West

Siendo las celdas:
B1 - Latitud en grados y minutos.
C1 - North o South.
B2 - Longitud en grados y minutos.
C2 - East o West.

Hoja Relojes

En la hoja Relojes se despliegan dos listas generadas mediante validación de datos en las columnas:
R - Para seleccionar una ciudad.
S - Para seleccionar un país.

Cuando cambia alguna celda de esta hoja se produce el evento Change y se ejecuta la rutina:
Private Sub Worksheet_Change(ByVal Target As Range)

En caso de cambiar una ciudad o país en las columnas R o S se llama a:

La rutina coordCiudad llama a CoordWebQuery que se conecta a la página Web de la ciudad elegida leyendo el hipervínculo en la columna A de la hoja Ciudades y guarda las coordenadas de la ciudad en la hoja Coord.

Si la ciudad no está en la lista de ciudades de la página www.timeanddate.com, se llama a la función GetLatLonCiudad(ciudad, pais) que consulta a:

http://api.wunderground.com/auto/wui/geo/GeoLookupXML/index.xml?query=" & ciudad & "," &pais
Por ejemplo, para obtener las coordenadas de mi ciudad Zaragoza en España:
http://api.wunderground.com/auto/wui/geo/GeoLookupXML/index.xml?query=zaragoza,spain

Al resultado se le quitan los signos especiales con ConvertAccent(result), obteniendo la latitud y la longitud desde un documento XML del tipo "MSXML2.DOMDocument"

El tratamiento de las coordenadas se hace en las columnas:
AB - Latitud en grados y minutos.
AC - Longitud en grados y minutos.
AD - Latitud decimal = decLat.
AE - Longitud decimal = decLong.
P - Localización X en el mapa = (decLong + 180) * 760 / 360 - 8
Q - Localización Y en el mapa = 240 - (decLat - 8) * 360 / 170

Estas últimas fórmulas son aproximadas y dependen del tamaño del mapa.

Ya sólo falta localizar y mostrar la ciudad en el mapa con las funciones LocalizaCiudad y MuestraCiudad, respectivamente, pero eso ¡ya no lo explico!

English translation of this post here.

No Response to "Geocodificación del mapa de relojes"

Leave A Reply

Dime si te gusta lo que lees y, si no te gusta, dime por qué. Tengo habilitada la moderación de comentarios. Tu comentario se publicará pronto.

Tell me if you like what you read here and if you don't like, tell me why. I've enabled comment moderation. Your comment will be published ASAP.

Mi Lista de Blogs- My Blog List