SlideShare a Scribd company logo
1 of 51
Creating stunning maps
with GeoServer
Mastering SLD and CSS
Ing. Andrea Aime
GeoSolutions
GeoSolutions
 Founded in Italy in late 2006
 Expertise
• Image Processing, GeoSpatial Data Fusion
• Java, Java Enterprise, C++, Python
• JPEG2000, JPIP, Advanced 2D visualization
 Supporting/Developing FOSS4G projects
 GeoServer, MapStore
 GeoNetwork, GeoNode, Ckan
 Clients
 Public Agencies
 Private Companies
 http://www.geo-solutions.it
FOSS4G 2017, Boston
August 14th-19th 2017
SLD vs CSS
 Styled Layer Descriptor
 OGC standard
 XML based, verbose, hard to hand edit
 Only showing relevant bits of the SLD
 GeoCSS
 CSS with extensions for map rendering
 Simple, Compact, designed for human beings
 Not a standard (several incompatible variants for
mapping, GeoServer one has nothing to do with
CartoDB/MapBox one)
FOSS4G 2017, Boston
August 14th-19th 2017
CSS features
 Familiar for web developers
 Compact syntax
 Symbolization triggered by “key” properties
(stroke, fill, mark, label, channel-selection)
 CQL based filtering
 Cascading keeps complex styling compact (you
just express the overrides to the base)
 Interactive editor for productive style
development
FOSS4G 2017, Boston
August 14th-19th 2017
GeoCSS in a nutshell
• Filter by attribute/env variable in CQL
• Filter by scale
• Set properties to control symbolization
• Key properties activate certain symbolization:
– mark/fill/stroke/label/raster-channels
FOSS4G 2017, Boston
August 14th-19th 2017
[admin_level < 2][@sd < 1M][@sd > 100k] {
label: name;
font-family: ‘Noto Sans’;
…
/* this is nested rule */
[special = true][@sd < 500k] {
font-weight: bold;
…
}
}
SLD equivalents
FOSS4G 2017, Boston
August 14th-19th 2017
<sld:Rule>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>admin_level</ogc:PropertyName>
<ogc:Literal>2</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<sld:MinScaleDenominator>100000</sld:MinScaleDenominator>
<sld:MaxScaleDenominator>1000000</sld:MaxScaleDenominator>
<sld:TextSymbolizer>
<sld:Label>
<ogc:PropertyName>name</ogc:PropertyName>
</sld:Label>
<sld:Font>
<sld:CssParameter name="font-family">
Noto Sans
</sld:CssParameter>
<sld:CssParameter name="font-size">10
...
</sld:TextSymbolizer>
<!–- Override would require a separate rule specifying everything again -->
</sld:Rule>
Filter
Scale
dependency
Symbolizers
and their
properties
Scale dependencies
FOSS4G 2017, Boston
August 14th-19th 2017
Types of Scale dependency
 Decide whether to symbolize based on the scale or not
 E.g., at lower scales/lower zoom levels do not show buildings
 Symbolize in a different way depending on the scale
 E.g., different thickness based on the current zoom
FOSS4G 2017, Boston
August 14th-19th 2017
Expressing scale dependency filters
 SLD:
 <MinScaleDenominator>
 <MaxScaleDenominator>
 CSS
 Legacy: [@scale > 10000000]
 GeoServer 2.12+: [@sd > 1M]
 More compact variable, more correct (it’s a scale
denominator, not a scale!)
 Compact expression of large numbers makes them readable
at a glance, e.g., 100k, 1M
FOSS4G 2017, Boston
August 14th-19th 2017
Unit of Measure
FOSS4G 2017, Boston
August 14th-19th 2017
 Useful if you have real world measures of line
thicknesses and the like
<LineSymbolizer uom="http://www.opengeospatial.org/se/units/metre">
<Stroke>
<CssParameter name="stroke">#0000FF</CssParameter>
<CssParameter name="stroke-width">5</CssParameter>
</Stroke>
</LineSymbolizer>
* {
stroke: blue;
stroke-width: 5m;
}
Transformation functions
FOSS4G 2017, Boston
August 14th-19th 2017
 OSM like, setting a different value depending on
the current scale/zoom level
 Not a linear scale mind
