martes, 24 de noviembre de 2009

Locales en Ubuntu, Google Earth y el punto decimal

A ver cómo explico este problema solucionado con una línea y 23 caracteres. Mmm...

(Abre los pantallazos haciendo clic sobre ellos para tener más información.)


Antecedentes

En el blog PistaDelRayo.es recopilo información sobre trayectos, caminos, rutas, pistas, lugares, ubicaciones, senderos y cuánta información pueda manejar sobre los montes de la isla de Tenerife.

Asociado a este blog he ido generando tres ficheros KMZ (archivos comprimidos en el famoso formato ZIP que contienen a su vez ficheros KML, éstos a su vez son ficheros en formato compatible con XML que contiene datos de posicionamiento geográfico en tres dimensiones, junto a propiedades asociadas a cada punto y de uso estandarizado con Google Earth).

La recopilación de cientos de puntos y decenas de trayectos me ha costado muchas horas y kilómetros de pedaleo -durante el último año y medio-, de usar mi propio GPS arcaico (lápiz y papel) y, sobre todo, de pasar horas jugando y divirtiéndome con el maravilloso Google Earth.

Hasta aquí, ningún problema. Pero...

Recientemente he instalado sobre Ubuntu 9.10 la última versión del citado programa de Google, la 5.1.3533.1731, que venía a corregir y mejorar algunos problemas menores con respecto a la versión anterior.

Posicionamiento indebido en Google Earth por causa de la puntuación decimalAl abrir Google Earth y cargar mis ficheros KMZ generados con la versión 5.0 encontré que las marcas de posición se ubicaban en la latitud 28 y longitud -16, sin decimales, que viene a ser un punto céntrico y en el mar, a media distancia entre las islas de Tenerife y Gran Canaria, aunque esto es un detalle anecdótico. Hay que decir que todas mis marcas de posición y rutas se encuentran en la longitud 28.nnnnnn y latitud -16.nnnnnn, donde nnnnnn son los decimales que equivalen a los minutos y segundos en la posición geográfica.

Después de dos días buscando información en la red sobre el problema, ya empezaba a sospechar que tenía algo que ver con el asunto de la puntuación decimal en el sistema operativo. Los ficheros KML contenían los datos correctos de posicionamiento (ver segundo pantallazo), así que el problema era cómo leía los datos Google Earth. Curiosamente de las dos etiquetas que contienen las referencias de posicionamiento, una sí la leía correctamente y la otra no. La que afectaba a la posición se cargaba correctamente pero la que ubica el icono de la marca de posición no (ver primer pantallazo).

Contenido de un fichero KMLIntenté buscar en el foro oficial de Google Earth y en el foro Google-Earth.es (un sitio no oficial) pero no encontré ningún tema abierto sobre el asunto previamente.

Así que sospechando que el problema era el sistema operativo y algo relacionado con la configuración local de los decimales, al final encontré una guía sobre la configuración de locales en Ubuntu y después de muchas pruebas hallé una solución simple.

Solución posible

Si tienes configurado Ubuntu para que utilice español (castellano), has generado ficheros KMZ en otros equipos y, bien por la configuración de éstos o porque las versiones anteriores de Google Earth trabajaban con notación inglesa, que no lo sé con seguridad, te encuentras con este problema debes añadir una línea en las variables de entorno para indicar que maneje los datos numéricos con notación anglosajona (punto para los decimales y coma para los separadores de miles). Esta intervención afectará a todo el sistema.

Configuración local y Google EarthEn definitiva, y para resumir, busca en el fichero /var/lib/locales/supported.d/local los idiomas locales soportados por tu sistema. Generalmente, o en mi caso, tengo dos, para español e inglés (si no deberás instalar el inglés desde Sistema » Administración » Soporte de idiomas). En mi caso los idiomas soportados se definen tal que así:

es_ES.UTF-8 UTF-8
en_GB.UTF-8 UTF-8

Añade ahora al fichero /etc/environment la línea LC_NUMERIC=en_GB.UTF-8 (o en_GB o en_US o en_US.UTF-8, según lo que tengas disponible en /var/lib/locales/supported.d/local). En mi caso el fichero de declaración de variables de entorno quedaría así:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games"
LC_NUMERIC=en_GB.UTF-8
LANG="es_ES.UTF-8"
LANGUAGE="es_ES:es:en_GB:en"

