private async Task CreateToc() { FeatureLayerInfoItems.Clear(); if (CurrentEsriMapView == null) return; foreach (var layer in CurrentEsriMapView.Map.Layers) { if (!(layer is FeatureLayer)) continue; var featureLayer = layer as FeatureLayer; long edits = 0; FeatureServiceLayerInfo serviceInfo = null; if (featureLayer.FeatureTable is GeodatabaseFeatureTable) { var table = featureLayer.FeatureTable as GeodatabaseFeatureTable; if (table.HasEdits) { edits = table.AddedFeaturesCount + table.DeletedFeaturesCount + table.UpdatedFeaturesCount; } serviceInfo = table.ServiceInfo; } if (featureLayer.FeatureTable is ServiceFeatureTable) //online { var table = featureLayer.FeatureTable as ServiceFeatureTable; if (table.HasEdits) { edits = table.AddedFeaturesCount + table.DeletedFeaturesCount + table.UpdatedFeaturesCount; } serviceInfo = table.ServiceInfo; } bool isEditable = false; bool isSyncable = false; foreach (var capability in serviceInfo.Capabilities) { if (capability == "Editing") { isEditable = true; } if (capability == "Sync") { isSyncable = true; } } if (isEditable) { // var test = featureLayer.FeatureTable.ServiceInfo.DrawingInfo.Renderer as SimpleRenderer; // UniqueValueInfoCollection uniqueValueInfoCollection = test.; var legendInfosList = new List<LegendInfo>(); if (serviceInfo.DrawingInfo.Renderer is SimpleRenderer) { var renderer = serviceInfo.DrawingInfo.Renderer as SimpleRenderer; var imageSource = await renderer.Symbol.CreateSwatchAsync(); var legendInfo = new LegendInfo(renderer.Label, imageSource, renderer.Symbol, CreateNewFeatureCommand); legendInfosList.Add(legendInfo); } else if (serviceInfo.DrawingInfo.Renderer is UniqueValueRenderer) { var renderer = serviceInfo.DrawingInfo.Renderer as UniqueValueRenderer; foreach (var info in renderer.Infos) { var imageSource = await info.Symbol.CreateSwatchAsync(); legendInfosList.Add(new LegendInfo(info.Label, imageSource, info.Symbol, CreateNewFeatureCommand)); } } else if (serviceInfo.DrawingInfo.Renderer is ClassBreaksRenderer) { var renderer = serviceInfo.DrawingInfo.Renderer as ClassBreaksRenderer; foreach (var info in renderer.Infos) { var imageSource = await info.Symbol.CreateSwatchAsync(); legendInfosList.Add(new LegendInfo(info.Label, imageSource, info.Symbol, CreateNewFeatureCommand)); } } var featureLayerEditInfoItem = new FeatureLayerInfo(featureLayer, isEditable, isSyncable, edits, legendInfosList); FeatureLayerInfoItems.Add(featureLayerEditInfoItem); } } }
private void SetLegendInfosCheckState(LegendInfo legendInfo) { foreach (var featureLayerInfoItem in FeatureLayerInfoItems) { foreach (var info in featureLayerInfoItem.LegendInfos.Where(info => !info.Equals(legendInfo))) { info.IsChecked = false; } } }
private async Task CreateNewFeature(FeatureLayerInfo featureLayerInfo, LegendInfo legendInfo) { if (CurrentEsriMapView.Editor.IsActive) { CurrentEsriMapView.Editor.Cancel.Execute(null); } Graphic graphic = null; switch (featureLayerInfo.FeatureLayer.FeatureTable.GeometryType) { case GeometryType.Unknown: break; case GeometryType.Point: graphic = await CreateGraphicAsync(legendInfo.EsriSymbol, DrawShape.Point); break; case GeometryType.Polyline: graphic = await CreateGraphicAsync(legendInfo.EsriSymbol, DrawShape.Polyline); break; case GeometryType.Polygon: graphic = await CreateGraphicAsync(legendInfo.EsriSymbol, DrawShape.Polygon); break; case GeometryType.Envelope: break; } if (featureLayerInfo.FeatureLayer.FeatureTable is GeodatabaseFeatureTable) { var table = featureLayerInfo.FeatureLayer.FeatureTable as GeodatabaseFeatureTable; //_model.SetMessageInfo("Table was not found in the local geodatabase."); var feature = new GeodatabaseFeature(table.Schema) {Geometry = graphic.Geometry,}; if (feature.Schema.Fields.Any(fld => fld.Name == table.ServiceInfo.DisplayField)) feature.Attributes[table.ServiceInfo.DisplayField] = legendInfo.Label; await table.AddAsync(feature); } if (featureLayerInfo.FeatureLayer.FeatureTable is ServiceFeatureTable) { var table = featureLayerInfo.FeatureLayer.FeatureTable as ServiceFeatureTable; var feature = new GeodatabaseFeature(table.Schema) {Geometry = graphic.Geometry,}; if (feature.Schema.Fields.Any(fld => fld.Name == table.ServiceInfo.DisplayField)) feature.Attributes[table.ServiceInfo.DisplayField] = legendInfo.Label; await table.AddAsync(feature); } }
private FeatureLayerInfo GetFeatureLayerInfoByLegendInfo(LegendInfo legendInfo) { return FeatureLayerInfoItems.FirstOrDefault( featureLayerInfoItem => Enumerable.Contains(featureLayerInfoItem.LegendInfos, legendInfo)); }