viernes, 3 de enero de 2014

Heron heron, que grande sos! (Metiéndose en el mundo GIS)

Interrumpo mi ausencia brevemente para dejar acá una recomendación. Con algo de historia, para no perder la costumbre.

Hace un par de años largos vengo haciéndome cargo de la administración de un servidor GIS (o SIG, como gusten) armado por otros y basado en un prehistórico ArcIMS+IIS para su publicación web. Y desde entonces vengo también buscando el modo de cambiar de plataforma a una basada en software libre.
Aprendí a configurar mapserver y geoserver con postgresql, aprendí a publicar con openLayers y me puse a buscar un visor de mapas que me permitiera agregar mis configuraciones y mis búsquedas sin tener que programar demasiado, y al mismo tiempo mantener la funcionalidad del ArcIMS que ya estaba funcionando.

La meta era conseguir un visor preconfigurado que funcione "out of the box", para después poder avanzar a prueba y error. Intenté configurar pmapper, geomoose, fusion y algunos otros con mas o menos éxito, pero ninguno se acercaba a las funcionalidades del ArcIMS, y la documentación dejaba mucho que desear.

En la búsqueda caí en esta comparación de clientes web gis que me dió horas de diversión y prueba, y entre todos los que pude testear me quedé con Heron por un par de razones:
  • Está basado en Openlayers, con lo que permite incorporar lo que yo tenía programado de antes.
  • Está documentado en base a ejemplos, que es mi forma preferida de aprender.
  • Usa ExtJs y geoExt, con lo que ya tenemos preconfigurados montones de controles.
  • Está en desarrollo, hay una comunidad muy activa en el sitio de heron en google.
  • El desarrollador principal (Just van den Broecke) es un manija que no para de incorporar features al visor.
Como muestra, algunas de las funcionalidades de la versión 1.0
  • Arbol de capas, medición de distancias y áreas, información de elementos, zoom (obvio).
  • Posibilidad de usar capas de Google como base.
  • Busqueda de lugar por coordenadas.
  • Panel de Leyenda.
  • Busqueda OSM incorporada.
  • Impresión en varios formatos (PDF,JPG,etc) con previsualización (usando mapFish Print).
  • Búsquedas WFS (con geoserver) por atributos, por dibujo en el mapa o por cruce entre capas. Descarga de resultados en SHP, XLS o CSV
  • Herramientas de dibujo incorporadas (usando GXP).
  • Carga de capas en el visor desde archivos SHP  (usando gdalTools en el server) o KML.
  • Lo que se le ocurra al desarrollador o a cualquiera en la comunidad.
Los dejo con un preview de la aplicación, que es igual a cualquier otra app basada en geoext. pero no se dejen engañar: esta es mejor!


PD: A lo que quede de mis lectores habituales, este post hace las veces de explicación y disculpas acerca de la inactividad de este blog, habitualmente dedicado a cuestiones de técnicos, geekadas y demás.
PD2: Enjoy!



23 comentarios:

Carlos dijo...

hola, sobre el tema de heron, si trabaja con servidores de mapas como mapserver.

Saludos.

[486] dijo...

Carlos: el visor está basado en Openlayers, así que puede trabajar con todos los protocolos que soporta OL: GeoRSS, KML, GML, GeoJSON y cualquier WMS compatible con OGC, (Mapserver, Geoserver, etc)

Vlasvlasvlas dijo...

hola! entiendo que es como un paquete geoext actualizado,,

pero como la ven para el horizonte de nuevos geoportales? me da la sensación que el perfil de geoportal geoext ya esta en todos lados..

[486] dijo...

Vlasvlasvlas: es cierto, yo también en un principio busqué alternativas para no caer en otro clon de geoexplorer. Pero hasta donde vi, no hay otro framework que iguale en features a la combinación openlayers-geoext. Me refiero a la integración con geoserver, las búsquedas WFS, la impresión con mapfish, la posibilidad de importar y exportar en muchisimos formatos, etc.
Pero por supuesto, si estás trabajando sobre otro framework y te interesa compartir tu experiencia, bienvenido!

Alberto dijo...

Hola no lo conocía llevo tiempito buscando algo sencillo t que funcione para hacer un simple geoportal para mostrar capas shp... gracias!!!! .. se puede conectar con postgresql?

[486] dijo...

Alberto: se conecta con Geoserver o mapserver, que a su vez se pueden conectar con postgresql, y la configuración básica es bastante sencilla (sobre todo si tenés alguna idea de openlayers).
Si te interesa podés plantear directamente tu proyecto y problemas acá, así quedan las repuestas para el resto.
Suerte
486

Alberto dijo...

Hola gracias por responder, esta es la idea que quiero hacer: tengo capas bases en SHAPE (estados, municipios, parroquias, hidrografia, etc) y tengo un sistema de información que guarda los datos en una base de datos PostgreSQL, en esta base de datos hay una tabla que guarda dos puntos geograficos en UTM. Quisiera hacer un geoportal sencillo que muestre a un lado las capas SHAPE con la opción para encender y apagar las capas y tambien mostrar los puntos geográficos de la bse de datos PostgreSQL. Ahora no se si es posbile que para mostrar los puntos de la base de datos pueda ser con consulta SQL ejemplo: ¿un select que muestre los de sexo M y actividad agrícola por ejemplo?. En la base de datos la tabla contiene datos de un productor nombre, sexo, fecha de nacimiento, coord. norte, coord. este, etc) es decir las coordenadas es donde esta el productor. Pues en resumen es poder mostrar las capas bases y poder mostrar como puntos donde están los productores... Gracias por tu ayuda!!!

[486] dijo...

Alberto: Lo que querés hacer es posible. Yo te recomendaría hacerlo con Geoserver (que hace de intermediario entre las capas shape o postgresql y la aplicación de Heron).
Lo de las capas shape es bastante sencillo: se cargan en geoserver y de ahi se configuran en heron como capas wms. Si queres usar google como capa base podès hacerlo modificando el ejemplo de capas google que viene en la descarga.
El lo de postgresql es mas complejo, porque según entiendo no tenés un campo geográfico en la tabla, pero es posible con un poco de maña, asi que yo me ocuparía de configurar primero el visor con las capas shape y después vería como hago la traducción de los datos postgresql al mapa.

jose dijo...

Hola que tal? por lo que veo hasta el momento me parece genial!!! estuve provando con geonode y se me complico un poco y opte por dejar de lado el paquete gis. Mi duda esto es un paquete gis???!! empece por trabajar por separado con geoserver, openlayers y geoext. todo bien hasta el momento que quise mostrar leyendas de los nodos de los arboles de capas. Sòlo pude mostrar leyenda por capas pero sin mostrar el arbol de nodos. Ojala puedan darme una manito. mi correo es joseluisquevedo1@hotmail.com. muchas gracias

jose dijo...

Hola que tal? por lo que veo hasta el momento me parece genial!!! estuve provando con geonode y se me complico un poco y opte por dejar de lado el paquete gis. Mi duda esto es un paquete gis???!! empece por trabajar por separado con geoserver, openlayers y geoext. todo bien hasta el momento que quise mostrar leyendas de los nodos de los arboles de capas. Sòlo pude mostrar leyenda por capas pero sin mostrar el arbol de nodos. Ojala puedan darme una manito. mi correo es joseluisquevedo1@hotmail.com. muchas gracias

[486] dijo...

José: Herón es una aplicación preconfigurada que usa openlayers+geoext, y puede mostrar datos de geoserver, mapserver, kml, json o cualquiera soportado por openlayers (que son muchos). Además tiene un montón de controles personalizados, basados en los de geoext y con funciones extendidas.
Por ejemplo, mirá http://lib.heron-mc.org/heron/latest/examples/layertree/index.html
(en weather-rain radar)

jose dijo...

hola muchas gracias por responder vi el ejemplo y esta muy bueno pero el problema es q no tengo mucho conocimiento en programacion. Me podrias ayudar?? necesito mostrar leyendas de las capas debajo de las mismas, pude hacer el arbol de capas pero no puedo mostras sus leyendas. gracias y saludos

[486] dijo...

José: que versión de heron estás usando? Podés pegar acá tu archivo de configuración, asi vemos que puede estar faltando?

jose dijo...

Hola la verdad estoy contra el tiempo y no pude probar heron, lo que quiero es mostrar leyenda (referencia de lineas, puntos, poligonos de cada capa) de las capas de un arbol lo cual se e complica. te pego el codigo espero me puedas ayudar muchas gracias.

jose dijo...

no puedo pegar el codigo pero es de la pagina de ejemplos de geoext tree.html y treelegend.html

albertodente@gmail.com dijo...

Amigo saludos de nuevo, básicamente lo que quiero hacer es esto: tengo una base de datos postgresql en ella tengo una tablas con nombre, apellido,coordenada estte, coordenada oeste, etc. Los campos son normales de postgresql (no son postgis). El asunto es que quiero mostrar esas coordenadas en un mapa, es decir extraerlas de postgresql y poner los puntitos en un mapa. ¿hiciste algo parecido? saludos amigo a la espera de tu amable respuesta....

[486] dijo...
Este comentario ha sido eliminado por el autor.
[486] dijo...

