Archivo de la categoría: desarrollo

MOSKittGeo: from UML to Spatial Databases and back


Probably some of you do a real engineering process to build your GIS projects, I mean, the classical analyse-design-implement cycle. As a GIS is in fact an Information System with the (complex of course) spatial component, one should expect that the common tools and methodologies of «normal Information Systems» are available for GIS engineers but on the case of database modelling that’s not so common.

So, what happens when you want to design a GIS data model? Well, one usually had to use a “fake” geometry type on your CASE tool of choice and afterwards create the geometry columns by hand or using custom post-processes.

Until now, because my smart colleagues at Prodevelop have developed an extension to the MOSKitt software called MOSKitt Geo that adds the spatial data type to the UML and Entity-Relationship models so you can perform the regular design process on MOSKitt: you do your UML model, then you convert it to the Entity-Relationship model and then you select your target database and MOSKitt creates the DDL scripts automatically.

MOSKitt ER designer

Even more, you can also do reverse engineering of your spatial database and redesign or improve you data models using excellent MOSKitt graphical tools!

Take a look on these videos from the new Prodevelop YouTube channel to see how it works and go (and comment!) to the Carlos post about MOSKitt Geo at Prodevelop blog.

Probando SUSE Studio


SUSE studio

SUSE es una de las grandes distribuciones del Sistema Operativo GNU/LInux. Hace ya unos años que fue adquirida por Novell y que adoptó la solución de RedHat de ofrecer una versión para la comunidad y otra de pago. Bueno, el caso es que hace ya unos meses se anunció que Novell estaba preparando SUSE Studio, una aplicación web en la que se podrían generar appliances, máquinas virtuales basadas en SUSE (tanto la versión libre como la de pago). Estas versiones serían personalizadas, ya que se podrían configurar a través de una interfaz web y para más tarde descargarlas y usarlas donde quieras.

El servicio estaba en pruebas con acceso privado y solicité el alta. Pues nada, esta mañana me ha llegado el correo en el que me avisaban de ya podía darme de alta (usando OpenID por cierto) y he estado trasteado un poco.

Sigue leyendo

Python, nubes de etiquetas y geoinformatics…


A lo largo de la semana pasada y la corriente he visto dosreferencias, en Microsiervosy en Genbeta,a dos servicios que  hacen cosas muy similares aunque noexactamente lo mismo: nubede etiquetas. Uno lo obtiene como resultado y el otrolo usa como herramienta.

El caso es que me he tomado como ejercicio de Python (de vezen cuando hay que hacer estas cosas o se te oxida la serpiente)elaborar una nube de etiqueta para un texto dado.

Sigue leyendo

Instalando ka-Map en un XAMPP… pegándose con php_mapscript en un Apache que ya está en marcha.


Como ya os conté en su momento, tengo instalado un mapserver y un tilecache en el ordenador, lo que no os conté es que está encima de un XAMPP. Recientemente se me ha ocurrido probar ka-Map, a raíz del taller de las IIas Jornadas de SIG Libre,y cuando lo instalé, siguiendo rigurosamente las instrucciones, me encontré con  un problemilla que me ha llevado un poco resolver, sobretodo porque pese a que hay bastante gente que le ha pasado, no he sido capaz de encontrar la solución en San Google. Se trata de un problema para instalar MapScript sobre un Apache ya existente (o sobre un XAMPP).

Todo empieza con este error cuando pedimos la siguiente dirección: http://localhost/ka-map/init.php

 Warning: dl() [function.dl]: Not supported in multithreaded Web servers -  use extension=php_mapscript.dll in your php.ini in C:xampphtdocska-mapinit.php  on line 118

 Fatal error: Call to undefined function ms_newmapobj()   in C:xampphtdocska-mapinit.php on line 124

Para empezar la distribución estándar de xampp no tiene la dll php_mapscript así que vamos a la página de PHP MapScript decididísimo a descargarme lo que haga falta… te llegas a la página de PHP MapScript y descubres que, para MSW$, ahora solo se distribuye junto con ms4w,pero claro, yo ya tenía un Apache y un MapServer funcionando así que no quería instalar otro servicio Apache… cojo, la versión en zip de ms4w y rapiño la dll…

 Ojo, acordaros de modificar convenientemente el config.php de ka-Map 

 $szPHPMapScriptModule = 'php_mapscript.'.PHP_SHLIB_SUFFIX; $szPHPGDModule = 'php_gd2.'.PHP_SHLIB_SUFFIX;

