📄 v1.js
字号:
/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD * license. See http://svn.openlayers.org/trunk/openlayers/license.txt for the * full text of the license. *//** * @requires OpenLayers/Format/SLD.js *//** * Class: OpenLayers.Format.SLD.v1 * Superclass for SLD version 1 parsers. * * Inherits from: * - <OpenLayers.Format.XML> */OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, { /** * Property: namespaces * {Object} Mapping of namespace aliases to namespace URIs. */ namespaces: { sld: "http://www.opengis.net/sld", ogc: "http://www.opengis.net/ogc", xlink: "http://www.w3.org/1999/xlink", xsi: "http://www.w3.org/2001/XMLSchema-instance" }, /** * Property: defaultPrefix */ defaultPrefix: "sld", /** * Property: schemaLocation * {String} Schema location for a particular minor version. */ schemaLocation: null, /** * APIProperty: defaultSymbolizer. * {Object} A symbolizer with the SLD defaults. */ defaultSymbolizer: { fillColor: "#808080", fillOpacity: 1, strokeColor: "#000000", strokeOpacity: 1, strokeWidth: 1, pointRadius: 6 }, /** * Constructor: OpenLayers.Format.SLD.v1 * Instances of this class are not created directly. Use the * <OpenLayers.Format.SLD> constructor instead. * * Parameters: * options - {Object} An optional object whose properties will be set on * this instance. */ initialize: function(options) { OpenLayers.Format.XML.prototype.initialize.apply(this, [options]); }, /** * Method: read * * Parameters: * data - {DOMElement} An SLD document element. * * Returns: * {Object} An object representing the SLD. */ read: function(data) { var sld = { namedLayers: {} }; this.readChildNodes(data, sld); return sld; }, /** * Property: readers * Contains public functions, grouped by namespace prefix, that will * be applied when a namespaced node is found matching the function * name. The function will be applied in the scope of this parser * with two arguments: the node being read and a context object passed * from the parent. */ readers: { "sld": { "StyledLayerDescriptor": function(node, sld) { sld.version = node.getAttribute("version"); this.readChildNodes(node, sld); }, "Name": function(node, obj) { obj.name = this.getChildValue(node); }, "Title": function(node, obj) { obj.title = this.getChildValue(node); }, "Abstract": function(node, obj) { obj.description = this.getChildValue(node); }, "NamedLayer": function(node, sld) { var layer = { userStyles: [], namedStyles: [] }; this.readChildNodes(node, layer); // give each of the user styles this layer name for(var i=0; i<layer.userStyles.length; ++i) { layer.userStyles[i].layerName = layer.name; } sld.namedLayers[layer.name] = layer; }, "NamedStyle": function(node, layer) { layer.namedStyles.push( this.getChildName(node.firstChild) ); }, "UserStyle": function(node, layer) { var style = new OpenLayers.Style(this.defaultSymbolizer); this.readChildNodes(node, style); layer.userStyles.push(style); }, "IsDefault": function(node, style) { if(this.getChildValue(node) == "1") { style.isDefault = true; } }, "FeatureTypeStyle": function(node, style) { // OpenLayers doesn't have a place for FeatureTypeStyle // Name, Title, Abstract, FeatureTypeName, or // SemanticTypeIdentifier so, we make a temporary object // and later just use the Rule(s). var obj = { rules: [] }; this.readChildNodes(node, obj); style.rules = obj.rules; }, "Rule": function(node, obj) { var rule = new OpenLayers.Rule(); this.readChildNodes(node, rule); obj.rules.push(rule); }, "ElseFilter": function(node, rule) { rule.elseFilter = true; }, "MinScaleDenominator": function(node, rule) { rule.minScaleDenominator = this.getChildValue(node); }, "MaxScaleDenominator": function(node, rule) { rule.maxScaleDenominator = this.getChildValue(node); }, "LineSymbolizer": function(node, rule) { // OpenLayers doens't do painter's order, instead we extend var symbolizer = rule.symbolizer["Line"] || {}; this.readChildNodes(node, symbolizer); // in case it didn't exist before rule.symbolizer["Line"] = symbolizer; }, "PolygonSymbolizer": function(node, rule) { // OpenLayers doens't do painter's order, instead we extend var symbolizer = rule.symbolizer["Polygon"] || {}; this.readChildNodes(node, symbolizer); // in case it didn't exist before rule.symbolizer["Polygon"] = symbolizer; }, "PointSymbolizer": function(node, rule) { // OpenLayers doens't do painter's order, instead we extend var symbolizer = rule.symbolizer["Point"] || {}; this.readChildNodes(node, symbolizer); // in case it didn't exist before rule.symbolizer["Point"] = symbolizer; }, "Stroke": function(node, symbolizer) { this.readChildNodes(node, symbolizer); }, "Fill": function(node, symbolizer) { this.readChildNodes(node, symbolizer); }, "CssParameter": function(node, symbolizer) { var cssProperty = node.getAttribute("name"); var symProperty = this.cssMap[cssProperty]; if(symProperty) { // Limited support for parsing of OGC expressions var value = this.readOgcExpression(node); // always string, could be an empty string if(value) { symbolizer[symProperty] = value; } } }, "Graphic": function(node, symbolizer) { var graphic = {}; // painter's order not respected here, clobber previous with next this.readChildNodes(node, graphic); // directly properties with names that match symbolizer properties var properties = [ "strokeColor", "strokeWidth", "strokeOpacity", "strokeLinecap", "fillColor", "fillOpacity", "graphicName", "rotation", "graphicFormat" ]; var prop, value; for(var i=0; i<properties.length; ++i) { prop = properties[i]; value = graphic[prop]; if(value != undefined) { symbolizer[prop] = value; } } // set other generic properties with specific graphic property names if(graphic.opacity != undefined) { symbolizer.graphicOpacity = graphic.opacity; } if(graphic.size != undefined) { symbolizer.pointRadius = graphic.size; } if(graphic.href != undefined) { symbolizer.externalGraphic = graphic.href; } }, "ExternalGraphic": function(node, graphic) { this.readChildNodes(node, graphic); }, "Mark": function(node, graphic) { this.readChildNodes(node, graphic); }, "WellKnownName": function(node, graphic) { graphic.graphicName = this.getChildValue(node); }, "Opacity": function(node, obj) { // No support for parsing of OGC expressions var opacity = this.getChildValue(node); // always string, could be empty string if(opacity) { obj.opacity = opacity; } }, "Size": function(node, obj) { // No support for parsing of OGC expressions var size = this.getChildValue(node); // always string, could be empty string if(size) { obj.size = size; } }, "Rotation": function(node, obj) { // No support for parsing of OGC expressions var rotation = this.getChildValue(node); // always string, could be empty string if(rotation) { obj.rotation = rotation; } }, "OnlineResource": function(node, obj) { obj.href = this.getAttributeNS( node, this.namespaces.xlink, "href" ); }, "Format": function(node, graphic) { graphic.graphicFormat = this.getChildValue(node); } }, "ogc": { "Filter": function(node, rule) { // Filters correspond to subclasses of OpenLayers.Filter. // Since they contain information we don't persist, we // create a temporary object and then pass on the filter // (ogc:Filter) to the parent rule (sld:Rule). var obj = { fids: [], filters: [] }; this.readChildNodes(node, obj); if(obj.fids.length > 0) { rule.filter = new OpenLayers.Filter.FeatureId({ fids: obj.fids }); } else if(obj.filters.length > 0) { rule.filter = obj.filters[0]; } }, "FeatureId": function(node, obj) { var fid = node.getAttribute("fid"); if(fid) { obj.fids.push(fid); } }, "And": function(node, obj) { var filter = new OpenLayers.Filter.Logical({ type: OpenLayers.Filter.Logical.AND }); this.readChildNodes(node, filter); obj.filters.push(filter); }, "Or": function(node, obj) { var filter = new OpenLayers.Filter.Logical({ type: OpenLayers.Filter.Logical.OR }); this.readChildNodes(node, filter); obj.filters.push(filter); }, "Not": function(node, obj) { var filter = new OpenLayers.Filter.Logical({ type: OpenLayers.Filter.Logical.NOT }); this.readChildNodes(node, filter); obj.filters.push(filter); }, "PropertyIsEqualTo": function(node, obj) { var filter = new OpenLayers.Filter.Comparison({ type: OpenLayers.Filter.Comparison.EQUAL_TO }); this.readChildNodes(node, filter); obj.filters.push(filter); }, "PropertyIsNotEqualTo": function(node, obj) { var filter = new OpenLayers.Filter.Comparison({ type: OpenLayers.Filter.Comparison.NOT_EQUAL_TO }); this.readChildNodes(node, filter); obj.filters.push(filter); }, "PropertyIsLessThan": function(node, obj) { var filter = new OpenLayers.Filter.Comparison({ type: OpenLayers.Filter.Comparison.LESS_THAN }); this.readChildNodes(node, filter); obj.filters.push(filter); }, "PropertyIsGreaterThan": function(node, obj) { var filter = new OpenLayers.Filter.Comparison({ type: OpenLayers.Filter.Comparison.GREATER_THAN }); this.readChildNodes(node, filter); obj.filters.push(filter); }, "PropertyIsLessThanOrEqualTo": function(node, obj) { var filter = new OpenLayers.Filter.Comparison({ type: OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO }); this.readChildNodes(node, filter); obj.filters.push(filter); }, "PropertyIsGreaterThanOrEqualTo": function(node, obj) { var filter = new OpenLayers.Filter.Comparison({ type: OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO }); this.readChildNodes(node, filter); obj.filters.push(filter); }, "PropertyIsBetween": function(node, obj) { var filter = new OpenLayers.Filter.Comparison({ type: OpenLayers.Filter.Comparison.BETWEEN }); this.readChildNodes(node, filter); obj.filters.push(filter); }, "PropertyIsLike": function(node, obj) { var filter = new OpenLayers.Filter.Comparison({ type: OpenLayers.Filter.Comparison.LIKE }); this.readChildNodes(node, filter); var wildCard = node.getAttribute("wildCard"); var singleChar = node.getAttribute("singleChar"); var esc = node.getAttribute("escape"); filter.value2regex(wildCard, singleChar, esc); obj.filters.push(filter); }, "Literal": function(node, obj) { obj.value = this.getChildValue(node); }, "PropertyName": function(node, filter) { filter.property = this.getChildValue(node); }, "LowerBoundary": function(node, filter) { filter.lowerBoundary = this.readOgcExpression(node); },
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -