Exemplo n.º 1
0
        private static string GetFeatureIdColumn(FeatureLayer featureLayer)
        {
            string      featureIdColumn = string.Empty;
            LayerPlugin layerPlugin     = GisEditor.LayerManager.GetLayerPlugins(featureLayer.GetType()).FirstOrDefault();

            if (layerPlugin != null)
            {
                Uri uri = layerPlugin.GetUri(featureLayer);
                if (uri != null && GisEditor.LayerManager.FeatureIdColumnNames.ContainsKey(uri.ToString()))
                {
                    featureIdColumn = GisEditor.LayerManager.FeatureIdColumnNames[uri.ToString()];
                    GisEditor.LayerManager.FeatureIdColumnNames.Remove(uri.ToString());
                    GisEditor.LayerManager.FeatureIdColumnNames[featureLayer.FeatureSource.Id] = featureIdColumn;
                }
                else if (GisEditor.LayerManager.FeatureIdColumnNames.ContainsKey(featureLayer.FeatureSource.Id))
                {
                    featureIdColumn = GisEditor.LayerManager.FeatureIdColumnNames[featureLayer.FeatureSource.Id];
                }
                else if (GisEditor.LayerManager.FeatureIdColumnNames.Count == 0)
                {
                    if (string.IsNullOrEmpty(featureIdColumn) &&
                        featureLayer.FeatureSource.IsOpen)
                    {
                        var apnColumn = featureLayer.FeatureSource.GetColumns().FirstOrDefault(c => { return(c.ColumnName == "APN"); });
                        if (apnColumn != null)
                        {
                            featureIdColumn = "APN";
                        }
                    }
                }
            }

            return(featureIdColumn);
        }
        protected virtual Collection <T> GetLayersCore <T>(GetLayersParameters getLayersParameters) where T : Layer
        {
            Collection <T> resultLayers = new Collection <T>();
            LayerPlugin    layerPlugin  = GetLayerPlugins(typeof(T)).FirstOrDefault();

            if (layerPlugin != null && layerPlugin.IsActive)
            {
                IEnumerable <T> layers = layerPlugin.GetLayers(getLayersParameters).OfType <T>();
                foreach (T layer in layers)
                {
                    resultLayers.Add(layer);
                }
            }

            return(resultLayers);
        }
        /// <summary>
        /// Gets the layer list item core.
        /// </summary>
        /// <param name="layer">The layer.</param>
        /// <returns></returns>
        protected virtual LayerListItem GetLayerListItemCore(Layer layer)
        {
            LayerPlugin matchLayerPlugin  = null;
            var         matchLayerPlugins = GetLayerPlugins(layer.GetType());

            if (matchLayerPlugins.Count > 1)
            {
                matchLayerPlugin = matchLayerPlugins.FirstOrDefault(p => !p.GetType().Assembly.Location.Equals(DefaultPluginPathFileName, StringComparison.OrdinalIgnoreCase));
            }
            else
            {
                matchLayerPlugin = matchLayerPlugins.FirstOrDefault();
            }
            if (matchLayerPlugin != null)
            {
                return(matchLayerPlugin.GetLayerListItem(layer));
            }
            else
            {
                return(null);
            }
        }
        private LayerListItem GetLayerListItemForLayer(Layer layer)
        {
            var layerListItem = GisEditor.LayerManager.GetLayerListItem(layer);

            if (layerListItem == null)
            {
                layerListItem = GetLayerListItemFromUIPlugins(layer);
            }
            LayerPlugin layerPlugin = GisEditor.LayerManager.GetLayerPlugins(layer.GetType()).FirstOrDefault();

            if (layerPlugin != null)
            {
                bool isDataSourceAvailable = layerPlugin.DataSourceResolveTool.IsDataSourceAvailable(layer);
                if (!isDataSourceAvailable)
                {
                    string noIndexToolTip = "This layer's data source is unavailable, please right-click to resolve it.";
                    layerListItem.WarningImages.Add(new Image {
                        Source = new BitmapImage(new Uri("pack://application:,,,/GisEditorInfrastructure;component/Images/NoIndexFile.png", UriKind.Absolute)), Width = 14, Height = 14, ToolTip = noIndexToolTip
                    });
                }
            }
            return(layerListItem);
        }