… retoco el php.ini del xampp (usad el phpinfo() para saber dónde está) para que cargue php_mapscript como extensión,  reinicio Apache y …

 Warning: dl() [function.dl]: Not supported in multithreaded Web servers   - use extension=php_mapscript.dll in your php.ini in C:xampphtdocska-mapinit.php on line 118
 Fatal error: Call to undefined function ms_newmapobj()   in C:xampphtdocska-mapinit.php on line 124

vale, al parecer estoy haciendo algo mal… tras unas búsquedas en Google veo que es un mal bastante común y que no parece que nadie sepa cómo solucionarlo, así que me pongo a investigar y descubro que ms4w tiene montado PHP como FastCGI en vez de como módulo (opción por defecto en XAMPP), bueno, pues probemos si es eso…

Vamos a C:/xampp/apache/conf/extra/httpd-xampp.conf y modificamos las primeras líneas del archivo para que recen así:

 ScriptAlias /php/ "C:/xampp/php/" Action application/x-httpd-php "/php/php-cgi.exe" #LoadModule php5_module "C:/xampp/apache/bin/php5apache2.dll" AddType application/x-httpd-php-source .phps AddType application/x-httpd-php .php .php5 .php4 .php3 .phtml .phpt

si lo reiniciáis y ejecutáis “as is” lo más fácil es que os de un error de Acceso prohibido cuando intentéis ejecutar cualquier archivo php ya que por defecto C:/xampp/php/ NO tiene permisos asignados en Apache (ojo con esto que puede producir fallos GORDOS de seguridad)

 <Directory "C:/xampp/php/"> AllowOverride AuthConfig Order allow,deny Allow from all </Directory> 

reiniciamos Apache y “sorpresa”

 Warning: dl() [function.dl]: Unable to load dynamic library  'C:xamppphpextphp_mapscript.dll' - No se puede encontrar el módulo especificado.in C:xampphtdocska-mapinit.php on line 118

 Fatal error: Call to undefined function ms_newmapobj() in  C:xampphtdocska-mapinit.php on line 124

El hecho de que hayamos cambiado de error indica que estamos progresando :-D aunque el error que indica es que no puede cargar php_mapscript.dll la realidad es un poco más compicada, lo que no puede cargar es alguna de sus dependencias pero ¿cuales? pues para contestar eso tendremos que ejecutar un programita que “escarba” las dependencias de las dll el Dependency Walker(esto lo averigüe leyendo la ayuda de Apache).

Cuando falta una dll, la podemos obtener de la versión en zip de ms4w, descomprimiendo lo que necesitemos, las dlls están todas en ms4w_2.2.7.zipms4wApachecgi-bin. Conforme vamos añadiendo dlls a C:/xampp/php/nos irá señalando nuevas faltas (refrescando Dependency walker con F5). Una forma de “acelerar” el proceso es descomprimir directamente todas las dlls que hay en el .zip en la carpeta (básicamente GDALes y PROJes)… Hay una dependencia que no es necesario resolver para que php_mapscript funcione “MSJAVA.dll“.

Fijaros que cómo PHP está montado como FastCGI no hace falta reiniciar Apache para que surtan efecto los cambios. Una vez hecho esto el mensaje de error de ka-Map es distinto, haciendo referencia a que no encuentra el mapa de ejemplo… señal de que funciona.

 Warning: [MapServer Error]: msLoadMap():  (C:xampphtdocska-map/../../gmap/htdocs/gmap75.map) in  C:xampphtdocska-mapinit.php on line 124
 Warning: Failed to open map file ../../gmap/htdocs/gmap75.map in  C:xampphtdocska-mapinit.php on line 124
 Fatal error: Call to a member function getMetaData() on a non-object in  C:xampphtdocska-mapinit.php on line 130

Bueno, pues con esto en un periquete tenéis ka-Map montado sobre un XAMPP ya existente (ojito,  again, con las configuraciones de seguridad, este es un ejemplo para un puesto de desarrollo, no de producción). Espero que os sirva la recetilla y si tenéis dudas… ya sabéis.

