این صفحه هنوز ترجمه نشده است؛ نسخهٔ انگلیسی نمایش داده میشود.
SLD editor UI components
This folder contains WPF UserControls and ViewModels for creating and editing OGC SLD 1.0.0 styles.
Overview
The SLD Editor provides a comprehensive user interface for defining and modifying SLD specifications with support for:
- Point, Line, Polygon, Text, and Raster symbolizers
- Editable single-condition OGC filters for rule-based styling
- Scale-dependent rendering (min/max scale denominators)
- Color pickers and property editors
- Live XML preview and Import/Export of SLD XML files
Namespaces: views live in
IRI.Maptor.Presentation.Wpf.Controls.Symbology.Sld; view-models live inIRI.Maptor.Presentation.Wpf.ViewModels.Symbology.
Components
ViewModels (ViewModels/Symbology/Sld/, namespace IRI.Maptor.Presentation.Wpf.ViewModels.Symbology)
Core ViewModels
SldEditorViewModel- Main ViewModel managing the entire SLD document- Manages layer name, style name, title, and abstract
- Contains collection of
RuleViewModel - Provides import/export functionality
- Commands:
AddRuleCommand,RemoveRuleCommand,MoveRuleUpCommand,MoveRuleDownCommand
RuleViewModel- Represents a single SLD Rule- Properties: Name, Title, Abstract
- Scale range: MinScale, MaxScale
- Filter support: HasFilter, FilterPropertyName, FilterOperator, FilterValue, FilterDescription
- Contains collection of symbolizers
- Commands for adding/removing symbolizers
Symbolizer ViewModels
All inherit from SymbolizerViewModelBase:
PointSymbolizerViewModel- Well-known marks (circle, square, triangle, star, cross, x)
- Fill color and opacity
- Stroke color, width, and opacity
- Size and rotation
LineSymbolizerViewModel- Stroke color, width, and opacity
- Line cap (butt, round, square)
- Line join (mitre, round, bevel)
- Dash array and dash offset
PolygonSymbolizerViewModel- Fill color and opacity
- Stroke color, width, and opacity
- Line cap and line join
TextSymbolizerViewModel- Label property name
- Font family, size, style (normal, italic, oblique), and weight (normal, bold)
- Font color
- Optional halo (outline) with radius, color, and opacity
RasterSymbolizerViewModel- Raster opacity
- Editable color map (color, quantity, label, per-entry opacity)
Views (Views/Symbology/Sld/)
Main views
SldEditorView- Main composite view showing the full editor- Style information panel (layer name, style name, title, abstract)
- Rules list with toolbar
- Tabbed interface for rule properties and symbolizers
- Live XML preview (regenerated when the tab is opened or refreshed)
SldEditorWindow- Standalone window wrappingSldEditorView- Toolbar with import/export buttons
- Status bar showing rule count and selection
Symbolizer editors
PointSymbolizerView- Edit point symbolizer propertiesLineSymbolizerView- Edit line symbolizer propertiesPolygonSymbolizerView- Edit polygon symbolizer propertiesTextSymbolizerView- Edit text symbolizer properties (with scrolling support)RasterSymbolizerView- Edit raster opacity and color-map entries
Supporting views
ScaleRangeEditorView- Edit min/max scale denominatorsSimpleFilterEditorView- Editable single-condition filter (property / operator / value)
Utilities
SymbolizerDataTemplateSelector- Selects appropriate view based on symbolizer type
Usage examples
Basic usage - standalone window
using IRI.Maptor.Presentation.Wpf.Controls.Symbology.Sld; // Views (SldEditorWindow, SldEditorView, ...)
using IRI.Maptor.Presentation.Wpf.ViewModels.Symbology; // ViewModels (SldEditorViewModel, ...)
// Create and show the SLD editor window
var editor = new SldEditorWindow();
editor.Show();
Programmatic SLD creation
using IRI.Maptor.Presentation.Wpf.ViewModels.Symbology;
using IRI.Maptor.Core.Ogc.SLD;
// Create a new SLD editor
var editor = new SldEditorViewModel
{
LayerName = "MyLayer",
StyleName = "default",
StyleTitle = "My Custom Style"
};
// Add a rule with a point symbolizer
var rule = new RuleViewModel
{
Name = "Cities",
Title = "City Markers"
};
var pointSymbolizer = new PointSymbolizerViewModel
{
WellKnownMarkType = WellKnownMark.circle,
Size = 10,
FillColor = Colors.Red,
StrokeColor = Colors.Black,
StrokeWidth = 1
};
rule.Symbolizers.Add(pointSymbolizer);
editor.Rules.Add(rule);
// Export to SLD XML
var sld = editor.ToStyledLayerDescriptor();
Loading existing SLD
using System.IO;
using IRI.Maptor.Core.Ogc.SLD;
// Deserialize existing SLD
StyledLayerDescriptor? sld = SldHelper.Parse(File.ReadAllText("style.sld"));
// Load into editor
var editor = new SldEditorViewModel();
if (sld != null)
editor.FromStyledLayerDescriptor(sld);
// Show in window
var window = new SldEditorWindow(editor);
window.Show();
Embedding in your application
<!-- In your XAML -->
<Window xmlns:sld="clr-namespace:IRI.Maptor.Presentation.Wpf.Controls.Symbology.Sld">
<Grid>
<sld:SldEditorView DataContext="{Binding YourSldEditorViewModel}"/>
</Grid>
</Window>
Features
Supported symbolizers
PointSymbolizer
- Well-known marks with fill and stroke
- Size and rotation
- Opacity control
LineSymbolizer
- Stroke properties (color, width, opacity)
- Line caps and joins
- Dash patterns
PolygonSymbolizer
- Fill and stroke properties
- Line caps and joins
TextSymbolizer
- Font properties (family, size, style, weight)
- Text color
- Halo effect (radius, color, opacity) for better readability
RasterSymbolizer
- Raster opacity
- Editable color map (color, quantity, label, per-entry opacity)
Rule features
- Scale-dependent rendering (min/max scale denominators)
- Editable single-condition OGC filter (property / operator / value); more complex loaded filters are preserved on round-trip
- Multiple symbolizers per rule
- Rule ordering (move up/down)
File operations
- Export to SLD XML file (via
SldHelper.Save) - Import from SLD XML file (via
SldHelper.Parse) - Live XML preview (via
SldHelper.Serialize) - Proper XML serialization with namespaces
Architecture
The components follow MVVM pattern:
- ViewModels inherit from
Notifierbase class (implementsINotifyPropertyChanged) - Views are UserControls with no code-behind logic (except constructor)
- Data binding for all properties
- Commands using
RelayCommandfromIRI.Maptor.Presentation.Wpf - Template selectors for dynamic view selection
Dependencies
IRI.Maptor.Core.Ogc- SLD data modelIRI.Maptor.Presentation.Wpf- Base classes and utilitiesMahApps.Metro- UI controls (ColorPicker, NumericUpDown, etc.)MahApps.Metro.IconPacks.Modern- Icons
Future enhancements
Potential improvements:
- Advanced filter builder UI (nested AND/OR, spatial/like/between operators)
- Label placement options editor
- SLD validation and error reporting
- Style preview/rendering
- Import from other style formats
- Style library/templates
Related classes
See also:
IRI.Maptor.Core.Ogc.SLDnamespace for the underlying data model (andSldHelperfor read/write)IRI.Maptor.Core.Ogcfor OGC filter classes (OgcFilter,OgcPropertyIsEqualTo, ...)IRI.Maptor.Presentation.Core.Notifierfor the MVVM base class