En esta entrada vamos a ver la estructura y componentes de un estilo en GeoServer, veremos un ejemplo, revisaremos el SLD Cookbook (un recetario que nos servirá de gran ayuda para editar el estilo de nuestras capas) y por último una opción para evitar escribir SLD mediante el uso de una interfaz gráfica.
Este artículo se centra en la utilización de SLD pero también podemos utilizar la extensión CSS para crear estilos en GeoServer.
En primer lugar debemos decir que los datos geoespaciales no tienen ningún componente visual en si mismos. Para verlos, deben tener un estilo. El estilo especifica el color, tamaño y otros atributos utilizados para representar los datos en un mapa.
En GeoServer, el estilo se consigue usando un lenguaje de marcado denominado Styled Layer Descriptor, o SLD para abreviar. SLD es un lenguaje de marcado basado en XML especificado por la Open Geospatial Consortium (OGC).
Aunque algo complejo es muy potente.
Conceptos
- En GeoServer el estilo es se especifica usando documentos de estilo XML SLD.
- Los documentos de estilo se asocian con las capas de GeoServer (featuretypes) para especificar cómo deben ser representadas.
- Un SLD especifica el estilo de una sola capa named layer y un estilo de usuario para ella.
- La capa y el estilo pueden tener elementos de metadatos como un nombre de identificación, un título para su visualización, y un resumen describiéndole en detalle.
- Dentro del estilo de nivel superior hay uno o más estilos de tipos de elementos (feature type styles), que actúan como «capas virtuales» para proporcionar el control sobre el orden de representación.
- Cada feature type style contiene una o más reglas que controlan cómo se aplica el estilo en función de los atributos del elemento y el nivel de zoom.
- Las reglas seleccionan los elementos aplicables mediante el uso de filtros, que son condiciones lógicas que contienen predicados, expresiones y funciones de filtro.
- Para especificar el diseño de un elemento individual, las reglas contienen simbolizadores. Éstos sirven para especificar el estilo de puntos, líneas y polígonos, así como raster y etiquetas de texto.
Vamos a ver esto con un ejemplo, ya que una buena manera de aprender SLD es mediante el estudio y análisis de ejemplos de estilo.
El siguiente SLD puede ser aplicado a una capa de puntos, mediante este estilo representar círculos rojos con un tamaño de 8 pixels.
<?xml version="1.0" encoding="ISO-8859-1"?> <StyledLayerDescriptor version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <NamedLayer> <Name>Simple point</Name> <UserStyle> <Title>Ejemplo de estilo para una capa de puntos</Title> <FeatureTypeStyle> <Rule> <PointSymbolizer> <Graphic> <Mark> <WellKnownName>circle</WellKnownName> <Fill> <CssParameter name="fill">#FF0000</CssParameter> </Fill> </Mark> <Size>8</Size> </Graphic> </PointSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer> </StyledLayerDescriptor>
Distingamos las líneas importantes:
- La línea 14 establece que se va a utilizar un «PointSymbolizer» ya que queremos dar estilo a una capa de puntos.
- Líneas 15-17 establece que los puntos utilizarán una forma gráfica especificada por un «nombre conocido Well known name, en este caso un circle (círculo). SLD proporciona nombres para muchas formas, tales como square, star, triangle, etc.
- Las líneas 18-20 especifican que la forma debe ser rellenada con un color rojo (# FF0000). Este es un código de color RGB, escrito en hexadecimal.
- Finalmente, la línea 22 especifica que el tamaño de la forma es de 8 píxeles de anchura.
El resto de la estructura contiene metadatos sobre el estilo, tales como un nombre que identifica el estilo y un título para usar en leyendas.
La creación a mano de archivos de SLD puede ser un poco tedioso y requerir mucho tiempo. Afortunadamente, hay una herramienta llamada GeoExplorer que es un editor gráfico. Con GeoExplorer, podemos crear reglas y símbolos sin necesidad de ver el código SLD. Sin embargo GeoExplorer actualmente no implementa todas las características de la especificación SLD.
SLD Cookbook
El SLD Cookbook (libro de cocina) es una colección de «recetas» SLD para crear distintos tipos de estilos. Se ha diseñado para ser una referencia práctica, mostrando las plantillas de estilo más comunes y además fáciles de entender.
El código se puede copiar a partir de los ejemplos y adaptarlo a SLD propios.
El SLD Cookbook se divide en cuatro secciones: tres para cada uno de los tipos vectoriales (puntos, líneas y polígonos) y la cuarta sección para rasters. Cada ejemplo contiene una captura de pantalla que muestra la salida del WMS de GeoServer, un fragmento del código SLD para referencia y un vínculo para descargar el SLD completo.
Accede al SLD Cookbook haciendo click aquí.
Licenciado en Geografía. Máster en Sistemas de Información Geográfica. Consultor GIS desde el año 2004. En MappingGIS desde el año 2012 para ayudarte a impulsar tu perfil GIS y diferenciarte de la competencia. Echa un vistazo a todos nuestros cursos de SIG online.
Buenos días, quería consultarle lo siguiente. Hé subido a Geoserver un shape que contiene todos los hechos delictivos del mes de Abril por ejemplo. Mi consulta es de qué manera se le puede asignar una simbología particular para cada delito. Hemos generado un SLD con la simbología para cada delito pero no hemos podido dar con la manera de que Geoserver use dicha representación. Desde ya muchas gracias por su atención.
Hola Alberto,
Entonces estáis utilizando un SLD no válido, debéis crearlo desde GeoServer, lo más fácil es crearlo con el complemento CSS: http://mappinggis.com/2014/01/estilos-css-en-geoserver/ Saludos!
Hola Aurelio, muchas gracias por tu pronta respuesta… en el editor de Capas, en la pestaña Publicación, al seleccionar el SLD que creamos nos despliega todos los delitos correctamente simbolizados (la simbología la hicimos desde GeoNode y la toma directo Geoserver)… el tema es que le pone el mismo símbolo a todo los delitos… Disculpa que séa tan pesado pero no encontramos quién nos pueda auxiliar con esta consulta.
Muchas Gracias por tu atención!
Saludos desde Rawson, Chubút, Patagonia Argentina (Y)
Hola Alberto,
Pues entonces es que todos los delitos se caracterizan por tener el mismo valor y en consecuencia el mismo símbolo. Si no no tiene sentido. Revisad bien la capa y sus atributos. Saludos!
Hola Francisco debes copiar el archivo en la carpeta style del geoserver, luego vas a el geoserver a estilos cargas el .sld, revisas el codigo que no tenga errores, le das enviar, luego buscas la capa en publicacion le agregas el estilo y si no tiene errores el codigo ella lo carga a mi me ha pasado que por un errorcillo la capa no me carga el style..
Hola Aurelio, me surge una duda con Geoserver y los estilos. Veras cree un estilo usando Atlas Styler, que siempre me ha funcionado. El estilo es simplemete dar color a unos poligonos dependiendo de valor. El problema viene, y me tiene descolocado, es que yo el archivo lo copio, y lo pego en geoserver, lo valido (no me da error), preveo la leyenda (la veo) y guardo el estilo, pero al plaicar el estilo a la capa y querer ‘verla’ es el estilo no se aplica y solo se ve el estilo por defecto. Que puede estar ocurriendo, por que ninca me ha pasado. Un saludo
Hola Francisco, Asegúrate de aplicar el estilo nuevo a la capa y que que aparezca como estilo predefinido. Otra prueba que puedes hacer es poner en la petición getmap el parámetro &style=nombredelestilo. A ver qué muestra…
Hola Aurelio, eso es lo que hago pero nada, no me sale. Otra pregunta: puedo subir un archivo a Geoserver? si es asi,como se hace?
Saludos. Gracias.
Hola Francisco, Imagino que te refieres a un archivo SLD. En Datos > estilos > Agregar un nuevo estilo y en la parte inferior «Seleccionar un archivo». Saludos.
Hola de nuevo Aurelio, si es lo que hago. Pero nada, no lo entiendo, sera que que atlas styler crea alguna linea de mas? pero es raro pq si veo la previsuliazcion de la leyenda,pero no se aplica.