Jugando con Openmap

 

A principios de semana me salió la necesidad de hacer un algoritmo que sobre la tierra me dijera lo siguiente: Supongamos que sobre un punto de la tierra trazamos un rumbo siguiendo un azimuth determinado (ángulo respecto al Norte, en sentido horario). Se trata de saber si ese rumbo pasa o no pasa por una determinada zona geográfica, definida como un polígono cerrado sobre la superficie de la tierra.

Si suponemos tierra plana, el tema es relativamente sencillo sabiendo un poco de matemáticas y de geometría. Pero si las distancias son algo grandes, no vale suponer tierra plana. Debemos meternos con trigonometría esférica, vectores o cualquier otro artilugio de matemáticas. Como me daba pereza desempolvar los apuntes de matemáticas, me dediqué a buscar por ahí y me encontré con Openmap.

Openmap es una librería java pensada para dibujar mapas y sobre ellos, dibujar lo que queramos. Podríamos, por ejemplo, dibujar nuestro polígono y el rumbo desde el punto en cuestión. La librería viene muy completita, de forma que con un simple new OpenMap(), sin parámetros, se lanza una aplicación con el mapa mundo por defecto, opciones de zoom, de dibujar día y noche, etc, etc. Pero por supuesto, también tiene todo el conjunto de clases necesario para que nosotros podamos hacer nuestro mapa a medida. Cargamos un mapa en formato shapefile, definimos nuestros menús y barras de herramientas, etc.

Pero eso no es lo que a mí me venía bien, puesto que no quiero pintar un mapa. Lo que a mí me venía bien es que tiene clases de sobra para el cálculo de "cosas" sobre la superficie de la tierra. Hay clases capaces de decirte la distancia en km de dos puntos sobre la tierra, de decirte si dos segmentos sobre la superficie de la tierra se cortan, hay clases de zonas geográficas poligonales … y clases para saber si un segmento corta a una zona poligonal.

Total, que lo que yo imaginaba iban a ser un par de días de echar cuentas arriba y abajo, probar, volver a probar y echar humo por la cabeza, al final ha sido una mañana de jugar con Openmap y aproximádamente diez líneas de código java para mi algoritmo, usando las clases de Openmap. La única "pega" que le veo es cargar con un Openmap.jar sólo para echar unas cuentas….

 

Entradas relacionadas:

Esta entrada ha sido publicada en Herramientas, java y etiquetada como , , . Guarda el enlace permanente.

7 respuestas a Jugando con Openmap

  1. Maks dijo:

    Interesante saberlo, gracias por la info.

    (aunque no comentemos a veces sí que te leemos 😉 )

  2. Tiriel dijo:

    Y no se podría estudiar las dependencias de las clases que utilizas y luego desempaquetar Openmap.jar y reempaquetar solo las clases necesarias?

  3. Chuidiang dijo:

    Sí, es posible y de hecho sería sencillo de hacer (hay pocas depenencias, creo, ya que son sólo clases que echan cuentas). De hecho, con otras librerías en ocasiones lo hemos hecho

    Pero no me gusta hacer esas cosas. Si más adelante, por el motivo que sea, se quieren más cosas de openmap u openmap completo, tenemos que acordarnos de quitar el mini-jar que nos hagamos para que no haya clases duplicadas, quizás de distinta versión. Acordarse de eso es fácil de aquí a uno o dos meses y siempre que el que lo haya hecho esté en el tema, pero es algo que se olvida y que otros desarrolladores del grupo pueden desconocer. Si la clase está duplicada no suele pasar nada, salvo que sean distintas versiones de la clase y entonces el problema que surge puede ser muy difícil de detectar y dar bastantes quebraderos de cabeza (ya nos ha pasado alguna vez).

    No me gusta traerme todo openmap pero, desde luego, me gusta menos abrir la puerta a un posible (aunque quizás improbable) problema en un futuro.

    Fíjate, por ejemplo, en este problema http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6356487 que hubo con java 6 por culpa de que metieron dentro una versión antigua de Xerces dentro del jar de clases estandar de java.

  4. Tiriel dijo:

    Y es por esto que sigo este blog. Cada día se aprende algo nuevo.

    Que sepas que te cito en mis entrevistas de trabajo :p

  5. Chuidiang dijo:

    @Tiriel ¿me citas en tus entrevistas de trabajo? Creo que no entiendo…

  6. Tiriel dijo:

    Si, como referencia, si me preguntan cómo me mantengo informado, aparte de las publicaciones digamos oficiales (white papers, etc.)

    Espero que no te importe.

  7. Chuidiang dijo:

    @Tiriel no, por supuesto que no me importa, al contrario, me halaga un montón. Pero, ¿conocen mi página los entrevistadores como para que sirva de algo? A ver si a mi próxima entrevista tengo que decir que me leo a mí mismo 😛

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

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