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

Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판BJ Jang
 
GeoServer Ecosystem 2018
GeoServer Ecosystem 2018GeoServer Ecosystem 2018
GeoServer Ecosystem 2018Jody Garnett
 
오픈소스 GIS 교육 - PostGIS
오픈소스 GIS 교육 - PostGIS오픈소스 GIS 교육 - PostGIS
오픈소스 GIS 교육 - PostGISJungHwan Yun
 
PostGIS and Spatial SQL
PostGIS and Spatial SQLPostGIS and Spatial SQL
PostGIS and Spatial SQLTodd Barr
 
MongoDB + GeoServer
MongoDB + GeoServerMongoDB + GeoServer
MongoDB + GeoServerMongoDB
 
Advanced Security With GeoServer
Advanced Security With GeoServerAdvanced Security With GeoServer
Advanced Security With GeoServerGeoSolutions
 
QGIS를 활용한 공간분석 입문 ver.1.0
QGIS를 활용한 공간분석 입문 ver.1.0QGIS를 활용한 공간분석 입문 ver.1.0
QGIS를 활용한 공간분석 입문 ver.1.0Byeong-Hyeok Yu
 
공간정보거점대학 PostGIS 고급과정
공간정보거점대학 PostGIS 고급과정공간정보거점대학 PostGIS 고급과정
공간정보거점대학 PostGIS 고급과정JungHwan Yun
 
GeoMesa on Apache Spark SQL with Anthony Fox
GeoMesa on Apache Spark SQL with Anthony FoxGeoMesa on Apache Spark SQL with Anthony Fox
GeoMesa on Apache Spark SQL with Anthony FoxDatabricks
 
QGIS 기초
QGIS 기초 QGIS 기초
QGIS 기초 slhead1
 
QGIS 고급 및 PyQGIS - 김기웅, 임영현
QGIS 고급 및 PyQGIS - 김기웅, 임영현 QGIS 고급 및 PyQGIS - 김기웅, 임영현
QGIS 고급 및 PyQGIS - 김기웅, 임영현 SANGHEE SHIN
 
LX 공간정보아카데미 PostGIS 강의자료
LX 공간정보아카데미 PostGIS 강의자료LX 공간정보아카데미 PostGIS 강의자료
LX 공간정보아카데미 PostGIS 강의자료JungHwan Yun
 
공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습
 공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습 공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습
공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습HaNJiN Lee
 
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
 
State of OpenGXT: 오픈소스 공간분석엔진
State of OpenGXT: 오픈소스 공간분석엔진State of OpenGXT: 오픈소스 공간분석엔진
State of OpenGXT: 오픈소스 공간분석엔진MinPa Lee
 
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
 
MongoDB at Scale
MongoDB at ScaleMongoDB at Scale
MongoDB at ScaleMongoDB
 
공간정보연구원 PostGIS 강의교재
공간정보연구원 PostGIS 강의교재공간정보연구원 PostGIS 강의교재
공간정보연구원 PostGIS 강의교재JungHwan Yun
 
PostGIS - National Education Center for GIS: Open Source GIS
PostGIS - National Education Center for GIS: Open Source GIS PostGIS - National Education Center for GIS: Open Source GIS
PostGIS - National Education Center for GIS: Open Source GIS MinPa Lee
 

What's hot (20)

GeoServer 기초
GeoServer 기초GeoServer 기초
GeoServer 기초
 
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판
 
GeoServer Ecosystem 2018
GeoServer Ecosystem 2018GeoServer Ecosystem 2018
GeoServer Ecosystem 2018
 
오픈소스 GIS 교육 - PostGIS
오픈소스 GIS 교육 - PostGIS오픈소스 GIS 교육 - PostGIS
오픈소스 GIS 교육 - PostGIS
 
PostGIS and Spatial SQL
PostGIS and Spatial SQLPostGIS and Spatial SQL
PostGIS and Spatial SQL
 
MongoDB + GeoServer
MongoDB + GeoServerMongoDB + GeoServer
MongoDB + GeoServer
 