Teniendo en cuenta que si en tu caso tienes la variable LC_ALL declarada, el valor asignado a ésta prevalece sobre el de la variable LC_NUMERIC. Para más información ver la información al respecto en Misdocumentos.net sobre la manipulación de las definiciones locales en Ubuntu.

Longitud y Latitud en Google Earth funcionando correctamenteAdemás, ten en cuenta que para modificar el fichero /etc/environment probablemente debas cargar el editor de textos como superusuario, así que debes lanzar el editor de texto desde una sesión de terminal (Aplicaciones » Accesorios » Terminal) utilizando la orden sudo. Después de modificar las variables de entorno puede ser conveniente reconfigurar las definiciones locales y reiniciar la sesión (los comentarios "#" que verás más abajo no se utilizan, obviamente):

# mostrar contenido de /var/lib/locales/supported.d/local
cat /var/lib/locales/supported.d/local

# cargar editor de textos como superusuario
sudo gedit /etc/environment

# añadir -en mi caso-:
LC_NUMERIC=en_GB.UTF-8

# forzar reconfiguración de locales
sudo dpkg-reconfigure locales

10 comentarios:

Jose A. Benitez dijo...

Solamente tuve que reemplazar la linea en el archivo enviroment la linea LC_NUMERIC=en_GB.UTF-8 por LC_NUMERIC=us_US.UTF-8.

Gracias por el tutorial

Josè

Yogurin dijo...
Este comentario ha sido eliminado por el autor.
Yogurin dijo...

Gracias por hacer pública la solución de una manera tan sencilla, salu2!

A mí lo que me pasaba (aparte de salirme todos los waypoints entre Tfe y GC como a tí) es que añadía un waypoint, salía del programa, volvía a entrar y ¡Ya no se veía en el mapa! ( si en el menú de la izqda pero no se veía la chincheta)
He hecho esos cambios y ya funciona... me tenía frito! xD

Angel Cabrera dijo...

Me alegro de haber sido de ayuda :)

javiersanp dijo...

Hola
La solución que aportas es correcta pero, si no me equivoco, estás modificando la configuración global del sistema para los locales. En otro sitio proponen modificar el script que carga Google Earth, con lo que la modificación se aplicará sólo a esta aplicación y el resto del sistema sigue como estaba. Lo he visto en
http://www.google.com/support/forum/p/earth/thread?tid=72b851d55f188cea&hl=en
y viene a decir que hay que editar el script googleearth (desde línea de comandos):

sudo gedit /opt/google-earth/googleearth

Buscar la línea export LD_LIBRARY_PATH

e insertar debajo

export LC_ALL=us_US.UTF-8

Con eso se me ha solucionado.

Un saludo.

Angel Cabrera dijo...

Hola Javiersanp,

¡Cierto! Era una de las cosas a las que estaba dando vueltas pues al arreglar Google Earth se puede afectar a otras aplicaciones.

Muchísimas gracias por compartir esta solución, la voy a poner en práctica.

Un saludo,

Angel Cabrera dijo...

He probado la solución de Javiersanp y parece que va perfecta. ¡Recomendada!

Lorenzo dijo...

Yo tengo el Google Earth 5.2.1.1329 (beta) instalado en Ubuntu 10.04 LTS (Lucid Lynx) con un PC que dispone de targeta grágifa NVIDIA con controlador de vídeo NVIDIA Corporation (doy este último detalle porque otra cosa que se me ha solucionado al modificar el script /usr/bin/googleearth es el poder ver la capa de imagen del terreno -se veía todo en blanco-)

En definitiva, he solucionado el problema del punto decimal y el de la visualización de la imagen del terreno.

Lo que he hecho:

1. Ejecuto en el terminal:
cat /var/lib/locales/supported.d/local

me da como resultado que tengo los siguientes idiomas:
es_ES.UTF-8 UTF-8
en_US.UTF-8 UTF-8

2. Ejecuto en el terminal:
sudo gedit /usr/bin/googleearth

Busco la línea:
export LD_LIBRARY_PATH

y justo debajo, añado:
export LC_ALL=en_US.UTF-8 (en_US porque es la versión de ingles que tengo -visto más arriba-)

¡Solucionado! ¡Muchas gracias!

Angel Cabrera dijo...

Gracias por compartirlo Lorenzo :)

ahoms dijo...

Gracias a este post y sus comentarios lo he resuelto, muchas gracias!!