konova/templates/map/client/libs/netgis/SLD.js

79 lines
1.9 KiB
JavaScript
Raw Normal View History

var netgis = netgis || {};
//NOTE: https://portal.ogc.org/files/?artifact_id=22364 p. 53
netgis.SLD =
(
function ()
{
"use strict";
// Variables
// Methods
var read = function( data, client )
{
var parser = new DOMParser();
var xml = parser.parseFromString( data, "text/xml" );
var style = {};
// Layers
var layers = xml.getElementsByTagName( "NamedLayer" );
for ( var i = 0; i < layers.length; i++ )
{
var layer = layers[ i ];
var name = layer.getElementsByTagName( "se:Name" )[ 0 ].innerHTML;
console.info( "Layer:", name );
// Type Styles
var typestyles = layer.getElementsByTagName( "se:FeatureTypeStyle" );
for ( var j = 0; j < typestyles.length; j++ )
{
var typestyle = typestyles[ j ];
// Rules
var rules = typestyle.getElementsByTagName( "se:Rule" );
for ( var k = 0; k < rules.length; k++ )
{
var rule = rules[ k ];
var rulename = rule.getElementsByTagName( "se:Name" )[ 0 ].innerHTML;
console.info( "Rule:", rulename );
// Polygon Symbolizer
var polysymbol = rule.getElementsByTagName( "se:PolygonSymbolizer" )[ 0 ];
var polyfill = polysymbol.getElementsByTagName( "se:Fill" )[ 0 ];
var polystroke = polysymbol.getElementsByTagName( "se:Stroke" )[ 0 ];
style[ "polygon" ] =
{
//fill: polyfill.getElementsByTagName( "se:SvgParameter" )
fill: polyfill.querySelector( "[name='fill']" ).innerHTML,
stroke: polystroke.querySelector( "[name='stroke']" ).innerHTML,
strokeWidth: Number.parseFloat( polystroke.querySelector( "[name='stroke-width']" ).innerHTML )
};
}
}
}
console.info( "SLD:", style );
client.invoke( netgis.Events.MAP_UPDATE_STYLE, style );
return style;
};
// Public Interface
var iface =
{
read: read
};
return iface;
}
)();