[class = 'highway’
and type in ('motorway’,
'motorway_link’)]
[@sd < 25M] {
stroke: #e66e89;
stroke-width: categorize(@sd,
2, 400k,
1.9, 800k,
1.4, 1.5M,
1, 3M,
0.8, 6M,
0.5);
…
 Less than 400k  2px
 [400k, 800k]  1.9px
 [800k, 1.5M]  1.4px
 [1.5M, 3M]  1
 [3M, 6M]  0.8
 Above 6M -> 0.5
Transformation functions in SLD
FOSS4G 2017, Boston
August 14th-19th 2017
<sld:LineSymbolizer>
<sld:Stroke>
<sld:CssParameter name="stroke">#e66e89</sld:CssParameter>
<sld:CssParameter name="stroke-width">
<ogc:Function name="Categorize">
<ogc:Function name="env">
<ogc:Literal>wms_scale_denominator</ogc:Literal>
</ogc:Function>
<ogc:Literal>2</ogc:Literal>
<ogc:Literal>400000</ogc:Literal>
<ogc:Literal>1.9</ogc:Literal>
<ogc:Literal>800000</ogc:Literal>
<ogc:Literal>1.4</ogc:Literal>
<ogc:Literal>1500000</ogc:Literal>
<ogc:Literal>1</ogc:Literal>
<ogc:Literal>3000000</ogc:Literal>
<ogc:Literal>0.8</ogc:Literal>
<ogc:Literal>6000000</ogc:Literal>
<ogc:Literal>0.5</ogc:Literal>
</ogc:Function>
</sld:CssParameter>
</sld:Stroke>
</sld:LineSymbolizer>
Point styling
FOSS4G 2017, Boston
August 14th-19th 2017
Simple symbol
FOSS4G 2017, Boston
August 14th-19th 2017
[type = 'alpine_hut'][@sd < 100k] {
mark: url('symbols/alpinehut.p.16.png');
}
<sld:Rule>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>alpine_hut</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<sld:MaxScaleDenominator>100000.0</sld:MaxScaleDenominator>
<sld:PointSymbolizer>
<sld:Graphic>
<sld:ExternalGraphic>
<sld:OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple"
xlink:href="symbols/alpinehut.p.16.png"/>
<sld:Format>image/png</sld:Format>
</sld:ExternalGraphic>
</sld:Graphic>
</sld:PointSymbolizer>
</sld:Rule>
Marks (SVG in this case)
FOSS4G 2017, Boston
August 14th-19th 2017
[type = 'bank'][@sd < 6k] {
mark: symbol('file://symbols/bank.svg');
:mark { fill: #734a08 };
mark-size: 14;
}
<sld:Rule>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>bank</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<sld:MaxScaleDenominator>6000.0</sld:MaxScaleDenominator>
<sld:PointSymbolizer>
<sld:Graphic>
<sld:Mark>
<sld:WellKnownName>file://symbols/bank.svg</sld:WellKnownName>
<sld:Fill>
<sld:CssParameter name="fill">#734a08</sld:CssParameter>
</sld:Fill>
</sld:Mark>
<sld:Size>14</sld:Size>
</sld:Graphic>
</sld:PointSymbolizer>
</sld:Rule>
New in
GeoServer
2.12!
Marks composition and override
FOSS4G 2017, Boston
August 14th-19th 2017
[type = 'fountain'][@sd < 6k] {
mark: symbol(circle), symbol(circle);
:nth-mark(1) { fill: #b5d0d0 };
:nth-mark(2) { fill: #576ddf };
mark-size: 10, 3;
[@sd < 3k] {
mark: symbol('file://symbols/fountain.svg');
:mark { fill: #576ddf; };
}
}
 Many other options!
 Built-in symbol names (well known marks): circle,
square, triangle, …
 From TTF fonts using the name
ttf://<fontname>#charcode
 Windbarbs, e.g.:
windbarbs://default(15)[kts]
 WKT specification, e.g.
wkt://MULTILINESTRING((-0.25 -0.25, -0.125 -0.25), (0.125 -
0.25, 0.25 -0.25), (-0.25 0.25, -0.125 0.25), (0.125 0.25, 0.25
0.25))
 See more here:
http://docs.geoserver.org/latest/en/user/styling/sld/exte
nsions/pointsymbols.html
Other mark options
FOSS4G 2017, Boston
August 14th-19th 2017
Filling polygons
FOSS4G 2017, Boston
August 14th-19th 2017
Solid filling
FOSS4G 2017, Boston
August 14th-19th 2017
* {
fill: lightgrey;
stroke: black;
stroke-width: 0.5;
}
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:CssParameter name="fill">#d3d3d3</sld:CssParameter>
</sld:Fill>
<sld:Stroke>
<sld:CssParameter name="stroke-width">0.5</sld:CssParameter>
</sld:Stroke>
</sld:PolygonSymbolizer>
Filling with repeating images
fill
FOSS4G 2017, Boston
August 14th-19th 2017
[@sd < 800k][type in ('cemetery', 'grave_yard')] {
fill: #aacbaf;
[@sd < 50k] {
[religion = 'jewish'] {
fill: #aacbaf, url('symbols/grave_yard_jewish.png');
};
[religion = 'christian'] {
fill: #aacbaf, url('symbols/grave_yard_christian.png');
};
[religion = 'INT-generic'] {
fill: #aacbaf, url('symbols/grave_yard_generic.png');
};
};
}
Filling with repeating images (SLD)
FOSS4G 2017, Boston
August 14th-19th 2017
<sld:Rule>
<ogc:Filter>
<ogc:And>
<ogc:Or>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>cemetery</ogc:Literal>
</ogc:PropertyIsEqualTo>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>grave_yard</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Or>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>religion</ogc:PropertyName>
<ogc:Literal>jewish</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:And>
</ogc:Filter>
<sld:MaxScaleDenominator>50000.0</sld:MaxScaleDenominator>
One sample rule (the Jewish religion one).
Three more needed to get the same
display as with CSS
Filling with repeating images (SLD)
FOSS4G 2017, Boston
August 14th-19th 2017
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:CssParameter name="fill">#aacbaf</sld:CssParameter>
</sld:Fill>
</sld:PolygonSymbolizer>
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:GraphicFill>
<sld:Graphic>
<sld:ExternalGraphic>
<sld:OnlineResource
xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple"
xlink:href="symbols/grave_yard_jewish.png" />
<sld:Format>image/png</sld:Format>
</sld:ExternalGraphic>
</sld:Graphic>
</sld:GraphicFill>
</sld:Fill>
</sld:PolygonSymbolizer>
</sld:Rule>
Filling with marks
FOSS4G 2017, Boston
August 14th-19th 2017
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:GraphicFill>
<sld:Graphic>
<sld:Mark>
<sld:WellKnownName>shape://times</sld:WellKnownName>
<sld:Stroke>
<sld:CssParameter name="stroke">#ADD8E6</sld:CssParameter>
</sld:Stroke>
</sld:Mark>
<sld:Size>8</sld:Size>
</sld:Graphic>
</sld:GraphicFill>
</sld:Fill>
</sld:PolygonSymbolizer>
</sld:Rule>
[@scale < 10000] {
fill: symbol('shape://times');
fill-size: 8;
:fill {
stroke: #ADD8E6;
}
}
Painting lines
FOSS4G 2017, Boston
August 14th-19th 2017
Solid lines (OSM admin borders)
FOSS4G 2017, Boston
August 14th-19th 2017
[type = 'administrative'] {
[admin_level <= 4],
[admin_level = 5 or admin_level = 6][@sd <= 400k],
[admin_level = 7 or admin_level = 8][@sd <= 200k],
[admin_level = 9 or admin_level = 10][@sd <= 100k] {
stroke: #ac46ac;
stroke-opacity: 0.4;
}
}
<!-- 5 different rules with different filters followed by this -->
<sld:LineSymbolizer>
<sld:Stroke>
<sld:CssParameter name="stroke">#ac46ac</sld:CssParameter>
<sld:CssParameter name="stroke-opacity">0.4</sld:CssParameter>
</sld:Stroke>
</sld:LineSymbolizer>
Dashes
FOSS4G 2017, Boston
August 14th-19th 2017
…
<sld:LineSymbolizer>
<sld:Stroke>
<sld:CssParameter name="stroke">#6B4900</sld:CssParameter>
<sld:CssParameter name="stroke-width">0.1</sld:CssParameter>
<sld:CssParameter name="stroke-dasharray">2 2</sld:CssParameter>
</sld:Stroke>
</sld:LineSymbolizer>
[@sd < 75k] {
stroke: #6B4900;
stroke-width: 0.1;
stroke-dasharray: 2;
}
Alternating dashes with marks
FOSS4G 2017, Boston
August 14th-19th 2017
* {
stroke: darkRed, symbol('circle');
stroke-dasharray: 10 14, 6 18;
stroke-dashoffset: 14, 0;
:stroke {
fill: darkRed;
size: 6;
}
}
 Two coordinated dashed lines
 One made with lines
 One made with circles
 The offset shifts them to have
one appear in the empty
spaces of the other
Labeling
FOSS4G 2017, Boston
August 14th-19th 2017
Vendor options
FOSS4G 2017, Boston
August 14th-19th 2017
Point labels and obstacles
FOSS4G 2017, Boston
August 14th-19th 2017
[@sd < 200k] {
label: [FULLNAME];
label-anchor: 0.5 1.0;
label-offset: 0.0 -14.0;
font-fill: #000033;
font-family: Arial;
font-size: 12;
halo-color: white;
halo-radius: 1.5;
label-priority: 200000;
label-auto-wrap: 100;
mark: url('./img/landmarks/${IMAGE}’);
mark-label-obstacle: true;
}
«FULLNAME»
attribute
Auto wrapping
label with halo.
Data driven
symbol URLLabels won’t overlap
the symbol
Line labels
FOSS4G 2017, Boston
August 14th-19th 2017
[@sd < 200k] {
label: [LABEL_NAME];
font-fill: #000000;
font-family: Arial;
font-size: 13;
font-style: normal;
font-weight: bold;
halo-color: #FFFFFF;
halo-radius: 1;
label-follow-line: true;
label-repeat: 400;
label-group: true;
label-max-displacement: 200;
}
Draw «LABEL_NAME»,
black, with white halo
Draw them along lines,
fuse segments with
same label, repeat
Polygon labels
FOSS4G 2017, Boston
August 14th-19th 2017
<sld:TextSymbolizer>
<sld:Label>
<ogc:PropertyName>FULLNAME</ogc:PropertyName>
</sld:Label>
<sld:Font>
<sld:CssParameter name="font-family">Arial</sld:CssParameter>
<sld:CssParameter name="font-size">14.0</sld:CssParameter>
<sld:CssParameter name="font-weight">bold</sld:CssParameter>
</sld:Font>
<sld:LabelPlacement>
<sld:PointPlacement>
<sld:AnchorPoint>
<sld:AnchorPointX>0.5</sld:AnchorPointX>
<sld:AnchorPointY>0.5</sld:AnchorPointY>
</sld:AnchorPoint>
</sld:PointPlacement>
</sld:LabelPlacement>
<sld:Fill>
<sld:CssParameter name="fill">#000000</sld:CssParameter>
</sld:Fill>
<sld:Priority>50000</sld:Priority>
<sld:VendorOption name="autoWrap">100</sld:VendorOption>
<sld:VendorOption name="maxDisplacement">200</sld:VendorOption>
<sld:VendorOption name="goodnessOfFit">0.9</sld:VendorOption>
</sld:TextSymbolizer>
Support for pre-laid-out labels
FOSS4G 2017, Boston
August 14th-19th 2017
Raster styling
FOSS4G 2017, Boston
August 14th-19th 2017
A DEM and a color map
FOSS4G 2016, Bonn
24nd – 24th August 2016
 SRTM from USGS
 Standard color map
 No-data natively
transparent in 2.8.x
thanks to JAI-EXT
[@sd > 75000] {
raster-channels: auto;
raster-color-map:
color-map-entry(#00BFBF, -100.0, 0)
color-map-entry(#00FF00, 920.0, 0)
color-map-entry(#00FF00, 920.0, 1.0)
color-map-entry(#FFFF00, 1940.0, 1.0)
color-map-entry(#FFFF00, 1940.0, 1.0)
color-map-entry(#FF7F00, 2960.0, 1.0)
color-map-entry(#FF7F00, 2960.0, 1.0)
color-map-entry(#BF7F3F, 3980.0, 1.0)
color-map-entry(#BF7F3F, 3980.0, 1.0)
color-map-entry(#141514, 5000.0, 1.0);
}
Contrast enhancement
http://docs.geoserver.org/latest/en/user/styling/sld-
reference/rastersymbolizer.html#contrastenhancement
FOSS4G 2017, Boston
August 14th-19th 2017
<sld:RasterSymbolizer>
<sld:ContrastEnhancement>
<sld:Normalize>
<sld:VendorOption name="algorithm">
StretchToMinimumMaximum
</sld:VendorOption>
<sld:VendorOption name="minValue">50</sld:VendorOption>
<sld:VendorOption name="maxValue">800</sld:VendorOption>
</sld:Normalize>
</sld:ContrastEnhancement>
</sld:RasterSymbolizer>
GeoServer
vendor extension
Other assorted features
FOSS4G 2017, Boston
August 14th-19th 2017
Geometry transformations
FOSS4G 2017, Boston
August 14th-19th 2017
[@scale < 10000] {
fill-geometry: [offset(the_geom, 6, -6)];
fill: darkgray;
z-index: 0;
}
[@scale < 10000] {
fill: #b3b3b3;
z-index: 1;
}
Rendering transformations
FOSS4G 2017, Boston
August 14th-19th 2017
* {
transform: ras:Contour(levels:
1100 1200 1300 1400
1500 1600 1700 1800);
stroke: black;
label: [GRAY-INDEX];
font-fill: black;
font-family: Sans;
font-size: 12;
halo-radius: 2;
halo-color: white;
label-follow-line: true
}
Masking via alpha compositing
FOSS4G 2016, Bonn
24nd – 24th August 2016
destination-in
Color blendin
FOSS4G 2017, Boston
August 14th-19th 2017
http://docs.geoserver.org/stable/user/styling/sld-extensions/composite-blend/index.html
More info at:
Z ordering
http://docs.geoserver.org/latest/en/user/styling/sld-
extensions/z-order/example.html
FOSS4G 2017, Boston
August 14th-19th 2017
[class = 'motorways'] {
stroke: #990000;
stroke-width: 8;
z-index: 0;
}
[class = 'railways'] {
stroke: #333333;
stroke-width: 3;
z-index: 2;
}
[class = 'railways'] {
stroke: #ffffff;
stroke-width: 1.5;
stroke-dasharray: 5, 5;
z-index: 3;
}
[class = 'motorways'] {
stroke: #ff6666;
stroke-width: 6;
stroke-linecap: round;
z-index: 3;
}
* {
sort-by: "z_order";
sort-by-group: "roadsGroup";
}
New in 2.12
FOSS4G 2017, Boston
August 14th-19th 2017
Autocomplete for CSS editor
 Because there are too many properties to
remember!
FOSS4G 2017, Boston
August 14th-19th 2017
No more -gt- prefix in CSS
 Vendor options used to be prefixed with “-gt-”
 But CSS is its own language, no need to mark
something as “vendor” or refer to GeoTools
 Don’t worry, old syntax still supported
FOSS4G 2017, Boston
August 14th-19th 2017
* {
...
-gt-mark-label-obstacle: true;
-gt-label-priority: 200000;
-gt-label-auto-wrap: 100;
}
* {
...
mark-label-obstacle: true;
label-priority: 200000;
label-auto-wrap: 100;
}
GeoCSS env variable expansion
 Use @var or @var(defaultValue) in place of calling the
env function
 @var -> env(‘var’)
 @var(defaultValue)  env(‘var’, defaultValue)
 Exception for @sd
 @sd -> env(‘wms_scale_denominator’)
 to get a more fluent syntax for scale dependencies
 New in 2.12
FOSS4G 2017, Boston
August 14th-19th 2017
Underline and strikethrough
 New vendor options to control underline and
strikethrough
FOSS4G 2017, Boston
August 14th-19th 2017
<VendorOption name="underlineText">true</VendorOption>
<VendorOption name="strikethroughText">true</VendorOption>
Char and word spacing
 Control how much space there is between each
char
 And between words
FOSS4G 2017, Boston
August 14th-19th 2017
<VendorOption name="charSpacing">3</VendorOption>
<VendorOption name="wordSpacing">5</VendorOption>
charSpacing = 3 wordSpacing = 5
SVG marks
 Refer to a SVG file insinde
mark/WellKnownMark
 The outline of the SVG will be extracted
 Then filled and stroked as requested
 Suitable for simple shapes
FOSS4G 2017, Boston
August 14th-19th 2017
:mark {
fill: red;
stroke: yellow;
stroke-width: 3;
stroke-opacity: 50%;
}
More QGIS SLD export work
 In QGIS 3.0 support for label exports (thanks for
OpenGeoGroep sponsoring)
 Want to see more? Help us fund the effort 
FOSS4G 2017, Boston
August 14th-19th 2017
That’s all folks!
Questions?
info@geo-solutions.it
FOSS4G 2017, Boston
August 14th-19th 2017

More Related Content

What's hot

GeoServer Developers Workshop
GeoServer Developers WorkshopGeoServer Developers Workshop
GeoServer Developers WorkshopJody Garnett
 
QGIS 실습 (총 7차시)
QGIS 실습 (총 7차시)QGIS 실습 (총 7차시)
QGIS 실습 (총 7차시)Byeong-Hyeok Yu
 
GeoServer an introduction for beginners
GeoServer an introduction for beginnersGeoServer an introduction for beginners
GeoServer an introduction for beginnersGeoSolutions
 
오픈소스 GIS 실습 (1)
오픈소스 GIS 실습 (1)오픈소스 GIS 실습 (1)
오픈소스 GIS 실습 (1)Byeong-Hyeok Yu
 
DATABASE & WEBGIS - GIS BOOTCAMP
DATABASE & WEBGIS - GIS BOOTCAMPDATABASE & WEBGIS - GIS BOOTCAMP
DATABASE & WEBGIS - GIS BOOTCAMPKevin Ng'eno
 
[공간정보연구원] 1일차 - QGIS 개요 및 기초
[공간정보연구원] 1일차 - QGIS 개요 및 기초[공간정보연구원] 1일차 - QGIS 개요 및 기초
[공간정보연구원] 1일차 - QGIS 개요 및 기초slhead1
 
QGIS 기초
QGIS 기초 QGIS 기초
QGIS 기초 slhead1
 
Enterprise GIS
Enterprise GIS Enterprise GIS
Enterprise GIS Esri
 
Metadata Matters! What it is and How to Manage it
Metadata Matters! What it is and How to Manage itMetadata Matters! What it is and How to Manage it
Metadata Matters! What it is and How to Manage itSafe Software
 
Spatial Data Infrastructure Best Practices with GeoNode
Spatial Data Infrastructure Best Practices with GeoNodeSpatial Data Infrastructure Best Practices with GeoNode
Spatial Data Infrastructure Best Practices with GeoNodeSebastian Benthall
 
지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기
지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기
지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기Byeong-Hyeok Yu
 
Using GeoServer for spatio-temporal data management with examples for MetOc a...
Using GeoServer for spatio-temporal data management with examples for MetOc a...Using GeoServer for spatio-temporal data management with examples for MetOc a...
Using GeoServer for spatio-temporal data management with examples for MetOc a...GeoSolutions
 
WMS Performance Shootout 2010
WMS Performance Shootout 2010WMS Performance Shootout 2010
WMS Performance Shootout 2010Jeff McKenna
 
MongoDB performance
MongoDB performanceMongoDB performance
MongoDB performanceMydbops
 
Introduction to the Hadoop Ecosystem with Hadoop 2.0 aka YARN (Java Serbia Ed...
Introduction to the Hadoop Ecosystem with Hadoop 2.0 aka YARN (Java Serbia Ed...Introduction to the Hadoop Ecosystem with Hadoop 2.0 aka YARN (Java Serbia Ed...
Introduction to the Hadoop Ecosystem with Hadoop 2.0 aka YARN (Java Serbia Ed...Uwe Printz
 
Be Location Intelligent with MapInfo Pro v2019
Be Location Intelligent with MapInfo Pro v2019Be Location Intelligent with MapInfo Pro v2019
Be Location Intelligent with MapInfo Pro v2019Peter Horsbøll Møller
 
Geospatial and MongoDB
Geospatial and MongoDBGeospatial and MongoDB
Geospatial and MongoDBNorberto Leite
 

What's hot (20)

GeoServer Developers Workshop
GeoServer Developers WorkshopGeoServer Developers Workshop
GeoServer Developers Workshop
 
QGIS 실습 (총 7차시)
QGIS 실습 (총 7차시)QGIS 실습 (총 7차시)
QGIS 실습 (총 7차시)
 
GeoServer an introduction for beginners
GeoServer an introduction for beginnersGeoServer an introduction for beginners
GeoServer an introduction for beginners
 
오픈소스 GIS 실습 (1)
오픈소스 GIS 실습 (1)오픈소스 GIS 실습 (1)
오픈소스 GIS 실습 (1)
 
DATABASE & WEBGIS - GIS BOOTCAMP
DATABASE & WEBGIS - GIS BOOTCAMPDATABASE & WEBGIS - GIS BOOTCAMP
DATABASE & WEBGIS - GIS BOOTCAMP
 
OpenLayer's basics
OpenLayer's basicsOpenLayer's basics
OpenLayer's basics
 
[공간정보연구원] 1일차 - QGIS 개요 및 기초
[공간정보연구원] 1일차 - QGIS 개요 및 기초[공간정보연구원] 1일차 - QGIS 개요 및 기초
[공간정보연구원] 1일차 - QGIS 개요 및 기초
 
QGIS 기초
QGIS 기초 QGIS 기초
QGIS 기초
 
Enterprise GIS
Enterprise GIS Enterprise GIS
Enterprise GIS
 
Metadata Matters! What it is and How to Manage it
Metadata Matters! What it is and How to Manage itMetadata Matters! What it is and How to Manage it
Metadata Matters! What it is and How to Manage it
 
Spatial Data Infrastructure Best Practices with GeoNode
Spatial Data Infrastructure Best Practices with GeoNodeSpatial Data Infrastructure Best Practices with GeoNode
Spatial Data Infrastructure Best Practices with GeoNode
 
지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기
지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기
지리정보체계(GIS) - [1] GIS 데이터 유형, 구조 알기
 
Using GeoServer for spatio-temporal data management with examples for MetOc a...
Using GeoServer for spatio-temporal data management with examples for MetOc a...Using GeoServer for spatio-temporal data management with examples for MetOc a...
Using GeoServer for spatio-temporal data management with examples for MetOc a...
 
WMS Performance Shootout 2010
WMS Performance Shootout 2010WMS Performance Shootout 2010
WMS Performance Shootout 2010
 
MongoDB performance
MongoDB performanceMongoDB performance
MongoDB performance
 
Introduction to the Hadoop Ecosystem with Hadoop 2.0 aka YARN (Java Serbia Ed...
Introduction to the Hadoop Ecosystem with Hadoop 2.0 aka YARN (Java Serbia Ed...Introduction to the Hadoop Ecosystem with Hadoop 2.0 aka YARN (Java Serbia Ed...
Introduction to the Hadoop Ecosystem with Hadoop 2.0 aka YARN (Java Serbia Ed...
 
Be Location Intelligent with MapInfo Pro v2019
Be Location Intelligent with MapInfo Pro v2019Be Location Intelligent with MapInfo Pro v2019
Be Location Intelligent with MapInfo Pro v2019
 
Map Reduce
Map ReduceMap Reduce
Map Reduce
 
Geospatial and MongoDB
Geospatial and MongoDBGeospatial and MongoDB
Geospatial and MongoDB
 
Geo data analytics
Geo data analyticsGeo data analytics
Geo data analytics
 

Similar to Creating Stunning Maps in GeoServer: mastering SLD and CSS styles

Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007...
Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007...Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007...
Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007...Beat Signer
 
MongoDB at the Silicon Valley iPhone and iPad Developers' Meetup
MongoDB at the Silicon Valley iPhone and iPad Developers' MeetupMongoDB at the Silicon Valley iPhone and iPad Developers' Meetup
MongoDB at the Silicon Valley iPhone and iPad Developers' MeetupMongoDB
 
Local Government Presentation
Local Government PresentationLocal Government Presentation
Local Government Presentationguestd70a6d
 
MapServer Project Status 2013
MapServer Project Status 2013MapServer Project Status 2013
MapServer Project Status 2013Jeff McKenna
 
GeoServer intro for SDI Days 2013
GeoServer intro for SDI Days 2013GeoServer intro for SDI Days 2013
GeoServer intro for SDI Days 2013GeoSolutions
 
State of the Art Web Mapping with Open Source
State of the Art Web Mapping with Open SourceState of the Art Web Mapping with Open Source
State of the Art Web Mapping with Open SourceOSCON Byrum
 
NAPSG 2010 Fire/EMS Conference - Data Sharing Basics
NAPSG 2010 Fire/EMS Conference - Data Sharing BasicsNAPSG 2010 Fire/EMS Conference - Data Sharing Basics
NAPSG 2010 Fire/EMS Conference - Data Sharing Basicspdituri
 
Serving earth observation data with GeoServer: addressing real world requirem...
Serving earth observation data with GeoServer: addressing real world requirem...Serving earth observation data with GeoServer: addressing real world requirem...
Serving earth observation data with GeoServer: addressing real world requirem...GeoSolutions
 
Trivadis TechEvent 2016 Introduction to DataStax Enterprise (DSE) Graph by Gu...
Trivadis TechEvent 2016 Introduction to DataStax Enterprise (DSE) Graph by Gu...Trivadis TechEvent 2016 Introduction to DataStax Enterprise (DSE) Graph by Gu...
Trivadis TechEvent 2016 Introduction to DataStax Enterprise (DSE) Graph by Gu...Trivadis
 
Advanced Cartographic Map Rendering In GeoServer
Advanced Cartographic Map Rendering In GeoServerAdvanced Cartographic Map Rendering In GeoServer
Advanced Cartographic Map Rendering In GeoServerGeoSolutions
 
State of GeoServer 2.12
State of GeoServer 2.12State of GeoServer 2.12
State of GeoServer 2.12GeoSolutions
 
IBM Insight 2015 - 1823 - Geospatial analytics with dashDB in the cloud
IBM Insight 2015 - 1823 - Geospatial analytics with dashDB in the cloudIBM Insight 2015 - 1823 - Geospatial analytics with dashDB in the cloud
IBM Insight 2015 - 1823 - Geospatial analytics with dashDB in the cloudTorsten Steinbach
 
060128 Galeon Rept
060128 Galeon Rept060128 Galeon Rept
060128 Galeon ReptRudolf Husar
 
SVG - Scalable Vector Graphics
SVG - Scalable Vector GraphicsSVG - Scalable Vector Graphics
SVG - Scalable Vector GraphicsShweta Sadawarte
 
CSS3: The Next Generation Of Style
CSS3: The Next Generation Of StyleCSS3: The Next Generation Of Style
CSS3: The Next Generation Of StylejbellWCT
 
Extending 3D Model Visualization with FME 2017
Extending 3D Model Visualization with FME 2017Extending 3D Model Visualization with FME 2017
Extending 3D Model Visualization with FME 2017Safe Software
 
What's New for Developers in SQL Server 2008?
What's New for Developers in SQL Server 2008?What's New for Developers in SQL Server 2008?
What's New for Developers in SQL Server 2008?ukdpe
 

Similar to Creating Stunning Maps in GeoServer: mastering SLD and CSS styles (20)

Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007...
Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007...Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007...
Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007...
 
MongoDB at the Silicon Valley iPhone and iPad Developers' Meetup
MongoDB at the Silicon Valley iPhone and iPad Developers' MeetupMongoDB at the Silicon Valley iPhone and iPad Developers' Meetup
MongoDB at the Silicon Valley iPhone and iPad Developers' Meetup
 
Local Government Presentation
Local Government PresentationLocal Government Presentation
Local Government Presentation
 
MapServer Project Status 2013
MapServer Project Status 2013MapServer Project Status 2013
MapServer Project Status 2013
 
GeoServer intro for SDI Days 2013
GeoServer intro for SDI Days 2013GeoServer intro for SDI Days 2013
GeoServer intro for SDI Days 2013
 
State of the Art Web Mapping with Open Source
State of the Art Web Mapping with Open SourceState of the Art Web Mapping with Open Source
State of the Art Web Mapping with Open Source
 
NAPSG 2010 Fire/EMS Conference - Data Sharing Basics
NAPSG 2010 Fire/EMS Conference - Data Sharing BasicsNAPSG 2010 Fire/EMS Conference - Data Sharing Basics
NAPSG 2010 Fire/EMS Conference - Data Sharing Basics
 
Serving earth observation data with GeoServer: addressing real world requirem...
Serving earth observation data with GeoServer: addressing real world requirem...Serving earth observation data with GeoServer: addressing real world requirem...
Serving earth observation data with GeoServer: addressing real world requirem...
 
Trivadis TechEvent 2016 Introduction to DataStax Enterprise (DSE) Graph by Gu...
Trivadis TechEvent 2016 Introduction to DataStax Enterprise (DSE) Graph by Gu...Trivadis TechEvent 2016 Introduction to DataStax Enterprise (DSE) Graph by Gu...
Trivadis TechEvent 2016 Introduction to DataStax Enterprise (DSE) Graph by Gu...
 
Advanced Cartographic Map Rendering In GeoServer
Advanced Cartographic Map Rendering In GeoServerAdvanced Cartographic Map Rendering In GeoServer
Advanced Cartographic Map Rendering In GeoServer
 
State of GeoServer 2.12
State of GeoServer 2.12State of GeoServer 2.12
State of GeoServer 2.12
 
Standards / XML / Validation / Transformation / ESRI
Standards / XML / Validation / Transformation / ESRIStandards / XML / Validation / Transformation / ESRI
Standards / XML / Validation / Transformation / ESRI
 
IBM Insight 2015 - 1823 - Geospatial analytics with dashDB in the cloud
IBM Insight 2015 - 1823 - Geospatial analytics with dashDB in the cloudIBM Insight 2015 - 1823 - Geospatial analytics with dashDB in the cloud
IBM Insight 2015 - 1823 - Geospatial analytics with dashDB in the cloud
 
060128 Galeon Rept
060128 Galeon Rept060128 Galeon Rept
060128 Galeon Rept
 
SVG - Scalable Vector Graphics
SVG - Scalable Vector GraphicsSVG - Scalable Vector Graphics
SVG - Scalable Vector Graphics
 
HTML5 & SVG in Cartography - Workshop
HTML5 & SVG in Cartography - WorkshopHTML5 & SVG in Cartography - Workshop
HTML5 & SVG in Cartography - Workshop
 
CSS3: The Next Generation Of Style
CSS3: The Next Generation Of StyleCSS3: The Next Generation Of Style
CSS3: The Next Generation Of Style
 
Extending 3D Model Visualization with FME 2017
Extending 3D Model Visualization with FME 2017Extending 3D Model Visualization with FME 2017
Extending 3D Model Visualization with FME 2017
 
SVGD3Angular2React
SVGD3Angular2ReactSVGD3Angular2React
SVGD3Angular2React
 
What's New for Developers in SQL Server 2008?
What's New for Developers in SQL Server 2008?What's New for Developers in SQL Server 2008?
What's New for Developers in SQL Server 2008?
 

More from GeoSolutions

MapStore 2 - The Story
MapStore 2 - The StoryMapStore 2 - The Story
MapStore 2 - The StoryGeoSolutions
 
One GeoNode, many GeoNodes
One GeoNode, many GeoNodesOne GeoNode, many GeoNodes
One GeoNode, many GeoNodesGeoSolutions
 
Introduction to GeoNode
Introduction to GeoNodeIntroduction to GeoNode
Introduction to GeoNodeGeoSolutions
 
GeoServer Feature FRENZY
GeoServer Feature FRENZYGeoServer Feature FRENZY
GeoServer Feature FRENZYGeoSolutions
 
MapStore 2, modern mashups with OL3, Leaflet and React
MapStore 2, modern mashups with OL3, Leaflet and ReactMapStore 2, modern mashups with OL3, Leaflet and React
MapStore 2, modern mashups with OL3, Leaflet and ReactGeoSolutions
 
State of GeoServer - FOSS4G 2016
State of GeoServer - FOSS4G 2016State of GeoServer - FOSS4G 2016
State of GeoServer - FOSS4G 2016GeoSolutions
 
Serving earth observation data with GeoServer: addressing real world requirem...
Serving earth observation data with GeoServer: addressing real world requirem...Serving earth observation data with GeoServer: addressing real world requirem...
Serving earth observation data with GeoServer: addressing real world requirem...GeoSolutions
 
Mastering Security with GeoServer and GeoFence - FOSS4G EU 2017
Mastering Security with GeoServer and GeoFence - FOSS4G EU 2017Mastering Security with GeoServer and GeoFence - FOSS4G EU 2017
Mastering Security with GeoServer and GeoFence - FOSS4G EU 2017GeoSolutions
 
Crunching Data In GeoServer: Mastering Rendering Transformations, WPS Process...
Crunching Data In GeoServer: Mastering Rendering Transformations, WPS Process...Crunching Data In GeoServer: Mastering Rendering Transformations, WPS Process...
Crunching Data In GeoServer: Mastering Rendering Transformations, WPS Process...GeoSolutions
 
Advanced Security with GeoServer - FOSS4G 2015
Advanced Security with GeoServer - FOSS4G 2015Advanced Security with GeoServer - FOSS4G 2015
Advanced Security with GeoServer - FOSS4G 2015GeoSolutions
 
Raster Data In GeoServer and GeoTools: Achievements, Issues And Future Develo...
Raster Data In GeoServer and GeoTools: Achievements, Issues And Future Develo...Raster Data In GeoServer and GeoTools: Achievements, Issues And Future Develo...
Raster Data In GeoServer and GeoTools: Achievements, Issues And Future Develo...GeoSolutions
 
Mapping the world beyond web mercator - FOSS4G 2015
Mapping the world beyond web mercator - FOSS4G 2015Mapping the world beyond web mercator - FOSS4G 2015
Mapping the world beyond web mercator - FOSS4G 2015GeoSolutions
 
GeoServer for Spatio-temporal Data Handling With Examples For MetOc And Remot...
GeoServer for Spatio-temporal Data Handling With Examples For MetOc And Remot...GeoServer for Spatio-temporal Data Handling With Examples For MetOc And Remot...
GeoServer for Spatio-temporal Data Handling With Examples For MetOc And Remot...GeoSolutions
 
Advanced Cartographic Map Rendering in GeoServer
Advanced Cartographic Map Rendering in GeoServerAdvanced Cartographic Map Rendering in GeoServer
Advanced Cartographic Map Rendering in GeoServerGeoSolutions
 
Spatio-temporal Data Handling With GeoServer for MetOc And Remote Sensing
Spatio-temporal Data Handling With GeoServer for MetOc And Remote SensingSpatio-temporal Data Handling With GeoServer for MetOc And Remote Sensing
Spatio-temporal Data Handling With GeoServer for MetOc And Remote SensingGeoSolutions
 
Enterprise class deployment for GeoServer and GeoWebcache Optimizing perform...
Enterprise class deployment  for GeoServer and GeoWebcache Optimizing perform...Enterprise class deployment  for GeoServer and GeoWebcache Optimizing perform...
Enterprise class deployment for GeoServer and GeoWebcache Optimizing perform...GeoSolutions
 
GeoSolutions Keynote at WebMGS 2015
GeoSolutions Keynote at WebMGS 2015GeoSolutions Keynote at WebMGS 2015
GeoSolutions Keynote at WebMGS 2015GeoSolutions
 
GeoServer beginners gwf_2015
GeoServer beginners gwf_2015GeoServer beginners gwf_2015
GeoServer beginners gwf_2015GeoSolutions
 
Geosolutions gwf-2015-v01.04
Geosolutions gwf-2015-v01.04Geosolutions gwf-2015-v01.04
Geosolutions gwf-2015-v01.04GeoSolutions
 
Geoserver introduction, GeoBusiness 2015
Geoserver introduction, GeoBusiness 2015Geoserver introduction, GeoBusiness 2015
Geoserver introduction, GeoBusiness 2015GeoSolutions
 

More from GeoSolutions (20)

MapStore 2 - The Story
MapStore 2 - The StoryMapStore 2 - The Story
MapStore 2 - The Story
 
One GeoNode, many GeoNodes
One GeoNode, many GeoNodesOne GeoNode, many GeoNodes
One GeoNode, many GeoNodes
 
Introduction to GeoNode
Introduction to GeoNodeIntroduction to GeoNode
Introduction to GeoNode
 
GeoServer Feature FRENZY
GeoServer Feature FRENZYGeoServer Feature FRENZY
GeoServer Feature FRENZY
 
MapStore 2, modern mashups with OL3, Leaflet and React
MapStore 2, modern mashups with OL3, Leaflet and ReactMapStore 2, modern mashups with OL3, Leaflet and React
MapStore 2, modern mashups with OL3, Leaflet and React
 
State of GeoServer - FOSS4G 2016
State of GeoServer - FOSS4G 2016State of GeoServer - FOSS4G 2016
State of GeoServer - FOSS4G 2016
 
Serving earth observation data with GeoServer: addressing real world requirem...
Serving earth observation data with GeoServer: addressing real world requirem...Serving earth observation data with GeoServer: addressing real world requirem...
Serving earth observation data with GeoServer: addressing real world requirem...
 
Mastering Security with GeoServer and GeoFence - FOSS4G EU 2017
Mastering Security with GeoServer and GeoFence - FOSS4G EU 2017Mastering Security with GeoServer and GeoFence - FOSS4G EU 2017
Mastering Security with GeoServer and GeoFence - FOSS4G EU 2017
 
Crunching Data In GeoServer: Mastering Rendering Transformations, WPS Process...
Crunching Data In GeoServer: Mastering Rendering Transformations, WPS Process...Crunching Data In GeoServer: Mastering Rendering Transformations, WPS Process...
Crunching Data In GeoServer: Mastering Rendering Transformations, WPS Process...
 
Advanced Security with GeoServer - FOSS4G 2015
Advanced Security with GeoServer - FOSS4G 2015Advanced Security with GeoServer - FOSS4G 2015
Advanced Security with GeoServer - FOSS4G 2015
 
Raster Data In GeoServer and GeoTools: Achievements, Issues And Future Develo...
Raster Data In GeoServer and GeoTools: Achievements, Issues And Future Develo...Raster Data In GeoServer and GeoTools: Achievements, Issues And Future Develo...
Raster Data In GeoServer and GeoTools: Achievements, Issues And Future Develo...
 
Mapping the world beyond web mercator - FOSS4G 2015
Mapping the world beyond web mercator - FOSS4G 2015Mapping the world beyond web mercator - FOSS4G 2015
Mapping the world beyond web mercator - FOSS4G 2015
 
GeoServer for Spatio-temporal Data Handling With Examples For MetOc And Remot...
GeoServer for Spatio-temporal Data Handling With Examples For MetOc And Remot...GeoServer for Spatio-temporal Data Handling With Examples For MetOc And Remot...
GeoServer for Spatio-temporal Data Handling With Examples For MetOc And Remot...
 
Advanced Cartographic Map Rendering in GeoServer
Advanced Cartographic Map Rendering in GeoServerAdvanced Cartographic Map Rendering in GeoServer
Advanced Cartographic Map Rendering in GeoServer
 
Spatio-temporal Data Handling With GeoServer for MetOc And Remote Sensing
Spatio-temporal Data Handling With GeoServer for MetOc And Remote SensingSpatio-temporal Data Handling With GeoServer for MetOc And Remote Sensing
Spatio-temporal Data Handling With GeoServer for MetOc And Remote Sensing
 
Enterprise class deployment for GeoServer and GeoWebcache Optimizing perform...
Enterprise class deployment  for GeoServer and GeoWebcache Optimizing perform...Enterprise class deployment  for GeoServer and GeoWebcache Optimizing perform...
Enterprise class deployment for GeoServer and GeoWebcache Optimizing perform...
 
GeoSolutions Keynote at WebMGS 2015
GeoSolutions Keynote at WebMGS 2015GeoSolutions Keynote at WebMGS 2015
GeoSolutions Keynote at WebMGS 2015
 
GeoServer beginners gwf_2015
GeoServer beginners gwf_2015GeoServer beginners gwf_2015
GeoServer beginners gwf_2015
 
Geosolutions gwf-2015-v01.04
Geosolutions gwf-2015-v01.04Geosolutions gwf-2015-v01.04
Geosolutions gwf-2015-v01.04
 
Geoserver introduction, GeoBusiness 2015
Geoserver introduction, GeoBusiness 2015Geoserver introduction, GeoBusiness 2015
Geoserver introduction, GeoBusiness 2015
 

Recently uploaded

The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 

Recently uploaded (20)

The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 

Creating Stunning Maps in GeoServer: mastering SLD and CSS styles

  • 1. Creating stunning maps with GeoServer Mastering SLD and CSS Ing. Andrea Aime GeoSolutions
  • 2. GeoSolutions  Founded in Italy in late 2006  Expertise • Image Processing, GeoSpatial Data Fusion • Java, Java Enterprise, C++, Python • JPEG2000, JPIP, Advanced 2D visualization  Supporting/Developing FOSS4G projects  GeoServer, MapStore  GeoNetwork, GeoNode, Ckan  Clients  Public Agencies  Private Companies  http://www.geo-solutions.it FOSS4G 2017, Boston August 14th-19th 2017
  • 3. SLD vs CSS  Styled Layer Descriptor  OGC standard  XML based, verbose, hard to hand edit  Only showing relevant bits of the SLD  GeoCSS  CSS with extensions for map rendering  Simple, Compact, designed for human beings  Not a standard (several incompatible variants for mapping, GeoServer one has nothing to do with CartoDB/MapBox one) FOSS4G 2017, Boston August 14th-19th 2017
  • 4. CSS features  Familiar for web developers  Compact syntax  Symbolization triggered by “key” properties (stroke, fill, mark, label, channel-selection)  CQL based filtering  Cascading keeps complex styling compact (you just express the overrides to the base)  Interactive editor for productive style development FOSS4G 2017, Boston August 14th-19th 2017
  • 5. GeoCSS in a nutshell • Filter by attribute/env variable in CQL • Filter by scale • Set properties to control symbolization • Key properties activate certain symbolization: – mark/fill/stroke/label/raster-channels FOSS4G 2017, Boston August 14th-19th 2017 [admin_level < 2][@sd < 1M][@sd > 100k] { label: name; font-family: ‘Noto Sans’; … /* this is nested rule */ [special = true][@sd < 500k] { font-weight: bold; … } }
  • 6. SLD equivalents FOSS4G 2017, Boston August 14th-19th 2017 <sld:Rule> <ogc:Filter> <ogc:PropertyIsEqualTo> <ogc:PropertyName>admin_level</ogc:PropertyName> <ogc:Literal>2</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:Filter> <sld:MinScaleDenominator>100000</sld:MinScaleDenominator> <sld:MaxScaleDenominator>1000000</sld:MaxScaleDenominator> <sld:TextSymbolizer> <sld:Label> <ogc:PropertyName>name</ogc:PropertyName> </sld:Label> <sld:Font> <sld:CssParameter name="font-family"> Noto Sans </sld:CssParameter> <sld:CssParameter name="font-size">10 ... </sld:TextSymbolizer> <!–- Override would require a separate rule specifying everything again --> </sld:Rule> Filter Scale dependency Symbolizers and their properties
  • 7. Scale dependencies FOSS4G 2017, Boston August 14th-19th 2017
  • 8. Types of Scale dependency  Decide whether to symbolize based on the scale or not  E.g., at lower scales/lower zoom levels do not show buildings  Symbolize in a different way depending on the scale  E.g., different thickness based on the current zoom FOSS4G 2017, Boston August 14th-19th 2017
  • 9. Expressing scale dependency filters  SLD:  <MinScaleDenominator>  <MaxScaleDenominator>  CSS  Legacy: [@scale > 10000000]  GeoServer 2.12+: [@sd > 1M]  More compact variable, more correct (it’s a scale denominator, not a scale!)  Compact expression of large numbers makes them readable at a glance, e.g., 100k, 1M FOSS4G 2017, Boston August 14th-19th 2017
  • 10. Unit of Measure FOSS4G 2017, Boston August 14th-19th 2017  Useful if you have real world measures of line thicknesses and the like <LineSymbolizer uom="http://www.opengeospatial.org/se/units/metre"> <Stroke> <CssParameter name="stroke">#0000FF</CssParameter> <CssParameter name="stroke-width">5</CssParameter> </Stroke> </LineSymbolizer> * { stroke: blue; stroke-width: 5m; }
  • 11. Transformation functions FOSS4G 2017, Boston August 14th-19th 2017  OSM like, setting a different value depending on the current scale/zoom level  Not a linear scale mind [class = 'highway’ and type in ('motorway’, 'motorway_link’)] [@sd < 25M] { stroke: #e66e89; stroke-width: categorize(@sd, 2, 400k, 1.9, 800k, 1.4, 1.5M, 1, 3M, 0.8, 6M, 0.5); …  Less than 400k  2px  [400k, 800k]  1.9px  [800k, 1.5M]  1.4px  [1.5M, 3M]  1  [3M, 6M]  0.8  Above 6M -> 0.5
  • 12. Transformation functions in SLD FOSS4G 2017, Boston August 14th-19th 2017 <sld:LineSymbolizer> <sld:Stroke> <sld:CssParameter name="stroke">#e66e89</sld:CssParameter> <sld:CssParameter name="stroke-width"> <ogc:Function name="Categorize"> <ogc:Function name="env"> <ogc:Literal>wms_scale_denominator</ogc:Literal> </ogc:Function> <ogc:Literal>2</ogc:Literal> <ogc:Literal>400000</ogc:Literal> <ogc:Literal>1.9</ogc:Literal> <ogc:Literal>800000</ogc:Literal> <ogc:Literal>1.4</ogc:Literal> <ogc:Literal>1500000</ogc:Literal> <ogc:Literal>1</ogc:Literal> <ogc:Literal>3000000</ogc:Literal> <ogc:Literal>0.8</ogc:Literal> <ogc:Literal>6000000</ogc:Literal> <ogc:Literal>0.5</ogc:Literal> </ogc:Function> </sld:CssParameter> </sld:Stroke> </sld:LineSymbolizer>
  • 13. Point styling FOSS4G 2017, Boston August 14th-19th 2017
  • 14. Simple symbol FOSS4G 2017, Boston August 14th-19th 2017 [type = 'alpine_hut'][@sd < 100k] { mark: url('symbols/alpinehut.p.16.png'); } <sld:Rule> <ogc:Filter> <ogc:PropertyIsEqualTo> <ogc:PropertyName>type</ogc:PropertyName> <ogc:Literal>alpine_hut</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:Filter> <sld:MaxScaleDenominator>100000.0</sld:MaxScaleDenominator> <sld:PointSymbolizer> <sld:Graphic> <sld:ExternalGraphic> <sld:OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="symbols/alpinehut.p.16.png"/> <sld:Format>image/png</sld:Format> </sld:ExternalGraphic> </sld:Graphic> </sld:PointSymbolizer> </sld:Rule>
  • 15. Marks (SVG in this case) FOSS4G 2017, Boston August 14th-19th 2017 [type = 'bank'][@sd < 6k] { mark: symbol('file://symbols/bank.svg'); :mark { fill: #734a08 }; mark-size: 14; } <sld:Rule> <ogc:Filter> <ogc:PropertyIsEqualTo> <ogc:PropertyName>type</ogc:PropertyName> <ogc:Literal>bank</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:Filter> <sld:MaxScaleDenominator>6000.0</sld:MaxScaleDenominator> <sld:PointSymbolizer> <sld:Graphic> <sld:Mark> <sld:WellKnownName>file://symbols/bank.svg</sld:WellKnownName> <sld:Fill> <sld:CssParameter name="fill">#734a08</sld:CssParameter> </sld:Fill> </sld:Mark> <sld:Size>14</sld:Size> </sld:Graphic> </sld:PointSymbolizer> </sld:Rule> New in GeoServer 2.12!
  • 16. Marks composition and override FOSS4G 2017, Boston August 14th-19th 2017 [type = 'fountain'][@sd < 6k] { mark: symbol(circle), symbol(circle); :nth-mark(1) { fill: #b5d0d0 }; :nth-mark(2) { fill: #576ddf }; mark-size: 10, 3; [@sd < 3k] { mark: symbol('file://symbols/fountain.svg'); :mark { fill: #576ddf; }; } }
  • 17.  Many other options!  Built-in symbol names (well known marks): circle, square, triangle, …  From TTF fonts using the name ttf://<fontname>#charcode  Windbarbs, e.g.: windbarbs://default(15)[kts]  WKT specification, e.g. wkt://MULTILINESTRING((-0.25 -0.25, -0.125 -0.25), (0.125 - 0.25, 0.25 -0.25), (-0.25 0.25, -0.125 0.25), (0.125 0.25, 0.25 0.25))  See more here: http://docs.geoserver.org/latest/en/user/styling/sld/exte nsions/pointsymbols.html Other mark options FOSS4G 2017, Boston August 14th-19th 2017
  • 18. Filling polygons FOSS4G 2017, Boston August 14th-19th 2017
  • 19. Solid filling FOSS4G 2017, Boston August 14th-19th 2017 * { fill: lightgrey; stroke: black; stroke-width: 0.5; } <sld:PolygonSymbolizer> <sld:Fill> <sld:CssParameter name="fill">#d3d3d3</sld:CssParameter> </sld:Fill> <sld:Stroke> <sld:CssParameter name="stroke-width">0.5</sld:CssParameter> </sld:Stroke> </sld:PolygonSymbolizer>
  • 20. Filling with repeating images fill FOSS4G 2017, Boston August 14th-19th 2017 [@sd < 800k][type in ('cemetery', 'grave_yard')] { fill: #aacbaf; [@sd < 50k] { [religion = 'jewish'] { fill: #aacbaf, url('symbols/grave_yard_jewish.png'); }; [religion = 'christian'] { fill: #aacbaf, url('symbols/grave_yard_christian.png'); }; [religion = 'INT-generic'] { fill: #aacbaf, url('symbols/grave_yard_generic.png'); }; }; }
  • 21. Filling with repeating images (SLD) FOSS4G 2017, Boston August 14th-19th 2017 <sld:Rule> <ogc:Filter> <ogc:And> <ogc:Or> <ogc:PropertyIsEqualTo> <ogc:PropertyName>type</ogc:PropertyName> <ogc:Literal>cemetery</ogc:Literal> </ogc:PropertyIsEqualTo> <ogc:PropertyIsEqualTo> <ogc:PropertyName>type</ogc:PropertyName> <ogc:Literal>grave_yard</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:Or> <ogc:PropertyIsEqualTo> <ogc:PropertyName>religion</ogc:PropertyName> <ogc:Literal>jewish</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:And> </ogc:Filter> <sld:MaxScaleDenominator>50000.0</sld:MaxScaleDenominator> One sample rule (the Jewish religion one). Three more needed to get the same display as with CSS
  • 22. Filling with repeating images (SLD) FOSS4G 2017, Boston August 14th-19th 2017 <sld:PolygonSymbolizer> <sld:Fill> <sld:CssParameter name="fill">#aacbaf</sld:CssParameter> </sld:Fill> </sld:PolygonSymbolizer> <sld:PolygonSymbolizer> <sld:Fill> <sld:GraphicFill> <sld:Graphic> <sld:ExternalGraphic> <sld:OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="symbols/grave_yard_jewish.png" /> <sld:Format>image/png</sld:Format> </sld:ExternalGraphic> </sld:Graphic> </sld:GraphicFill> </sld:Fill> </sld:PolygonSymbolizer> </sld:Rule>
  • 23. Filling with marks FOSS4G 2017, Boston August 14th-19th 2017 <sld:PolygonSymbolizer> <sld:Fill> <sld:GraphicFill> <sld:Graphic> <sld:Mark> <sld:WellKnownName>shape://times</sld:WellKnownName> <sld:Stroke> <sld:CssParameter name="stroke">#ADD8E6</sld:CssParameter> </sld:Stroke> </sld:Mark> <sld:Size>8</sld:Size> </sld:Graphic> </sld:GraphicFill> </sld:Fill> </sld:PolygonSymbolizer> </sld:Rule> [@scale < 10000] { fill: symbol('shape://times'); fill-size: 8; :fill { stroke: #ADD8E6; } }
  • 24. Painting lines FOSS4G 2017, Boston August 14th-19th 2017
  • 25. Solid lines (OSM admin borders) FOSS4G 2017, Boston August 14th-19th 2017 [type = 'administrative'] { [admin_level <= 4], [admin_level = 5 or admin_level = 6][@sd <= 400k], [admin_level = 7 or admin_level = 8][@sd <= 200k], [admin_level = 9 or admin_level = 10][@sd <= 100k] { stroke: #ac46ac; stroke-opacity: 0.4; } } <!-- 5 different rules with different filters followed by this --> <sld:LineSymbolizer> <sld:Stroke> <sld:CssParameter name="stroke">#ac46ac</sld:CssParameter> <sld:CssParameter name="stroke-opacity">0.4</sld:CssParameter> </sld:Stroke> </sld:LineSymbolizer>
  • 26. Dashes FOSS4G 2017, Boston August 14th-19th 2017 … <sld:LineSymbolizer> <sld:Stroke> <sld:CssParameter name="stroke">#6B4900</sld:CssParameter> <sld:CssParameter name="stroke-width">0.1</sld:CssParameter> <sld:CssParameter name="stroke-dasharray">2 2</sld:CssParameter> </sld:Stroke> </sld:LineSymbolizer> [@sd < 75k] { stroke: #6B4900; stroke-width: 0.1; stroke-dasharray: 2; }
  • 27. Alternating dashes with marks FOSS4G 2017, Boston August 14th-19th 2017 * { stroke: darkRed, symbol('circle'); stroke-dasharray: 10 14, 6 18; stroke-dashoffset: 14, 0; :stroke { fill: darkRed; size: 6; } }  Two coordinated dashed lines  One made with lines  One made with circles  The offset shifts them to have one appear in the empty spaces of the other
  • 29. Vendor options FOSS4G 2017, Boston August 14th-19th 2017
  • 30. Point labels and obstacles FOSS4G 2017, Boston August 14th-19th 2017 [@sd < 200k] { label: [FULLNAME]; label-anchor: 0.5 1.0; label-offset: 0.0 -14.0; font-fill: #000033; font-family: Arial; font-size: 12; halo-color: white; halo-radius: 1.5; label-priority: 200000; label-auto-wrap: 100; mark: url('./img/landmarks/${IMAGE}’); mark-label-obstacle: true; } «FULLNAME» attribute Auto wrapping label with halo. Data driven symbol URLLabels won’t overlap the symbol
  • 31. Line labels FOSS4G 2017, Boston August 14th-19th 2017 [@sd < 200k] { label: [LABEL_NAME]; font-fill: #000000; font-family: Arial; font-size: 13; font-style: normal; font-weight: bold; halo-color: #FFFFFF; halo-radius: 1; label-follow-line: true; label-repeat: 400; label-group: true; label-max-displacement: 200; } Draw «LABEL_NAME», black, with white halo Draw them along lines, fuse segments with same label, repeat
  • 32. Polygon labels FOSS4G 2017, Boston August 14th-19th 2017 <sld:TextSymbolizer> <sld:Label> <ogc:PropertyName>FULLNAME</ogc:PropertyName> </sld:Label> <sld:Font> <sld:CssParameter name="font-family">Arial</sld:CssParameter> <sld:CssParameter name="font-size">14.0</sld:CssParameter> <sld:CssParameter name="font-weight">bold</sld:CssParameter> </sld:Font> <sld:LabelPlacement> <sld:PointPlacement> <sld:AnchorPoint> <sld:AnchorPointX>0.5</sld:AnchorPointX> <sld:AnchorPointY>0.5</sld:AnchorPointY> </sld:AnchorPoint> </sld:PointPlacement> </sld:LabelPlacement> <sld:Fill> <sld:CssParameter name="fill">#000000</sld:CssParameter> </sld:Fill> <sld:Priority>50000</sld:Priority> <sld:VendorOption name="autoWrap">100</sld:VendorOption> <sld:VendorOption name="maxDisplacement">200</sld:VendorOption> <sld:VendorOption name="goodnessOfFit">0.9</sld:VendorOption> </sld:TextSymbolizer>
  • 33. Support for pre-laid-out labels FOSS4G 2017, Boston August 14th-19th 2017
  • 34. Raster styling FOSS4G 2017, Boston August 14th-19th 2017
  • 35. A DEM and a color map FOSS4G 2016, Bonn 24nd – 24th August 2016  SRTM from USGS  Standard color map  No-data natively transparent in 2.8.x thanks to JAI-EXT [@sd > 75000] { raster-channels: auto; raster-color-map: color-map-entry(#00BFBF, -100.0, 0) color-map-entry(#00FF00, 920.0, 0) color-map-entry(#00FF00, 920.0, 1.0) color-map-entry(#FFFF00, 1940.0, 1.0) color-map-entry(#FFFF00, 1940.0, 1.0) color-map-entry(#FF7F00, 2960.0, 1.0) color-map-entry(#FF7F00, 2960.0, 1.0) color-map-entry(#BF7F3F, 3980.0, 1.0) color-map-entry(#BF7F3F, 3980.0, 1.0) color-map-entry(#141514, 5000.0, 1.0); }
  • 36. Contrast enhancement http://docs.geoserver.org/latest/en/user/styling/sld- reference/rastersymbolizer.html#contrastenhancement FOSS4G 2017, Boston August 14th-19th 2017 <sld:RasterSymbolizer> <sld:ContrastEnhancement> <sld:Normalize> <sld:VendorOption name="algorithm"> StretchToMinimumMaximum </sld:VendorOption> <sld:VendorOption name="minValue">50</sld:VendorOption> <sld:VendorOption name="maxValue">800</sld:VendorOption> </sld:Normalize> </sld:ContrastEnhancement> </sld:RasterSymbolizer> GeoServer vendor extension
  • 37. Other assorted features FOSS4G 2017, Boston August 14th-19th 2017
  • 38. Geometry transformations FOSS4G 2017, Boston August 14th-19th 2017 [@scale < 10000] { fill-geometry: [offset(the_geom, 6, -6)]; fill: darkgray; z-index: 0; } [@scale < 10000] { fill: #b3b3b3; z-index: 1; }
  • 39. Rendering transformations FOSS4G 2017, Boston August 14th-19th 2017 * { transform: ras:Contour(levels: 1100 1200 1300 1400 1500 1600 1700 1800); stroke: black; label: [GRAY-INDEX]; font-fill: black; font-family: Sans; font-size: 12; halo-radius: 2; halo-color: white; label-follow-line: true }
  • 40. Masking via alpha compositing FOSS4G 2016, Bonn 24nd – 24th August 2016 destination-in
  • 41. Color blendin FOSS4G 2017, Boston August 14th-19th 2017 http://docs.geoserver.org/stable/user/styling/sld-extensions/composite-blend/index.html More info at:
  • 42. Z ordering http://docs.geoserver.org/latest/en/user/styling/sld- extensions/z-order/example.html FOSS4G 2017, Boston August 14th-19th 2017 [class = 'motorways'] { stroke: #990000; stroke-width: 8; z-index: 0; } [class = 'railways'] { stroke: #333333; stroke-width: 3; z-index: 2; } [class = 'railways'] { stroke: #ffffff; stroke-width: 1.5; stroke-dasharray: 5, 5; z-index: 3; } [class = 'motorways'] { stroke: #ff6666; stroke-width: 6; stroke-linecap: round; z-index: 3; } * { sort-by: "z_order"; sort-by-group: "roadsGroup"; }
  • 43. New in 2.12 FOSS4G 2017, Boston August 14th-19th 2017
  • 44. Autocomplete for CSS editor  Because there are too many properties to remember! FOSS4G 2017, Boston August 14th-19th 2017
  • 45. No more -gt- prefix in CSS  Vendor options used to be prefixed with “-gt-”  But CSS is its own language, no need to mark something as “vendor” or refer to GeoTools  Don’t worry, old syntax still supported FOSS4G 2017, Boston August 14th-19th 2017 * { ... -gt-mark-label-obstacle: true; -gt-label-priority: 200000; -gt-label-auto-wrap: 100; } * { ... mark-label-obstacle: true; label-priority: 200000; label-auto-wrap: 100; }
  • 46. GeoCSS env variable expansion  Use @var or @var(defaultValue) in place of calling the env function  @var -> env(‘var’)  @var(defaultValue)  env(‘var’, defaultValue)  Exception for @sd  @sd -> env(‘wms_scale_denominator’)  to get a more fluent syntax for scale dependencies  New in 2.12 FOSS4G 2017, Boston August 14th-19th 2017
  • 47. Underline and strikethrough  New vendor options to control underline and strikethrough FOSS4G 2017, Boston August 14th-19th 2017 <VendorOption name="underlineText">true</VendorOption> <VendorOption name="strikethroughText">true</VendorOption>
  • 48. Char and word spacing  Control how much space there is between each char  And between words FOSS4G 2017, Boston August 14th-19th 2017 <VendorOption name="charSpacing">3</VendorOption> <VendorOption name="wordSpacing">5</VendorOption> charSpacing = 3 wordSpacing = 5
  • 49. SVG marks  Refer to a SVG file insinde mark/WellKnownMark  The outline of the SVG will be extracted  Then filled and stroked as requested  Suitable for simple shapes FOSS4G 2017, Boston August 14th-19th 2017 :mark { fill: red; stroke: yellow; stroke-width: 3; stroke-opacity: 50%; }
  • 50. More QGIS SLD export work  In QGIS 3.0 support for label exports (thanks for OpenGeoGroep sponsoring)  Want to see more? Help us fund the effort  FOSS4G 2017, Boston August 14th-19th 2017