Parsing an OpenLayers Style
Parsing an OpenLayers style requires the same steps as parsing SLDs.
We will again use the readStyle and writeStyle methods of the parsers. However, this time, we will use
the geostyler-openlayers-parser and do not use an SLD string, but rather an OpenLayers style object.
The installation of the geostyler-openlayers-parser was already done in a previous chapter via
npm i geostyler-openlayers-parser
Next, we have to import the parser
import OlParser from 'geostyler-openlayers-parser';
and instantiate it.
const olParser = new OlParser();
Now, we just need an OpenLayers style that should be parsed
import { Stroke, Fill, Style, Circle } from 'ol/style';
const olStyle = new Style({
stroke: new Stroke({
color: 'rgba(255, 255, 255, 1.0)',
width: 1
}),
fill: new Fill({
color: 'rgba(0, 0, 0, 1)'
}),
image: new Circle({
fill: new Fill({
color: 'rgba(255, 0, 0, 1.0)'
}),
radius: 5
})
});
This can now be parsed via readStyle and writeStyle
olParser.readStyle(olStyle)
.then((geostylerStyle) => {
// Run your actions with the read style here, e.g.
console.log(geostylerStyle.output);
});
olParser.writeStyle(geostylerStyle)
.then((olStyle) => {
// Run your actions with the written style here, e.g.
console.log(JSON.stringify(olStyle.output));
});
For our application, this should work as follows:
import React, { useState, useEffect } from 'react';
import { Stroke, Fill, Style, Circle } from 'ol/style';
import OlParser from 'geostyler-openlayers-parser';
const olParser = new OlParser();
function App() {
const originalOlStyle = new Style({
stroke: new Stroke({
color: 'rgba(255, 255, 255, 1.0)',
width: 1
}),
fill: new Fill({
color: 'rgba(0, 0, 0, 1)'
}),
image: new Circle({
fill: new Fill({
color: 'rgba(255, 0, 0, 1.0)'
}),
radius: 5
})
});
const [olStyle, setOlStyle] = useState(originalOlStyle);
const [style, setStyle] = useState();
useEffect(() => {
olParser.readStyle(olStyle)
.then((gsStyle) => {
setStyle(gsStyle.output);
});
}, [olStyle]);
useEffect(() => {
if (!style) {
return;
}
olParser.writeStyle(style)
.then((newOlStyle) => {
setOlStyle(newOlStyle.output);
});
}, [style]);
return (
<div>
<p>
{JSON.stringify(originalOlStyle)}
</p>
<p>
{JSON.stringify(style)}
</p>
<p>
{JSON.stringify(olStyle)}
</p>
</div>
);
}
export default App;
The first section shows the original OpenLayers style. The second section shows the parsed OpenLayers style as GeoStyler style. The third section shows the written OpenLayers style.