Advanced Security With GeoServer
Advanced Security With GeoServerAdvanced Security With GeoServer
Advanced Security With GeoServer
 
QGIS를 활용한 공간분석 입문 ver.1.0
QGIS를 활용한 공간분석 입문 ver.1.0QGIS를 활용한 공간분석 입문 ver.1.0
QGIS를 활용한 공간분석 입문 ver.1.0
 
공간정보거점대학 PostGIS 고급과정
공간정보거점대학 PostGIS 고급과정공간정보거점대학 PostGIS 고급과정
공간정보거점대학 PostGIS 고급과정
 
GeoMesa on Apache Spark SQL with Anthony Fox
GeoMesa on Apache Spark SQL with Anthony FoxGeoMesa on Apache Spark SQL with Anthony Fox
GeoMesa on Apache Spark SQL with Anthony Fox
 
QGIS 기초
QGIS 기초 QGIS 기초
QGIS 기초
 
QGIS 고급 및 PyQGIS - 김기웅, 임영현
QGIS 고급 및 PyQGIS - 김기웅, 임영현 QGIS 고급 및 PyQGIS - 김기웅, 임영현
QGIS 고급 및 PyQGIS - 김기웅, 임영현
 
LX 공간정보아카데미 PostGIS 강의자료
LX 공간정보아카데미 PostGIS 강의자료LX 공간정보아카데미 PostGIS 강의자료
LX 공간정보아카데미 PostGIS 강의자료
 
공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습
 공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습 공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습
공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습
 
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...
 
State of OpenGXT: 오픈소스 공간분석엔진
State of OpenGXT: 오픈소스 공간분석엔진State of OpenGXT: 오픈소스 공간분석엔진
State of OpenGXT: 오픈소스 공간분석엔진
 
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...
 
MongoDB at Scale
MongoDB at ScaleMongoDB at Scale
MongoDB at Scale
 
공간정보연구원 PostGIS 강의교재
공간정보연구원 PostGIS 강의교재공간정보연구원 PostGIS 강의교재
공간정보연구원 PostGIS 강의교재
 
PostGIS - National Education Center for GIS: Open Source GIS
PostGIS - National Education Center for GIS: Open Source GIS PostGIS - National Education Center for GIS: Open Source GIS
PostGIS - National Education Center for GIS: Open Source GIS
 

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

GeoServer, an introduction for beginners
GeoServer, an introduction for beginnersGeoServer, an introduction for beginners
GeoServer, an introduction for beginnersGeoSolutions
 
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
 

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

GeoServer, an introduction for beginners
GeoServer, an introduction for beginnersGeoServer, an introduction for beginners
GeoServer, an introduction for beginners
 
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
 

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
 
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
 
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
 
Introduzione a GeoServer ed ai servizi OGC
Introduzione a GeoServer ed ai servizi OGCIntroduzione a GeoServer ed ai servizi OGC
Introduzione a GeoServer ed ai servizi OGCGeoSolutions
 
Raster data in GeoServer and GeoTools: Achievements, issues and future devel...
Raster data in GeoServer and GeoTools:  Achievements, issues and future devel...Raster data in GeoServer and GeoTools:  Achievements, issues and future devel...
Raster data in GeoServer and GeoTools: Achievements, issues and future devel...GeoSolutions
 

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
 
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
 
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
 
Introduzione a GeoServer ed ai servizi OGC
Introduzione a GeoServer ed ai servizi OGCIntroduzione a GeoServer ed ai servizi OGC
Introduzione a GeoServer ed ai servizi OGC
 
Raster data in GeoServer and GeoTools: Achievements, issues and future devel...
Raster data in GeoServer and GeoTools:  Achievements, issues and future devel...Raster data in GeoServer and GeoTools:  Achievements, issues and future devel...
Raster data in GeoServer and GeoTools: Achievements, issues and future devel...
 

Recently uploaded

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
 
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
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
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
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 

Recently uploaded (20)

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
 
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
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
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
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 

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