¡Un saludo!

PD. A mis fans, os juro que ahora mismo me pongo con la 2a parte de lo de Girona, pero como esto lo tenía a mano…

Nokia 810, con GPS y Java!!!


Acabo de leer en el blog de Oveque Nokia va a sacar una nueva Internet Tablet con GPS, teclado duro y,atención, soporte para Java ME/CDC!!! (ver nota)Y la mayoría diréis ¿eso qué es lo que es?… Pues justo la plataformaJava para la que estamos desarrollando en Prodevelop gvSIGMobile. Un cacharrín SIN Windows Mobile,con pantalla de 800 por 480, GPSintegrado,…. va a ser LA PLATAFORMA del mundo libre para desarrollaraplicaciones móviles, al menos la primera. Y si no, ¿cómo es que laprimera foto que vemos del bicho es justo con un mapa?

Nokia 810

Espero que PhoneMEAdvanced (el proyecto de máquina virtual librede Sun) tenga un buen rendimiento y no nos cueste mucho adaptar lorealizado hasta el momento porque creo que puede ser un verdaderopuntazo.

Según el anunciooficial de Nokia habrá que esperar a noviembre y costará unos480 dólares, aproximadamente.

NOTA: Movido por el sensacionalismo entusiasmo blogger, metí la pata. No tiene soporte oficial para Java, lo que ocurre es que es una de las futuras plataformas que serán soportadas por el proyecto PhoneME. Más info sobre PhoneME y las Internet Tablet aquí.

Más info en engadget.

El vídeo de promoción y una review si pinchas en el leer más.

Más de geoRSS


Pues sí, para volver de vacaciones, algo ligerito.

A partir de ahora las noticias de http://geomaticblog.net se distribuyen en formato geoRSS. Eso significa varias cosas. La primera es que el feed de noticias puede consumirse por cualquier cliente que acepte este formato, como por ejemplo:

Ahora solo resta que los redactores vayamos publicando las noticias con su correspondiente localización, de momento he geolocalizado tres noticias anterioriores (y esta) para que la cosa pueda funcionar.

En cualquier caso, se localizarán las noticias que tengan sentido claro, porque una noticia sobre un estándar o una nueva aplicación, difícilmente se pueden asignar a una ubicación geográfica, aunque se puede aplicar imaginación….

Sistemas de referencia en la web 2.0


Seguro que trabajando con Sistemas de InformaciónGeográfica, alguna vez has tenido que lidiar con losSistemas de Referencia (SRS) y los Sistemas de Coordenadas (CRS).Además, casi con total seguridad te sonará labase de datos EPSG,creada por el antes llamado European Petroleum Survey Group ahoraconocido como OGP(Asociación internacional de productores de Petroleo y Gas).

Esta base de datos se ha convertido enprácticamente un estándar para codificar lamiríada de sistemas de coordenadas (UTM, Lambert, etc) ysistemas de referencia (ED50, NAD87, WGS84,…) por códigosmás sencillos de manejar. Bibliotecas como Proj4 utilizanesta codificación para poder refererirnos a cualquiercombinación mediante un código. Por ejemplo,la ya casi obsoleta UTM zona 30, huso norte en ED50 secodifica como 23030.

La forma habitual de lidiar con estos códigos era,o bien te bajabas la base de datos Access (urgg) o bien (en mi caso) tebuscabas los códigos directamente en el fichero epsg queviene con Proj4.

Bueno, pues eso ha pasado a mejor vida porque Howard Butler y Christopher Schmidthan creado http://spatialreference.org,una página que permite consultar cualquier códigoEPSG y generar mediante urls muy sencillas la transformaciónde ese código a los diferentes formatos empleadoshabitualmente en los SIG.

Así, si pedimos el código 23030 tenemoslas siguientes direcciones web:

En realidad algunas no son más que combinaciones deotras pero ¿por qué no hacerlas? seguro que aalguien le resulta útil.

Bueno, ahí queda el recurso que seguro que muchosencontráis tremendamente útil.

geoRSS en gvSIG (2a parte)


Bueno, ya han pasado unas semanas desde que publicamos laprimera versión del plugin para gvSIGpara poder ver capas geoRSS.

