Ideas.
“Se mistifica lo que no se conoce”. Aquí un ejemplo escrito por
Herbert Schildt:
¿Cómo escribir un programa que tenga como entrada una cadena que contenga una expresión numérica, como por ejemplo (10-5)*3, y que calcule el resultado adecuado? [...] Si todavía existe una “Gran Orden” de programadores, deben de pertenecer a ella los pocos que sepan hacer esto.
La mayoría de los demás programadores [no C] mistifican la forma en que los lenguajes de alto nivel convierten las expresiones algebraicas en instrucciones que la computadora puede ejecutar. Este procedimiento se denomina análisis de expresiones y es lo que forma la espina dorsal de todos los compiladores e intérpretes de lenguajes, de los programas de hojas de cálculo y de cualquier otro programa que convierta expresiones numéricas en forma que puedan usar las computadoras.
Aunque resulte misterioso, el análisis de expresiones es realmente algo simple y, en muchos sentidos, es más fácil que otras tareas de programación. La razón se encuentra en que el problema está muy bien definido y se basa estrictamente en las reglas del álgebra. (Schildt, 2001: 515).
[...]
No es difícil ni define ninguna "Orden". Una manera de solucionar la pregunta introductoria de Schildt a su Capítulo 24. Análisis y Evaluación de Expresiones, es: En tiempo de ejecución, cualquier expresión se desmenuza en tokens y sobre ellos se aplican las reglas algebraicas. El producto es un algoritmo que dicta la secuencia de instrucciones que calculan el resultado adecuado. Pero ahora...
Torito! ¿Como convertir "cualquier" consulta válida sobre "cualquier" base de datos georreferenciada en una vista 3D en Google Earth, y que muestre el resultado correcto sin tener que reescribir el programa para cada consulta?
Ejemplo de consulta, solucionada con un sistema que desarrollaba llamado z_KML: Desde una base de datos llamada xUgaDB, el siguiente programa ejemplo genera un KML (Google Earth) de todos los 'gatos fotografiados' después de 1995 en Tamaulipas, y los ordena por fecha, hora y número de memoria del GPS.
open xUgaDB 1
agroup l_date l_anio l_mes l_dia
agroup l_time l_hora l_minuto
sort l_date l_time gps_mem
search l_localidad ? "Tamaulipas"
search l_notas ? "gato" and
search l_notas ? "foto" and
search l_anio ? "1995" and
coord lat_gra lat_min lat_seg lon_gra lon_min lon_seg
do
end
Comentarios: En el proceso se crean los campos temporales L_DATE y L_TIME que se usaran en SORT; la geoposición se controla en COORD; el 1 en OPEN desecha el primer registro de la base -porque no es útil-; en DO no se solicita enumerar los registros en la respuesta; y no se han cambiado los parámetros default para generar el KML. El resultado es un conjunto de geoposiciones en formato KML.
La imagen arriba es una captura de pantalla de una consulta real (solicitada a xUgaDB), en donde se necesita que el resultado (conjunto de geoposiciones que responden a la pregunta) sea organizado como un conjunto de rutas de longitud mínima (un árbol de rutas). Se logra con la función PATHS ruta mínima; para lograrlo, simplemente se agrega antes de DO:
set _KML_STYLE_name x_style_02
set _KML_STYLE_type paths
set _KML_STYLE_altitude 1500
set _KML_STYLE_line_style_color 7f00ffff
set _KML_STYLE_line_style_width 4
set _KML_STYLE_poly_style_color 7f00ff00
set _KML_STYLE_tessellate 1
style
set _KML_PATHS_style_name x_style_02
paths _KML_PATHS_style_name min
Comentarios: Los primeros 7 SET declaran un estilo; con STYLE se crea el nuevo estilo; en el siguiente SET se asocia el estilo a PATHS; y finalmente, en PATHS se solicita con el estilo asociado, la ruta mínima entre todas los registros geoposicionados de la respuesta (la consulta ya configurada). PATHS se encarga de localizar una ruta base, a la cual se unan las demás rutas generadas, para que entre todas generen una distancia mínima de recorrido.
Parafraseando ¿Como escribir un programa que tenga como entrada el libreto con las instrucciones anteriores y que genere un gráfico (KML) con el resultado adecuado? Mi respuesta: z_KML es un lenguaje que analiza tokens, donde cada token es una función paramétrica que se aplica a una estructura de datos georreferenciada.
Actualización 23 jul 2007: Y si estamos en exigencias, entonces ¡que también genere un shapefile para ArcView!
_____
del libro que actualmente leo:
Schildt, H. 2001.
C Manual de referencia. Osborne McGraw-Hill. 709 pp.
Herbert Schildt //
Link
wiki: Google Earth //
Link
wiki: KML //
Link
wiki: Shapefile //
Link
wiki: ArcView //
Link
[entrada publicada originalmente el 17-07-2007 21:41 en Yahoo! 360]