Generación dinámica de temáticos con WMS y SLD

César Díaz García / Tracasa Instrumental

Logo Tracasa Instrumental

¿Quién soy?

  • MsC en Ingeniería Web por la Universidad de Oviedo
  • 3 años trabajando en Tracasa y desarrollo GIS
  • Departamento de GeoWeb
  • Mucho front end

¿Qué es un temático?

Tematizar consiste en presentar datos estadísticos a través de mapas permitiendo una mejor comprensión y acceso a los datos por parte de los usuarios

¿Por qué a través de WMS?

Procesamiento de datos vectoriales en cliente


Reducción del trasiego de información

Procesamiento y estilos con SLD

Uso de estándares OGC

¿Y SLD?

  • SLD (Styled Layer Descriptor) es un lenguaje para dar estilos a datos geoespaciales
  • Generación dinámica del SLD en cliente
  • Enviado como parámetros en las peticiones GetMap y GetLegendGraphic

Caso práctico: visor del Área de Comercio del Ayto. de Pamplona

Búsqueda de distribución de la población

Búsqueda de distribución de la población

  • Delimitación del área de búsqueda:
    • Barrio
    • Distrito - Sección
    • Vía
    • Polígono dibujado por el usuario
  • Rangos de edad
  • Sexo

Búsqueda de distribución de la población

  • Parcelas urbanas tematizadas por personas censadas dentro de los tramos de edad seleccionados

Arquitectura

Más en detalle

  • Búsqueda de personas entre 17 y 41 años de ambos sexos que viven en la calle Estafeta
                
viewparams:codsexo:1\,2;tramos:'17-21'\,'22-26'\,'27-31'\,'32-36'\,'37-41';codcalle:870
sld_body:
<sld:StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" version="1.0.0">
  <sld:NamedLayer>
    <sld:Name>VCOM_Pol_PobCatC</sld:Name>
    <sld:UserStyle>
      <sld:Name>pob_cat_style</sld:Name>
      <sld:Title>pob_cat_style</sld:Title>
      <FeatureTypeStyle>
        <Rule>
          <ogc:Title>De 1 a 2</ogc:Title>
          <ogc:Filter>
            <ogc:And>
              <ogc:PropertyIsGreaterThan>
                <ogc:PropertyName>personas</ogc:PropertyName>
                <ogc:Literal>0</ogc:Literal>
              </ogc:PropertyIsGreaterThan>
              <ogc:PropertyIsLessThanOrEqualTo>
                <ogc:PropertyName>personas</ogc:PropertyName>
                <ogc:Literal>2</ogc:Literal>
              </ogc:PropertyIsLessThanOrEqualTo>
            </ogc:And>
          </ogc:Filter>
          <PolygonSymbolizer>
            <Fill>
              <CssParameter name="fill">#bdd7e7</CssParameter>
            </Fill>
          </PolygonSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </sld:UserStyle>
  </sld:NamedLayer>
</sld:StyledLayerDescriptor>
					
                

Más en detalle

  • viewparams para pasarle los parámetros a la vista SQL
  • sld_body para enviar la SLD -> POST
  • El nombre de la capa va dentro del cuerpo del SLD en lugar de utilizar el parámetro layers de GetMap

Aún más en detalle

                
SELECT sum(count) as personas, geom
FROM distribucion_poblacion
WHERE codcalle= %codcalle%
AND codsexo IN (%codsexo%) 
AND tramos IN (%tramos%)
GROUP BY geom
                    
                
  • Validación con expresiones regulares para evitar SQL Injection

Demo

¿Preguntas?

Muchas gracias