Algo de trabajo he hecho y ya va siendo hora de publicarlo,aunque (como no) queda mucho por hacer, pero como rezan loscánones del softwarelibre, hay que publicar a menudo, aunque haya pocos avances. Pero no esel caso, porque creo que esta versión es bastante usable yañade bastantes funcionalidades.

Además, para hacer pruebas con el sistema dedocumentación técnica DocBook (y porque es imprescindible documentar, claro) he escrito unpequeño manualde usuario y en un futuro algo de documentacióntécnica sobre este pequeño proyecto.

Por cierto, ya que que Alejando en la Cartoteca ha estado haciendo experimentos con geoRSS y Flickr, le invitamos desde aquí a que los continúe con gvSIG, que puede dar bastante juego Gui&ntilde;o.

geoRSS en gvSIG

Para no aburrir las características principales delplugin:

  • Acepta orígenes RSS y Atom
  • Acepta noticias geocodificadas con puntos en el estándar geoRSS
  • Permite ver en gvSIG el contenido de la noticia RSS y proporciona el enlace a la noticia completa (abriéndose el navegador web).
  • Las capas se pueden almacenar en el proyecto, al abrirse de nuevo recuperará las noticias actuales.
  • Se pueden recargar las noticias en cualquier momento (me acabo de dar cuetna de que esto no está en la doc de usuario, cachis).

Cosas que no van bien

  • Por alguna extraña razón, cuando te acercas mucho las geometrías no se pintan en pantalla.
  • Al guardar da un error con respecto a las tablas, pero la operación termina correctamente
  • Seguro que hay muchas más pero no lo he probado a fondo, a fin de cuentas esto es por amor al arte y para apreder Gui&ntilde;o.

Cosas que se podrían mejorar

  • Como no, los javadocs… eso da una pereza terrible pero hay que hacerlo SIEMPRE y BIEN.
  • El diálogo de añadir capa debería integrarse con gvSIG
  • El botón de información por punto debería integrarse con el de gvSIG
  • Podrían marcarse con un tono más saturado los items visitados, al estilo de los visores de RSS
  • Podría hacerse un temático con lasnoticias más viejas y las más nuevas
  • En general, se podría trabajar más con la capa para ofrecer una funcionalidad más parecida a la de un lector de RSS, ya que actualmente la capa es simplemente un tema de puntos en memoria sin persistencia de ningún tipo.

Finalmente, los ficheros de distribución:

  • Binarios (las instrucciones de instalación están en la documentación)
  • Fuentes (el proyecto de Eclipse)
  • Documentación (proyecto Eclipse con los fuentes DocBook y la tarea Ant que genera todo) cuidado porque hay referencias que no se podrán cumplir al faltar los recursos (DTD, XSL, etc) que están fuera del proyecto. Si alguien está interesado en esta parte puedo más adelante contar como funciona.

Lo siguiente en lo que me gustaría meterme (cuando vuelva de las vacaciones) es integrar la documentación de usuario DENTRO de gvSIG, ya que me parece IMPRESCINDIBLE que un buen software tenga una ayuda en línea, ni siquiera apuntando a un sitio web (o al menos no sólo) sino que debe estar descargada en la máquina. A ver qué sale, iremos informando.

Bueno, con esto cierro este proyecto de momento,. Espero queos sea útil como usuarios y a alguno como desarrollador.

geoRSS en gvSIG


Hace algún tiempo, vi en el blog de Meneamequepublicaban sus noticias añadiendo informaciónsobre la localización de las noticias gracias alestándar geoRSS.Automáticamente (esdeformación profesional) pensé queestaría bien poder presentar en gvSIG las noticiascomo side una capa más se tratara. De hecho ya lo habíapensado antes para las fotos de Panoramio(para el quetambién hay un APIque permite estas cosas) pero en sumomento me dio algo de pereza.

Pero esta vez, se dieron los condicionantes, a saber:

  • Un curso sobre desarrollo con Software Libre que realicé hace poco: los comienzos
  • En verano resido en un chalet: no hay Internet
  • Jornada intensiva en el trabajo: tardes libres
  • Tampoco hay televisión: mi padre ve el «tomate» y «betty la fea».
  • Alternancia entre piscina y nuevo libro de Harry Potter: un poco de programación no hace daño a nadie ¿no?

Así que nada, manos a la obra.


Objetivos

  • Crear un nuevo origen de datos en gvSIG: un canal geoRSS
  • Poder fácilmente añadir dicho recurso a gvSIG como una capa vectorial (¿tal vez especializando alguna clase existente?)
  • Profundizar en la metodología de configuración de proyectos de desarrollo sobre gvSIG, para conseguir la forma más sencilla y rápida de empezar a programar (luego diré el por qué de esto).
  • Probar bibliotecas que no conocía para evaluarlas (renderizado de HTML, parseo de documentos XML).
  • Probar sistemas de documentación de código (Doxygen).
  • Probar sistemas de documentación técnica (Docbook).
  • Aprender más sobre la arquitectura de gvSIG, y si puede ser divertirse programando.

En fin, muchas cosas, algunas conseguidas y otras no.

Estado actual

¿Que tengo hecho? Pues más o menos hayuna versión funcional del plugin con lo siguiente:

  • Un conjunto de clases que modelan un origen de datos geoRSS utilizando como parser XML la biblioteca JDOM.
  • Una especialización de la clase MemoryDriver que recibe como origen un objeto de las clases anteriores.
  • Una interfaz para presentar una noticia RSS, utilizando una plantilla HTML configurable. Esta interfaz lanza todos los enlaces al navegador del usuario.
  • Para probar esto, un botón que carga las noticias de Meneame.net.

geoRSSLayer 01

Cosas que quiero terminar

Estas son las cosas que seguro voy a terminar porque creo quevale la pena dejar algo a mi entender redondo. Como esto essólo un prototipo que he realizado por mi cuenta (y gratis)pues no creo que siga trabajando mucho más en el proyecto.Eso no quiere decir que como software que selicencia bajo la GPL,cualquiera pueda continuar el trabajo para mejorarlo o adaptarlo a loque le dé la gana.

En orden de prioridad, tengo estas tareas autoimpuestas:

  • Una ventana con información sobre el canal RSS
  • Un nuevo botón para añadir un geoRSS cualquiera (ahora se podría hacer cambiando la url del fichero text.properties).
  • Revisar los javadocs para no dejar nada importante sin comentar
  • Tal vez en la funcionalidad de obtener información de la noticia podría hacer que saliera el título de la noticia en el tooltip del ratón o en la barra de estado.
  • Implementar los métodos que permiten que se pueda guardar la capa (actualmente no se guarda).

Seguro que quedará con montones de bugs y cosas porhacer pero ya digo, esto lo he planteado como unprototipo paraaprender un poco más de ciertas áreas de gvSIGque quería explorar, así que si alguien se animay quiere contribuir, es bienvenido.

Algunas consideraciones finales

  • A ver si tenemos pronto una infraestructura para que la comunidad gvSIG aporte este tipo de trabajos, más o menos profesionales, pero siempre bienvenidos, tanto plugins escritos en Java como para los distintos lenguajes de scripting que gvSIG soporta. Yo de momento me he apañado con un repositorio SVN aportado por el proyecto KnowledgeForge.
  • Queda pendiente por mi parte, si lo consigo, encontrar una metodología de configuración para no tener que compilar TODO GVSIG antes de empezar a desarrollar. No es tan complicado, y seguro que alguno de los que lean esto saben cómo hacerlo, pero creo que se puede facilitar bastante más la tarea de empezar a programar en gvSIG a la gente recién llegada.
  • Sobre las experiencias en el desarrollo y tal, pues contaré algo en función de las ganas y el feedback que haya. Yo ya he aprendido, así que lo escriba aquí ya es por puro altruismo bloguero.
  • En cuanto al plugin…, si habéis llegado hasta aquí merecéis probarlo :D, estos son los pasos a seguir:
    1. descomprime este zip en tu carpeta extensiones de gvSIG
    2. activa una vista en 4326
    3. cuenta por aquí tus impresiones
    4. Si te atreves o tienes curiosidad, aquí están los fuentes a fecha de hoy
  • Uis, casi se me olvida, esto va sobre gvSIG 1.1rc1 y java 1.5 Avergonzado