Exemplo n.º 5
0
        private void VisibilityChanged(bool value)
        {
            if (ConcreteObject is LayerOverlay && needRefresh)
            {
                foreach (var subEntity in Children)
                {
                    subEntity.needRefresh = false;
                    LayerPlugin layerPlugin = GisEditor.LayerManager.GetLayerPlugins(subEntity.ConcreteObject.GetType()).FirstOrDefault();
                    if (layerPlugin != null)
                    {
                        bool isDataSourceAvailable = layerPlugin.DataSourceResolveTool.IsDataSourceAvailable((Layer)subEntity.ConcreteObject);
                        if (isDataSourceAvailable)
                        {
                            subEntity.IsChecked = IsChecked;
                            ((Layer)subEntity.ConcreteObject).IsVisible = IsChecked;
                        }
                    }
                    subEntity.needRefresh = true;
                }
                var tileOverlay = (TileOverlay)ConcreteObject;
                tileOverlay.IsVisible = isChecked;
                if (!isChecked)
                {
                    RefreshOverlay(tileOverlay);
                }
                GisEditor.UIManager.InvokeRefreshPlugins();
            }
            else if (ConcreteObject is Layer && needRefresh)
            {
                LayerPlugin layerPlugin = GisEditor.LayerManager.GetLayerPlugins(ConcreteObject.GetType()).FirstOrDefault();
                if (layerPlugin != null)
                {
                    bool isDataSourceAvailable = layerPlugin.DataSourceResolveTool.IsDataSourceAvailable((Layer)ConcreteObject);
                    if (!isDataSourceAvailable)
                    {
                        ((Layer)ConcreteObject).IsVisible = false;
                        isChecked = false;
                        OnPropertyChanged("IsChecked");
                        return;
                    }
                }

                if (!isChecked)
                {
                    Image image = warningImages.FirstOrDefault(i => i.Name.Equals("InEditing", StringComparison.InvariantCultureIgnoreCase));
                    if (image != null)
                    {
                        warningImages.Remove(image);
                    }
                }
                ((Layer)ConcreteObject).IsVisible = isChecked;
                Parent.needRefresh = false;
                Parent.IsChecked   = Parent.Children.Any(m => m.IsChecked);
                Parent.needRefresh = true;
                TileOverlay tileOverlay = Parent.ConcreteObject as TileOverlay;
                if (tileOverlay != null)
                {
                    //In this case, tileOverlay will execute Refresh() in default.
                    if (!tileOverlay.IsVisible && Parent.IsChecked)
                    {
                        tileOverlay.IsVisible = Parent.IsChecked;
                    }
                    else
                    {
                        tileOverlay.IsVisible = Parent.IsChecked;
                        tileOverlay.Invalidate();
                        RefreshOverlay(tileOverlay);
                    }
                }
                GisEditor.UIManager.InvokeRefreshPlugins();
            }

            if (!(ConcreteObject is Layer) && !(ConcreteObject is LayerOverlay))
            {
                TryChangeIsVisiblePropertyOfMapElement();
            }

            if (ConcreteObject is Styles.Style)
            {
                Styles.Style concreteStyle = (Styles.Style)ConcreteObject;
                concreteStyle.IsActive = value;
                Layer layer = LayerListHelper.FindMapElementInTree <Layer>(this);
                if (layer != null && layer.IsVisible)
                {
                    LayerOverlay layerOverlay = LayerListHelper.FindMapElementInTree <LayerOverlay>(this);
                    if (layerOverlay != null && layerOverlay.IsVisible)
                    {
                        layerOverlay.Invalidate();
                        RefreshOverlay(layerOverlay);
                    }
                }
            }
        }