Jon Garrido Martin GIS Developer

GIS Developer Freelance

Análisis network con open source (III):Creación una aplicación web de analisis network

By jongarrido | September 4, 2015 | 0 Comment

Cómo último post de la serie de 3 explicaremos aquí como servir mediante geoserver la red network generada en artículos anteriores. Deberémos servir además una layer de tipo vista para mostrar los resultados de los análisis de ruta.

Como paso previo NECESARIO para la puesta en marcha necesitamos crear una función en nuestra base de datos para el análisis de ruta de un punto a otro.

Podemos utilizar esta sentencia sql: fromAtoB

En primer lugar nos logeamos en nuestro servidor geoserver y añadimos un nuevo almacén de datos tipo PostGis Database. Introducimos los datos de la base creada en anteriores post y a continuación le damos a crear nueva SQL View.

En la sentencia SQL pondremos:

SELECT ST_MakeLine(route.geom) FROM (
SELECT geom FROM pgr_fromAtoB(‘ways’, %x1%, %y1%, %x2%, %y2%
) ORDER BY seq) AS route

Damos al botón de averiguar parámetros y ponemos como valor por defecto 0 y expresión regular ^-?[\d.]+$

Presionamos en actualizar atributos, nos aparecerá st_makeline y ponemos:

– Tipo: LineString

-SRID: 4326

Guardamos la sentencia.

En el resto de la configuración de la capa debemos poner las coordenadas de la extensión geográfica de la capa. Geoserver no sabrá calcularlas desde el encuadre nativo ni desde los datos por lo que tendremos que meterlas a mano (puedes para ello cargar la capa de ways en un visor gis cualquiera…). Importante además que en la pestaña publicación seleccionemos una simbología de linea.

Ya tenemos nuestro “servicio de routing”. A la hora de llamar a este wms deberemos introducir en los parámetros las coordenadas de los puntos de origen y fin de la ruta. Para ello añadiremos una propiedad viewparams a los parámetros de nuestra capa wms:

Parametros de nuestro wms:

var params = {
LAYERS: ‘projectBaselayer:pgrouting’,
FORMAT: ‘image/png’
};

Tomamos las coordenadas de clicks de ratón:

var startCoord = event.getCoordinate();

var finalCoord = event.getCoordinate();

Y las metemos en la propiedad viewparams:

   var viewparams = [
‘x1:’ + startCoord[0], ‘y1:’ + startCoord[1],
‘x2:’ + finalCoord[0], ‘y2:’ + finalCoord[1]
];
params.viewparams = viewparams.join(‘;’);

Solo nos queda crear la capa y añadirla:

result = new ol.layer.Image({
source: new ol.source.ImageWMS({
url: ‘http://www.jongarrido.es:8080/geoserver/wms’,
params: params
})
});

map.addLayer(result);

 

Puedes ver un ejemplo en vivo aqui.

0 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *