public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { string text = string.Empty; FeatureTemplate ft = value as FeatureTemplate; if (ft != null) { if (ft.DrawingTool != FeatureEditTool.None) { if (ft.DrawingTool == FeatureEditTool.Point) { text = string.Format(Resources.Strings.AddPointInstructions, ft.Name); } else { text = string.Format(Resources.Strings.AddShapeInstructions, ft.Name); } } else { text = ft.Name; } } return(text); }
private void AddRecord_Click(object sender, RoutedEventArgs e) { // Create a new Graphic (represents a record in the standalone table) var graphic = new Graphic(); //use PrototypeAttributes from the layer templates FeatureTemplate featureTemplate = null; if (_featureLayerTable.LayerInfo.Templates != null && _featureLayerTable.LayerInfo.Templates.Count > 0) { featureTemplate = _featureLayerTable.LayerInfo.Templates.FirstOrDefault().Value; } if (featureTemplate != null && featureTemplate.PrototypeAttributes != null) { foreach (var item in featureTemplate.PrototypeAttributes) { graphic.Attributes[item.Key] = item.Value; } } // Set a specific attribute value graphic.Attributes["CNTRY_NAME"] = DateTime.Now.ToString(); // Add the Graphic to the FeatureLayer _featureLayerTable.Graphics.Add(graphic); // Call Save Edits (will raise event handlers registered in the constructor). _featureLayerTable.SaveEdits(); }
// FeatureTemplate internal static Dictionary <string, object> ToDictionary(this FeatureTemplate template) { Dictionary <string, object> dictionary = new Dictionary <string, object>(); if (!string.IsNullOrEmpty(template.Name)) { dictionary.Add("name", template.Name); } if (!string.IsNullOrEmpty(template.Description)) { dictionary.Add("description", template.Description); } // CHECK TOSTRING VALUE dictionary.Add("drawingTool", "esriFeatureEditTool" + template.DrawingTool.ToString()); if (template.PrototypeGeometry != null || template.PrototypeAttributes != null) { Dictionary <string, object> prototype = new Dictionary <string, object>(); if (template.PrototypeGeometry != null) { prototype.Add("geometry", JsonSerializer.Serialize <Geometry>(template.PrototypeGeometry)); } if (template.PrototypeAttributes != null) { prototype.Add("attributes", template.PrototypeAttributes); } dictionary.Add("prototype", prototype); } return(dictionary); }
private static SymbolTemplate GetSymbolTemplate(Editor editor, Symbol symbol, object featureTypeID, FeatureTemplate template, string displayName, string description) { object type = null; if (template != null) { type = template; } else if (featureTypeID != null) { type = featureTypeID; } SymbolTemplate symbolTemplate = new SymbolTemplate() { TypeID = type, FeatureTemplate = template, Symbol = symbol, Name = displayName, Description = description, Editor = editor }; return(symbolTemplate); }
internal TemplatePickedEventArgs(FeatureLayer layer, FeatureType featureType, FeatureTemplate featureTemplate) { Layer = layer; FeatureType = featureType; FeatureTemplate = featureTemplate; }
public virtual bool LoadFromBin(ByteArray ba) { if (ba == null) { return(false); } try { var size = ba.NextInt_HighFirst(); // 使用Model目标的数据文件均与相应的原数据文件兼容,所以这里只讨论高位在前的情况 id2tag = new string[size]; tag2id = new Dictionary <string, int>(size); for (int i = 0; i < size; i++) { id2tag[i] = ba.NextUTFStr(true); tag2id[id2tag[i]] = i; } var ffs = new FeatureFunction[ba.NextInt_HighFirst()]; for (int i = 0; i < ffs.Length; i++) { ffs[i] = new FeatureFunction(); ffs[i].Load(ba); } _ffTrie.Load(ba, ffs, true); size = ba.NextInt_HighFirst(); _ftList = new List <FeatureTemplate>(size); for (int i = 0; i < size; i++) { var ft = new FeatureTemplate(); ft.Load(ba); _ftList.Add(ft); } size = ba.NextInt_HighFirst(); if (size == 0) { return(true); } _matrix = new double[size][]; for (int i = 0; i < size; i++) { _matrix[i] = new double[size]; for (int j = 0; j < size; j++) { _matrix[i][j] = ba.NextDouble_HighFirst(); } } return(true); } catch (Exception e) { return(false); } }
private static SymbolTemplate GetSymbolTemplate(Editor editor, Symbol symbol, object featureTypeID, FeatureTemplate template, string displayName, string description) { object type = null; if (featureTypeID != null && template != null && !string.IsNullOrEmpty(template.Name)) type = new object[] { featureTypeID, template.Name }; else if (featureTypeID != null) type = featureTypeID; else if (template != null) type = template.Name; SymbolTemplate symbolTemplate = new SymbolTemplate() { TypeID = type, FeatureTemplate = template, Symbol = symbol, Name = displayName, Description = description, Editor = editor }; return symbolTemplate; }
private void setTemplates() { List<TemplateGroup> templateGroups = new List<TemplateGroup>(); if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this)) { TemplateGroup group = new TemplateGroup() { Name = "LayerID", Templates = new List<SymbolTemplate>() }; SimpleFillSymbol fillSymbol = new SimpleFillSymbol() { Fill = new SolidColorBrush(Colors.Black) }; group.Templates.Add(GetSymbolTemplate(new Editor(), fillSymbol, null, null, "Template Name", string.Empty)); templateGroups.Add(group); } else { if (Map == null) return; foreach (FeatureLayer layer in GetLayers(LayerIDs, Map.Layers)) { if (!IsTemplatable(layer)) continue; if (layer.LayerInfo.HasM || layer.LayerInfo.HasZ && !layer.LayerInfo.EnableZDefaults) continue; Editor editor = new Editor() { AutoComplete = AutoComplete, AutoSelect = AutoSelect, ContinuousMode = Continuous, Freehand = Freehand, GeometryServiceUrl = GeometryServiceUrl, GeometryServiceToken = GeometryServiceToken, ProxyUrl = ProxyUrl, LayerIDs = new string[] { layer.ID }, Map = Map, }; editor.EditorActivated += Editor_EditorActivated; editor.EditCompleted += Editor_EditCompleted; TemplateGroup group = new TemplateGroup(); group.Name = layer.ID; group.Layer = layer; group.Templates = new List<SymbolTemplate>(); if (layer.Renderer != null) { Symbol defaultSymbol = layer.Renderer.GetSymbol(null); if (layer.LayerInfo.FeatureTypes != null && layer.LayerInfo.FeatureTypes.Count > 0) { foreach (KeyValuePair<object, FeatureType> type in layer.LayerInfo.FeatureTypes) { if (type.Value != null && type.Value.Templates != null && type.Value.Templates.Count > 0) { foreach (KeyValuePair<string, FeatureTemplate> featureTemplate in type.Value.Templates) { string name = type.Value.Name; if (type.Value.Templates.Count > 1) name = string.Format("{0}-{1}", type.Value.Name, featureTemplate.Value.Name); Symbol symbol = featureTemplate.Value.GetSymbol(layer.Renderer) ?? defaultSymbol; SymbolTemplate symbolTemplate = GetSymbolTemplate(editor, symbol, type.Value.Id, featureTemplate.Value, name, featureTemplate.Value.Description); if (symbol != null) group.Templates.Add(symbolTemplate); } } } if (AlwaysDisplayDefaultTemplates) { if (defaultSymbol != null) { var defaultLabel = layer.Renderer is UniqueValueRenderer ? (layer.Renderer as UniqueValueRenderer).DefaultLabel : (layer.Renderer is UniqueValueMultipleFieldsRenderer) ? (layer.Renderer as UniqueValueMultipleFieldsRenderer).DefaultLabel : null; group.Templates.Add(GetSymbolTemplate(editor, defaultSymbol, null, null, defaultLabel ?? layer.ID, null)); } } } else if (layer.LayerInfo.Templates != null && layer.LayerInfo.Templates.Count > 0) { foreach (KeyValuePair<string, FeatureTemplate> featureTemplate in layer.LayerInfo.Templates) { Symbol symbol = featureTemplate.Value.GetSymbol(layer.Renderer) ?? defaultSymbol; SymbolTemplate symbolTemplate = GetSymbolTemplate(editor, symbol, null, featureTemplate.Value, featureTemplate.Value.Name, featureTemplate.Value.Description); if (symbol != null) group.Templates.Add(symbolTemplate); } } else if (layer.Renderer is UniqueValueRenderer || layer.Renderer is UniqueValueMultipleFieldsRenderer) { var uvr = layer.Renderer as UniqueValueRenderer; if (uvr != null) { foreach (var info in uvr.Infos) { var prototypeAttributes = new Dictionary<string, object>(); prototypeAttributes[uvr.Field] = info.Value; var featureTemplate = new FeatureTemplate(info.Label, info.Description, null, prototypeAttributes, FeatureEditTool.None); group.Templates.Add(GetSymbolTemplate(editor, info.Symbol, info.Value, featureTemplate, info.Label, info.Description)); } if (AlwaysDisplayDefaultTemplates && uvr.DefaultSymbol != null) group.Templates.Add(GetSymbolTemplate(editor, uvr.DefaultSymbol, null, null, uvr.DefaultLabel ?? layer.ID, null)); } else { var uvmfr = layer.Renderer as UniqueValueMultipleFieldsRenderer; foreach (var info in uvmfr.Infos) { var prototypeAttributes = new Dictionary<string, object>(); if (uvmfr.Fields != null) { int i = 0; foreach (var field in uvmfr.Fields) { prototypeAttributes[field] = info.Values[i]; i++; } } var featureTemplate = new FeatureTemplate(info.Label, info.Description, null, prototypeAttributes, FeatureEditTool.None); group.Templates.Add(GetSymbolTemplate(editor, info.Symbol, null, featureTemplate, info.Label, info.Description)); } if (AlwaysDisplayDefaultTemplates && uvmfr.DefaultSymbol != null) group.Templates.Add(GetSymbolTemplate(editor, uvmfr.DefaultSymbol, null, null, uvmfr.DefaultLabel ?? layer.ID, null)); } } else { if (defaultSymbol != null) group.Templates.Add(GetSymbolTemplate(editor, defaultSymbol, null, null, layer.ID, null)); else if (layer.Renderer is ClassBreaksRenderer) { var cbr = layer.Renderer as ClassBreaksRenderer; if (AlwaysDisplayDefaultTemplates && cbr.DefaultSymbol != null) group.Templates.Add(GetSymbolTemplate(editor, cbr.DefaultSymbol, null, null, layer.ID, null)); } } if (group.Templates.Count > 0) templateGroups.Add(group); } } } TemplateGroups = templateGroups; }
public CustomName(string name, FeatureTemplate template) { this.name = name; this.template = template; }
private void setTemplates() { List <TemplateGroup> templateGroups = new List <TemplateGroup>(); if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this)) { TemplateGroup group = new TemplateGroup() { Name = "LayerID", Templates = new List <SymbolTemplate>() }; SimpleFillSymbol fillSymbol = new SimpleFillSymbol() { Fill = new SolidColorBrush(Colors.Black) }; group.Templates.Add(GetSymbolTemplate(new Editor(), fillSymbol, null, null, "Template Name", string.Empty)); templateGroups.Add(group); } else { if (Map == null) { return; } foreach (FeatureLayer layer in GetLayers(LayerIDs, Map.Layers)) { if (!IsTemplatable(layer)) { continue; } if (layer.LayerInfo.HasM || layer.LayerInfo.HasZ && !layer.LayerInfo.EnableZDefaults) { continue; } Editor editor = new Editor() { AutoComplete = AutoComplete, AutoSelect = AutoSelect, ContinuousMode = Continuous, Freehand = Freehand, GeometryServiceUrl = GeometryServiceUrl, GeometryServiceToken = GeometryServiceToken, ProxyUrl = ProxyUrl, LayerIDs = new string[] { layer.ID }, Map = Map, }; editor.EditorActivated += Editor_EditorActivated; editor.EditCompleted += Editor_EditCompleted; TemplateGroup group = new TemplateGroup(); group.Name = layer.ID; group.Layer = layer; group.Templates = new List <SymbolTemplate>(); if (layer.Renderer != null) { Symbol defaultSymbol = layer.Renderer.GetSymbol(null); if (layer.LayerInfo.FeatureTypes != null && layer.LayerInfo.FeatureTypes.Count > 0) { foreach (KeyValuePair <object, FeatureType> type in layer.LayerInfo.FeatureTypes) { if (type.Value != null && type.Value.Templates != null && type.Value.Templates.Count > 0) { foreach (KeyValuePair <string, FeatureTemplate> featureTemplate in type.Value.Templates) { string name = type.Value.Name; if (type.Value.Templates.Count > 1) { name = string.Format("{0}-{1}", type.Value.Name, featureTemplate.Value.Name); } Symbol symbol = featureTemplate.Value.GetSymbol(layer.Renderer) ?? defaultSymbol; SymbolTemplate symbolTemplate = GetSymbolTemplate(editor, symbol, type.Value.Id, featureTemplate.Value, name, featureTemplate.Value.Description); if (symbol != null) { group.Templates.Add(symbolTemplate); } } } } if (AlwaysDisplayDefaultTemplates) { if (defaultSymbol != null) { var defaultLabel = layer.Renderer is UniqueValueRenderer ? (layer.Renderer as UniqueValueRenderer).DefaultLabel : (layer.Renderer is UniqueValueMultipleFieldsRenderer) ? (layer.Renderer as UniqueValueMultipleFieldsRenderer).DefaultLabel : null; group.Templates.Add(GetSymbolTemplate(editor, defaultSymbol, null, null, defaultLabel ?? layer.ID, null)); } } } else if (layer.LayerInfo.Templates != null && layer.LayerInfo.Templates.Count > 0) { foreach (KeyValuePair <string, FeatureTemplate> featureTemplate in layer.LayerInfo.Templates) { Symbol symbol = featureTemplate.Value.GetSymbol(layer.Renderer) ?? defaultSymbol; SymbolTemplate symbolTemplate = GetSymbolTemplate(editor, symbol, null, featureTemplate.Value, featureTemplate.Value.Name, featureTemplate.Value.Description); if (symbol != null) { group.Templates.Add(symbolTemplate); } } } else if (layer.Renderer is UniqueValueRenderer || layer.Renderer is UniqueValueMultipleFieldsRenderer) { var uvr = layer.Renderer as UniqueValueRenderer; if (uvr != null) { foreach (var info in uvr.Infos) { var prototypeAttributes = new Dictionary <string, object>(); prototypeAttributes[uvr.Field] = info.Value; var featureTemplate = new FeatureTemplate(info.Label, info.Description, null, prototypeAttributes, FeatureEditTool.None); group.Templates.Add(GetSymbolTemplate(editor, info.Symbol, info.Value, featureTemplate, info.Label, info.Description)); } if (AlwaysDisplayDefaultTemplates && uvr.DefaultSymbol != null) { group.Templates.Add(GetSymbolTemplate(editor, uvr.DefaultSymbol, null, null, uvr.DefaultLabel ?? layer.ID, null)); } } else { var uvmfr = layer.Renderer as UniqueValueMultipleFieldsRenderer; foreach (var info in uvmfr.Infos) { var prototypeAttributes = new Dictionary <string, object>(); if (uvmfr.Fields != null) { int i = 0; foreach (var field in uvmfr.Fields) { prototypeAttributes[field] = info.Values[i]; i++; } } var featureTemplate = new FeatureTemplate(info.Label, info.Description, null, prototypeAttributes, FeatureEditTool.None); group.Templates.Add(GetSymbolTemplate(editor, info.Symbol, null, featureTemplate, info.Label, info.Description)); } if (AlwaysDisplayDefaultTemplates && uvmfr.DefaultSymbol != null) { group.Templates.Add(GetSymbolTemplate(editor, uvmfr.DefaultSymbol, null, null, uvmfr.DefaultLabel ?? layer.ID, null)); } } } else { if (defaultSymbol != null) { group.Templates.Add(GetSymbolTemplate(editor, defaultSymbol, null, null, layer.ID, null)); } else if (layer.Renderer is ClassBreaksRenderer) { var cbr = layer.Renderer as ClassBreaksRenderer; if (AlwaysDisplayDefaultTemplates && cbr.DefaultSymbol != null) { group.Templates.Add(GetSymbolTemplate(editor, cbr.DefaultSymbol, null, null, layer.ID, null)); } } } if (group.Templates.Count > 0) { templateGroups.Add(group); } } } } TemplateGroups = templateGroups; }
/// <summary> /// A template is selected for creation of a feature /// </summary> /// <param name="arg"></param> private void OnTemplateSelect(object arg) { TemplateData templateSelect = (TemplateData)arg; currentTemplateLayer = templateSelect.LayerId; currentTemplate = templateSelect.EditTemplate; if (this.EditLayers.Count > 0) { //this.SelectedEditLayer = this.EditLayers.FirstOrDefault(l => l.LayerName.Equals(currentTemplateLayer)); //this.RaisePropertyChanged(() => this.SelectedEditLayer); } }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (!(value is SymbolTemplate)) { return(value); } SymbolTemplate symbolTemplate = value as SymbolTemplate; if (symbolTemplate.Symbol == null) { return(null); } Symbol convertedSymbol = symbolTemplate.Symbol; if (symbolTemplate.FeatureTemplate == null) { return(convertedSymbol); } FeatureTemplate featureTemplate = symbolTemplate.FeatureTemplate; if (symbolTemplate.Symbol is FSSymbols.SimpleFillSymbol || symbolTemplate.Symbol is FSSymbols.PictureFillSymbol || symbolTemplate.Symbol is FSSymbols.SimpleLineSymbol) { switch (featureTemplate.DrawingTool) { case FeatureEditTool.Polygon: convertedSymbol = new PolygonSymbol(); break; case FeatureEditTool.AutoCompletePolygon: convertedSymbol = new AutoCompletePolygonSymbol(); break; case FeatureEditTool.Circle: convertedSymbol = new CircleSymbol(); break; case FeatureEditTool.Ellipse: convertedSymbol = new EllipseSymbol(); break; case FeatureEditTool.Rectangle: convertedSymbol = new RectangleSymbol(); break; case FeatureEditTool.Freehand: if (symbolTemplate.Symbol is FSSymbols.SimpleLineSymbol) { convertedSymbol = new FreehandLineSymbol(); } else { convertedSymbol = new FreehandPolygonSymbol(); } break; case FeatureEditTool.Line: convertedSymbol = new PolylineSymbol(); break; } if (convertedSymbol is ShapeMarkerSymbol) { ShapeMarkerSymbol shapeMarkerSymbol = convertedSymbol as ShapeMarkerSymbol; FillMarkerSymbol fillMarkerSymbol = convertedSymbol as FillMarkerSymbol; if (symbolTemplate.Symbol is FSSymbols.SimpleFillSymbol) { ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleFillSymbol simpleFillSymbol = symbolTemplate.Symbol as FSSymbols.SimpleFillSymbol; fillMarkerSymbol.Stroke = simpleFillSymbol.BorderBrush; fillMarkerSymbol.Fill = simpleFillSymbol.Fill; fillMarkerSymbol.StrokeStyle = simpleFillSymbol.BorderStyle; fillMarkerSymbol.StrokeThickness = simpleFillSymbol.BorderThickness; shapeMarkerSymbol.SelectionColor = simpleFillSymbol.SelectionColor; } else if (symbolTemplate.Symbol is FSSymbols.PictureFillSymbol) { ESRI.ArcGIS.Client.FeatureService.Symbols.PictureFillSymbol pictureFillSymbol = symbolTemplate.Symbol as FSSymbols.PictureFillSymbol; fillMarkerSymbol.Stroke = pictureFillSymbol.BorderBrush; fillMarkerSymbol.StrokeStyle = pictureFillSymbol.BorderStyle; fillMarkerSymbol.StrokeThickness = pictureFillSymbol.BorderThickness; shapeMarkerSymbol.SelectionColor = pictureFillSymbol.SelectionColor; // Create new image brush for fill in order to set stretch to Uniform ImageBrush brush = new ImageBrush() { Stretch = Stretch.Uniform, ImageSource = pictureFillSymbol.Source }; fillMarkerSymbol.Fill = brush; } else if (symbolTemplate.Symbol is FSSymbols.SimpleLineSymbol) { ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleLineSymbol simpleLineSymbol = symbolTemplate.Symbol as FSSymbols.SimpleLineSymbol; shapeMarkerSymbol.Stroke = simpleLineSymbol.Color; shapeMarkerSymbol.StrokeStyle = simpleLineSymbol.Style; shapeMarkerSymbol.StrokeThickness = simpleLineSymbol.Width; shapeMarkerSymbol.SelectionColor = simpleLineSymbol.SelectionColor; if (fillMarkerSymbol != null) { fillMarkerSymbol.Fill = new SolidColorBrush(Colors.Transparent); } } } } return(convertedSymbol); }
public virtual void LoadFromTxt(string path) { //if (Load(ByteArray.Create(path + Predefine.BIN_EXT))) return; var lines = File.ReadAllLines(path); // print lines[0]; // version // print lines[1]; // cost-factor // print lines[2]; // "maxid:xx" // print lines[3]; // xsize // lines[4]: blank line tag2id = new Dictionary <string, int>(); int i = 5; string line = null; for (; i < lines.Length; i++) { line = lines[i]; if (string.IsNullOrEmpty(line)) { break; } tag2id[line] = i - 5; } int size = tag2id.Count; id2tag = new string[size]; //! id2tag的元素赋值为什么不放入上一个循环中? tag2id.Count必然比keyvaluepair.value最大值大1,否则下面给id2tag元素赋值会出错 foreach (var p in tag2id) { id2tag[p.Value] = p.Key; } var ffMap = new SortedDictionary <string, FeatureFunction>(StrComparer.Default); var ffList = new List <FeatureFunction>(); _ftList = new List <FeatureTemplate>(); i++; // 跳过当前的空白行 for (; i < lines.Length; i++) { line = lines[i]; if (string.IsNullOrEmpty(line)) { break; } if ("B" != line) { _ftList.Add(FeatureTemplate.Create(line)); } else { _matrix = new double[size][]; //? 第一次遇到"B"行,表示接来下是_matrix数据信息,于是,初始化_matrix方阵 } } i++; // 跳过当前空白行 if (_matrix != null) { i++; // 如果提供了_matrix数据信息,则接下来一行为 0 B,跳过 } for (; i < lines.Length; i++) { line = lines[i]; if (string.IsNullOrEmpty(line)) { break; } var args = line.Split(new[] { ' ' }, 2); var chars = args[1].ToCharArray(); var ff = new FeatureFunction(chars, size); ffMap[args[1]] = ff; ffList.Add(ff); } i++; // 跳过当前空白行 if (_matrix != null) { for (int k = 0; k < size; k++) { _matrix[k] = new double[size]; for (int j = 0; j < size; j++) { _matrix[k][j] = double.Parse(lines[i++]); } } } for (int k = 0; k < ffList.Count; k++) { var ff = ffList[k]; for (int j = 0; j < size; j++) { ff.w[j] = double.Parse(lines[i++]); } } if (i < lines.Length) { // log "文本读取有残留,可能出现问题" } _ffTrie.Build(ffMap); // 缓存bin数据文件 var fs = new FileStream(path + Predefine.BIN_EXT, FileMode.Create, FileAccess.Write); try { Save(fs); fs.Close(); } catch (Exception e) { // log e fs.Close(); File.Delete(path + Predefine.BIN_EXT); } OnLoadTxtFinished(); }