Alberto: la dificultad de lo que querés hacer está en que tenés que incorporar features a un mapa sin pasar por geoserver. Eso puede hacerse cargando esas geometías a un layer tipo vector.
Yo tengo implementado algo similar en un búsqueda personalizada, usando algo de PHP.
Los pasos a seguir serían:
-Consultar (por PHP) la base de datos postgresql
-Crear una capa vector
-Asignar cada registro a una entidad en openlayers y agregarla a la capa.

Te pego pedazos del código para clarificar:

(PHP. Saqué los signos de mayor y menor porque blogger se complica)
$link = pg_connect(PG_CONNECTION_STRING);

$numPlano = $_REQUEST['plano'];

$sql = "
select st_astext(transform(the_geom, 900913)) AS the_geom_text, num_plano, partida, obra, ST_X(transform(centroid(the_geom), 900913)) AS x, ST_Y(transform(centroid(the_geom), 900913)) AS y
from parcelas_rt_22195
WHERE num_plano LIKE '$numPlano%' OR num_plano LIKE '%$numPlano'
";
$res = pg_query($link, $sql);

(asigna el resultado de la búsqueda a $res)

function agregarEntidadLayerParcelas(wkt,numpla,obra){

poly = new OpenLayers.Format.WKT().read(wkt);
poly.attributes = {
name: numpla,
description:obra,
favColor: 'black',
align: 'rt',
geom:wkt
};
//alert(poly.attributes.name);
layerParcelas.addFeatures(poly);

};
(esta es la funcion que crea la entidad. En tu caso no es necesario leer un wkt, basta con crear un punto y asignarle los valores x e y, algo como "var point = new OpenLayers.Geometry.Point(lonlat.lon,lonlat.lat);")


[?php while ($row = pg_fetch_array($res)) { ?]

var numpla = '[?php echo $row['num_plano']; ?]';
var obra = '[?php echo $row['obra']; ?]';
var partida = '[?php echo $row['partida']; ?]';
var geom = '[?php echo $row['the_geom_text']; ?]';

agregarEntidadLayerParcelas(geom,numpla,obra);

[?php } pg_free_result($res); pg_close($link); ?]// END while + free memory + close connection

(este es el loop que toma cada fila en $res y llama a la funcion para agregar la entidad al layer. Otra vez, cambié los signos de mayor y menor por corchetes para que blogger no los tome como tags html)

La definición del layer vector en openlayers es bastante básica. Yo empezaría con la mínima y después trataría de agregarle estilos.

Cualquier duda avisá. Y feliz día!

albertodente@gmail.com dijo...

Gracias, estoy haciendo pruebas, pero me encontré con otros problemas que quizá sean fáciles de resolver pero estoy atascado. Ya logre configurar e instalar heron y coloque las capas de openstreetmaps, google satelite y google relieve. Trabajan perfecto, ahora necesito subir una capa de "Estados" lo intente de tre formas: convertí en GeoJSON y también en XML y lo cargue en una capa en geoserver. Sucede algo extraño, cuando coloco una capa en cualquier formato (GeoJSON, XML, Geoserver) las otras capas se desabilitan (openstreetmaps, google, etc). Te quisera enviar por correo mis archivos para cuando tengas oportunidad lo mires , estaria muy agradecido. Saludos amigo.

s dijo...

Hola, necesito ayuda desesperada!!!
Tengo funcionando un MS4W con librerias varias (openlayers, geo-ext, ext-js) y necesito incorporar algun modulo de impresion. Estoy intentando incoprorar mapfish print module, pero no doy pie con bola. No puedo hacer funcionar siquiera los ejemplos. Bajé el org.mapfish.print/print-standalone "2.0.0" pero ahora no se como incorporarlo a mi servidor Apache. Me podras dar una mano? Desde ya mil gracias!!!!

[486] dijo...

S: el módulo mapfish-print es una de las razones por las que me pase de mapserver a geoserver. Hasta donde se no hay forma de integrarlo en ms4w porque está hecho en Java (es decir, necesitas un contenedor de aplicaciones web tipo tomcat).
Si el servidor te da en cuanto a requerimientos, podés instalar tomcat+geoserver concurrentemente con apache y proxiar todo al mismo puerto. Asi es como lo tengo yo (apache tiene el sitio web, y solo me queda una capa en mapserver), si necesitas ayuda avisá.

Anónimo dijo...

Hola muy buen post.
Estoy comenzando con los temas de websig y me pregunto que diferencias hay entre Geoexplorer y Heron. gracias
Saludos

[486] dijo...

Tarde pero tarde, te contesto: las diferencias son varias, principalmente Heron tiene herramientas de busqueda wfs que no vi en otros frameworks, y metodos de descarga de geometrias en muchos formatos (via gdal-tools, me permiten descargar cualquier busqueda en kml, dxf, xls o shp) que en mi caso son la razon de ser del visor gis.