Skip to content

Latest commit

 

History

History
171 lines (124 loc) · 7.07 KB

README.rest

File metadata and controls

171 lines (124 loc) · 7.07 KB

espectros-microzonas

Aplicación web que permite obtener valores de aceleración dados una microzona y un valor de período estructural (principalmente)

Instalación

$ git clone https://github.com/funvisis/espectros-microzonas.git
$ cd espectros-microzonas
$ virtualenv --distribute entorno
$ source entorno/bin/activate
$ pip install -r requirements.pip

El hecho de colocar el entorno virtual en la misma carpeta del proyecto es una preferencia personal, así como su nombre. Así que no es una obligación. Sí es conveniente colocar esta carpeta dentro de la lista del .gitignore.

Prueba

Luego de instalar el proyecto, hay que tener siempre en cuenta que debe usarse con el entorno virtual que se creó para el proyecto. Así que para correr el proyecto, primero se debe activar el entorno:

$ cd <espectros-microzonas> # Supongamos la ruta completa
$ source entorno/bin/activate

La configuración del proyecto debe hacerse en la carpeta <espectros-microzonas>/python/espectros-microzonas/conf/local/settings.py. Ahí simplemente asignan las opciones de configuración que sean nuevas o diferentes a las que están en el archivo <espectros-microzonas>/python/espectros-microzonas/settings.py.

A continuación, se inicializa la base de datos:

$ cd python
$ ./manage.py syncdb

Y por útlimo se puede poner en ejecución el servidor de pruebas para revisar el proyecto:

$ ./manage.py runserver

Con esto, visitando la página http://localhost:8000 se puede apreciar el proyecto desde el punto de vista del usuario.

Pre-requisitos

Debe existir una instancia de GeoServer corriendo en el servidor. Para esto, se requiere instalar las siguientes aplicaciones:

Una vez instalado el Tomcat, Geoserver debe instalarse como una aplicación web dentro del tomcat (debe ir dentro de la carpeta webapps). Luego debe instalarse el CORS-filter, esto se hace poniendo el respectivo archivo .jar en la carpeta "lib" del Tomcat, y luego debe añadirse lo siguiente en el web.xml:

<filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>CORS</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Esto debe agregarse al final del archivo, justo antes de cerrar la etiqueta </web-app>.

Posteriormente, desde el proyecto Django, debe identificarse el URL del servicio de Geoserver estableciendo el valor GEOSERVER_URL en el archivo settings.py.

Adicionalmente, debe establecerse el valor de la configuración settings.MICROZONE_LAYERS como una lista de tuplas de tres cadenas. Cada tupla representa una capa de microzonas y se compone de una primera cadena que simplemente le da un nombre amigable al usuario, la segunda cadena es el nombre formal de la capa tal cual está establecida en GeoServer y la tercera cadena es el nombre del atributo interesante de la capa.

También debe existir un servidor de parámetros. El servidor definirá un servicio para obtener los parámetros de una microzona por nombre de la microzona. Este servicio debe tener una URL, y esta URL se establecerá en la configuración PARAMETERS_SERVICE.

Ejemplo:

GEOSERVER_URL = "http://localhost:8080/geoserver/Micronozas/wms"
MICROZONE_LAYERS = [('Laderas', 'Microzonas:Microzonas_Laderas', 'Amenaza'),
                          ('Sedimentos', 'Microzonas:Microzonas_Sedimentos', 'microzona'),
                          ('Amenaza General', 'Microzonas:Microzonas_Amenaza_General', 'Microzonas'),]
PARAMETERS_SERVICE = "http://localhost:8000/getmicrozone/"

El atributo interesante es aquel que tiene como valor el nombre de la microzona tal cual aparece en la base de datos de atributos.

Bibliotecas Javascript

Se incluyen en el proyecto dos archivos .js: "spectrum.js" y "microzonelib.js".

Una vez incluidos los archivos en la cabecera del html principal, éste debe definir los <div> con identificadores "map" y "dialog" respectivamente, justo como se muestran en index.html.

En "spectrum.js" se define la clase Spectrum, que corresponde al cálculo de la función de espectro de una microzona.

La clase debe instanciarse con los atributos principales de la microzona y su nombre (label):

var esp = new Spectrum(label, phi, beta, arg_a0, arg_ta, arg_t0, arg_tstar, arg_td, arg_m, arg_p);

Entonces puede procederse al cálculo de la función de espectro para cualquier punto x, mediante la función "calculate":

var y_point = esp.calculate(x_point);

Cualquier objeto de la clase Spectrum, una vez instanciado, puede calcular una serie de puntos mediante la función "getPoints()". Este cálculo se hace en función de una serie de puntos pre-calculados como equidistantes en el eje x en escala logarítmica:

var points = esp.getPoints();

El archivo "microzonelib.js" define un objeto global (módulo) llamado microzonelib, el cual debe inicializarse con el método init(), recibiendo opcionalmente un grupo de configuraciones iniciales. Las opciones por defecto son las siguientes:

config = {
    geoserver_url : 'http://localhost:8080/geoserver/Microzonas/wms',
    parameters_service : '/getmicrozone/',
    microzone_layers : [
        ['Laderas', 'Microzonas:Microzonas_Laderas', 'Amenaza'],
        ['Sedimentos', 'Microzonas:Microzonas_Sedimentos', 'microzona'],
        ['Amenaza General', 'Microzonas:Microzonas_Amenaza_General', 'Microzonas']
    ],
    map_div : 'map',
    dialog_div : 'dialog',
    chartdiv : 'chartdiv'
}

De no espeficarse un parámetro de configuración, la biblioteca asumirá estos valores por defecto. En caso contrario, es importante que se definan todos los campos mencionados en el ejemplo.

Para inicializar la biblioteca debe invocarse el método público init():

microzonelib.init();

Este método se encarga de cargar el mapa usando OpenLayers y configura los eventos para detectar el click en las zonas. Si geoserver está debidamente instalado y las configuraciones en el init() son correctas, no necesita hacerse nada más. Sin embargo, se definen también los siguientes métodos públicos:

  • set_config(conf): cambia el conjunto de configuraciones de la biblioteca.
  • plot(spectrum): grafica un espectro específico (debidamente instanciado).
  • request_zone(zone_id): solicita los atributos de una microzona específica.
  • show_map(map_div): despliega un mapa usando OpenLayers en el div especificado.

La biblioteca de microzonas tiene las siguientes dependencias:

  • OpenLayers: biblioteca para desplegar mapas (http://openlayers.org/).
  • JQuery: extensión de herramientas diversas para javascript (http://jquery.com/).
  • JQuery-UI: biblioteca para aplicar efectos visuales a la interfaz de usuario (http://jqueryui.com/).
  • JqPlot: biblioteca para graficación (http://www.jqplot.com/). Con los siguientes plugins:
    • logAxisRenderer
    • canvasAxisTickRenderer
    • canvasTextRenderer
    • cursor