Пример #1
0
    public AppSettings(Configuration.SettingDataTable settingTable)
    {
        // load settings from table into a dictionary for quick access

        _configSetting = new Dictionary <string, string>();

        foreach (Configuration.SettingRow settingRow in settingTable)
        {
            _configSetting.Add(settingRow.Setting, !settingRow.IsValueNull() ? settingRow.Value : null);
        }

        // load projections

        try
        {
            string proj4String = GetConfigSetting("MapProjection");

            if (String.IsNullOrWhiteSpace(proj4String))
            {
                _mapCoordinateSystem = new CoordinateSystem("+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs");
            }
            else
            {
                _mapCoordinateSystem = new CoordinateSystem(proj4String);
            }

            proj4String = GetConfigSetting("MeasureProjection");

            if (String.IsNullOrWhiteSpace(proj4String))
            {
                _measureCoordinateSystem = MapCoordinateSystem;
            }
            else
            {
                _measureCoordinateSystem = new CoordinateSystem(proj4String);
            }
        }
        catch { }

        // extract full extent from source setting and project if necessary

        if (_configSetting["FullExtent"] != null)
        {
            try
            {
                _fullExtent = EnvelopeExtensions.FromDelimitedString(_configSetting["FullExtent"]);

                if (_mapCoordinateSystem != null && _measureCoordinateSystem != null && !_mapCoordinateSystem.Equals(_measureCoordinateSystem))
                {
                    _fullExtent = _mapCoordinateSystem.ToProjected(_measureCoordinateSystem.ToGeodetic(_fullExtent));
                }
            }
            catch { }
        }
    }
Пример #2
0
        public Envelope GetFullExtentEnvelope()
        {
            Envelope fullExtent;

            if (IsFullExtentNull())
            {
                fullExtent = Configuration.AppSettings.DefaultFullExtent;
            }
            else
            {
                fullExtent = EnvelopeExtensions.FromDelimitedString(FullExtent);
                AppSettings appSettings = Configuration.AppSettings;

                if (!appSettings.MapCoordinateSystem.Equals(appSettings.MeasureCoordinateSystem))
                {
                    fullExtent = appSettings.MapCoordinateSystem.ToProjected(appSettings.MeasureCoordinateSystem.ToGeodetic(fullExtent));
                }
            }

            return(fullExtent);
        }
Пример #3
0
    private void DeleteMarkup()
    {
        int groupId = Request.Form["id"] != null?Convert.ToInt32(Request.Form["id"]) : -1;

        AppState appState = AppState.FromJson(Request.Form["state"]);

        double[] geo   = Request.Form["geo"].Split(',').Select(o => Convert.ToDouble(o)).ToArray();
        double   scale = Convert.ToDouble(Request.Form["scale"]);

        IGeometry searchShape;
        double    distance = 0;

        if (geo.Length == 4)
        {
            searchShape = EnvelopeExtensions.FromArray(geo).ToPolygon();
        }
        else
        {
            searchShape = new Point(geo[0], geo[1]);
            distance    = geo[2];
        }

        bool       deleted       = false;
        List <int> markupIndexes = new List <int>();

        for (int i = 0; i < appState.Markup.Count; ++i)
        {
            HitType hitType = MarkupHitTest(appState.Markup[i], searchShape, distance, scale);

            if (hitType != HitType.None)
            {
                markupIndexes.Add(i);
                deleted = true;
            }
        }

        if (groupId > -1)
        {
            try
            {
                using (OleDbConnection connection = AppContext.GetDatabaseConnection())
                {
                    bool   deletedInGroup = false;
                    string sql            = String.Format("select MarkupID, Shape, Text, Measured from {0}Markup where GroupID = ?", WebConfigSettings.ConfigurationTablePrefix);

                    using (OleDbCommand command = new OleDbCommand(sql, connection))
                    {
                        command.Parameters.Add("@1", OleDbType.Integer).Value = groupId;
                        DataTable table = new DataTable();

                        using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
                        {
                            adapter.Fill(table);
                        }

                        command.Parameters.Clear();

                        for (int i = table.Rows.Count - 1; i >= 0; --i)
                        {
                            DataRow row     = table.Rows[i];
                            HitType hitType = MarkupHitTest(row, searchShape, distance, scale);

                            if (hitType != HitType.None)
                            {
                                command.CommandText = String.Format("update {0}Markup set Deleted = 1 where MarkupID = {1}", WebConfigSettings.ConfigurationTablePrefix, row["MarkupID"]);
                                command.ExecuteNonQuery();
                                deletedInGroup = true;
                            }
                        }
                    }

                    if (deletedInGroup)
                    {
                        UpdateMarkupGroupLastAccessed(groupId, connection);
                        deleted = true;
                    }
                }
            }
            catch { }
        }

        Dictionary <string, object> result = new Dictionary <string, object>();

        result["deleted"] = deleted;

        if (markupIndexes.Count >= 0)
        {
            result["markup"] = markupIndexes;
        }

        ReturnJson(result);
    }
Пример #4
0
    public static AppState FromString(string stateString)
    {
        Queue    values   = new Queue(stateString.Split(Separator));
        AppState appState = new AppState();

        string version = ((string)values.Peek())[0] != VersionMarker ? "2.0" : ((string)values.Dequeue()).Substring(1);

        int         tab;
        FunctionTab functionTabs;

        switch (version)
        {
        case "2.0":
            appState.Application    = (string)values.Dequeue();
            appState.MapTab         = (string)values.Dequeue();
            appState.TargetLayer    = (string)values.Dequeue();
            appState.SelectionLayer = (string)values.Dequeue();
            values.Dequeue();                      // skip SelectionDistance
            appState.ActiveMapId    = (string)values.Dequeue();
            appState.ActiveDataId   = (string)values.Dequeue();
            appState.TargetIds      = StringCollection.FromString((string)values.Dequeue());
            appState.SelectionIds   = StringCollection.FromString((string)values.Dequeue());
            appState.Query          = (string)values.Dequeue();
            appState.DataTab        = (string)values.Dequeue();
            appState.MarkupCategory = (string)values.Dequeue();
            appState.MarkupGroups   = StringCollection.FromString((string)values.Dequeue());

            tab          = Convert.ToInt32((string)values.Dequeue());
            functionTabs = FunctionTab.All;

            switch (tab)
            {
            case 1: functionTabs = FunctionTab.Selection; break;

            case 2: functionTabs = FunctionTab.Markup; break;

            case 3: functionTabs = FunctionTab.None; break;
            }

            appState.FunctionTabs      = functionTabs;
            appState.ActiveFunctionTab = functionTabs == FunctionTab.All ? FunctionTab.Selection : functionTabs;
            appState.Extent            = EnvelopeExtensions.FromDelimitedString((string)values.Dequeue(), Separator2);
            break;

        case "2.1":
            appState.Application    = (string)values.Dequeue();
            appState.MapTab         = (string)values.Dequeue();
            appState.Action         = (Action)(Convert.ToInt32((string)values.Dequeue()));
            appState.TargetLayer    = (string)values.Dequeue();
            appState.TargetIds      = StringCollection.FromString((string)values.Dequeue());
            appState.ActiveMapId    = (string)values.Dequeue();
            appState.ActiveDataId   = (string)values.Dequeue();
            appState.Proximity      = (string)values.Dequeue();
            appState.SelectionLayer = (string)values.Dequeue();
            appState.SelectionIds   = StringCollection.FromString((string)values.Dequeue());
            appState.Query          = (string)values.Dequeue();
            appState.DataTab        = (string)values.Dequeue();
            appState.MarkupCategory = (string)values.Dequeue();
            appState.MarkupGroups   = StringCollection.FromString((string)values.Dequeue());

            tab          = Convert.ToInt32((string)values.Dequeue());
            functionTabs = FunctionTab.All;

            switch (tab)
            {
            case 0: functionTabs = FunctionTab.None; break;

            case 1: functionTabs = FunctionTab.Selection; break;

            case 2: functionTabs = FunctionTab.Markup; break;
            }

            appState.FunctionTabs      = functionTabs;
            appState.ActiveFunctionTab = functionTabs == FunctionTab.All ? FunctionTab.Selection : functionTabs;
            appState.Extent            = EnvelopeExtensions.FromDelimitedString((string)values.Dequeue(), Separator2);
            appState.Coordinates       = CoordinatesFromString((string)values.Dequeue());
            break;

        case "2.4":
            appState.Application       = (string)values.Dequeue();
            appState.MapTab            = (string)values.Dequeue();
            appState.Action            = (Action)(Convert.ToInt32((string)values.Dequeue()));
            appState.TargetLayer       = (string)values.Dequeue();
            appState.TargetIds         = StringCollection.FromString((string)values.Dequeue());
            appState.ActiveMapId       = (string)values.Dequeue();
            appState.ActiveDataId      = (string)values.Dequeue();
            appState.Proximity         = (string)values.Dequeue();
            appState.SelectionLayer    = (string)values.Dequeue();
            appState.SelectionIds      = StringCollection.FromString((string)values.Dequeue());
            appState.Query             = (string)values.Dequeue();
            appState.DataTab           = (string)values.Dequeue();
            appState.MarkupCategory    = (string)values.Dequeue();
            appState.MarkupGroups      = StringCollection.FromString((string)values.Dequeue());
            appState.FunctionTabs      = (FunctionTab)(Convert.ToInt32((string)values.Dequeue()));
            appState.ActiveFunctionTab = (FunctionTab)(Convert.ToInt32((string)values.Dequeue()));
            appState.Extent            = EnvelopeExtensions.FromDelimitedString((string)values.Dequeue(), Separator2);
            appState.Coordinates       = CoordinatesFromString((string)values.Dequeue());
            break;

        case "2.5":
            appState.Application       = (string)values.Dequeue();
            appState.MapTab            = (string)values.Dequeue();
            appState.Action            = (Action)(Convert.ToInt32((string)values.Dequeue()));
            appState.TargetLayer       = (string)values.Dequeue();
            appState.TargetIds         = StringCollection.FromString((string)values.Dequeue());
            appState.ActiveMapId       = (string)values.Dequeue();
            appState.ActiveDataId      = (string)values.Dequeue();
            appState.Proximity         = (string)values.Dequeue();
            appState.SelectionLayer    = (string)values.Dequeue();
            appState.SelectionIds      = StringCollection.FromString((string)values.Dequeue());
            appState.Query             = (string)values.Dequeue();
            appState.DataTab           = (string)values.Dequeue();
            appState.MarkupCategory    = (string)values.Dequeue();
            appState.MarkupGroups      = StringCollection.FromString((string)values.Dequeue());
            appState.FunctionTabs      = (FunctionTab)(Convert.ToInt32((string)values.Dequeue()));
            appState.ActiveFunctionTab = (FunctionTab)(Convert.ToInt32((string)values.Dequeue()));
            appState.Extent            = EnvelopeExtensions.FromDelimitedString((string)values.Dequeue(), Separator2);
            appState.Coordinates       = CoordinatesFromString((string)values.Dequeue());
            appState.VisibleLayers     = LayersFromString((string)values.Dequeue());
            break;

        case "3.1":
            appState.Application       = (string)values.Dequeue();
            appState.MapTab            = (string)values.Dequeue();
            appState.Action            = (Action)(Convert.ToInt32((string)values.Dequeue()));
            appState.TargetLayer       = (string)values.Dequeue();
            appState.TargetIds         = StringCollection.FromString((string)values.Dequeue());
            appState.ActiveMapId       = (string)values.Dequeue();
            appState.ActiveDataId      = (string)values.Dequeue();
            appState.Proximity         = (string)values.Dequeue();
            appState.SelectionLayer    = (string)values.Dequeue();
            appState.SelectionIds      = StringCollection.FromString((string)values.Dequeue());
            appState.Query             = (string)values.Dequeue();
            appState.DataTab           = (string)values.Dequeue();
            appState.MarkupCategory    = (string)values.Dequeue();
            appState.MarkupGroups      = StringCollection.FromString((string)values.Dequeue());
            appState.FunctionTabs      = (FunctionTab)(Convert.ToInt32((string)values.Dequeue()));
            appState.ActiveFunctionTab = (FunctionTab)(Convert.ToInt32((string)values.Dequeue()));
            appState.Extent            = EnvelopeExtensions.FromDelimitedString((string)values.Dequeue(), Separator2);
            appState.Coordinates       = CoordinatesFromString((string)values.Dequeue());
            appState.VisibleLayers     = LayersFromString((string)values.Dequeue());
            appState.Level             = (string)values.Dequeue();

            if (values.Count > 0)
            {
                appState.CoordinateLabels = StringCollection.FromString((string)values.Dequeue());
            }
            break;
        }

        return(appState);
    }
Пример #5
0
 public Envelope GetFullExtentEnvelope()
 {
     return(IsFullExtentNull() ? AppSettings.DefaultFullExtent : EnvelopeExtensions.FromDelimitedString(FullExtent));
 }
Пример #6
0
    private void SelectFeatures()
    {
        AppState appState  = AppState.FromJson(Request.Form["state"]);
        bool     updated   = false;
        bool     truncated = false;

        if (Request.Form["geo"] == null)
        {
            appState.SelectionManager.SelectTargets();
            updated = true;
        }
        else
        {
            double[] geo = Request.Form["geo"].Split(',').Select(o => Convert.ToDouble(o)).ToArray();

            CommonDataFrame        dataFrame   = AppContext.GetDataFrame(appState.MapTab);
            Configuration.LayerRow layer       = Configuration.Layer.First(o => o.LayerID == (appState.Action == Action.Select ? appState.TargetLayer : appState.SelectionLayer));
            CommonLayer            commonLayer = dataFrame.Layers.FirstOrDefault(o => String.Compare(o.Name, layer.LayerName, true) == 0);
            CommonField            keyField    = commonLayer.FindField(layer.KeyField);

            string levelQuery = layer.GetLevelQuery(commonLayer, appState.Level);

            DataTable table = null;

            if (geo.Length == 4)
            {
                Envelope box = EnvelopeExtensions.FromArray(geo);

                if (!layer.IsMaxSelectionAreaNull() && layer.MaxSelectionArea > 0 && box.Width * box.Height > layer.MaxSelectionArea)
                {
                    throw new AppException("The selection shape was too large; try again with a smaller shape");
                }

                table = commonLayer.GetFeatureTable(keyField.Name, levelQuery, box.ToPolygon());
            }
            else
            {
                table = commonLayer.GetFeatureTable(keyField.Name, levelQuery, geo[0], geo[1], geo[2]);
            }

            UpdateMode mode = (UpdateMode)Enum.Parse(typeof(UpdateMode), Request.Form["mode"], true);

            if (table != null && table.Rows.Count > 0)
            {
                if (appState.Action == Action.Select)
                {
                    updated = UpdateIds(appState.TargetIds, table, mode);

                    if (!layer.IsMaxNumberSelectedNull())
                    {
                        truncated = appState.TargetIds.Truncate(layer.MaxNumberSelected);
                    }

                    if (mode != UpdateMode.Remove && table.Rows.Count == 1)
                    {
                        updated = UpdateActive(appState, table.Rows[0][0].ToString()) || updated;
                    }
                }
                else
                {
                    updated = UpdateIds(appState.SelectionIds, table, mode);

                    if (!layer.IsMaxNumberSelectedNull())
                    {
                        appState.SelectionIds.Truncate(layer.MaxNumberSelected);
                    }

                    if (updated)
                    {
                        truncated = appState.SelectionManager.SelectTargets();
                    }
                }
            }
            else if (mode == UpdateMode.New)
            {
                updated = appState.Action == Action.Select ? appState.TargetIds.Count > 0 : appState.SelectionIds.Count > 0;
                appState.TargetIds.Clear();
                appState.SelectionIds.Clear();
                appState.ActiveMapId  = "";
                appState.ActiveDataId = "";
            }
        }

        if (!updated)
        {
            ReturnJson(null);
        }

        if (!appState.TargetIds.Contains(appState.ActiveMapId))
        {
            appState.ActiveMapId  = "";
            appState.ActiveDataId = "";
        }

        Dictionary <String, Object> state = new Dictionary <String, Object>();

        state.Add("ActiveMapId", appState.ActiveMapId);
        state.Add("ActiveDataId", appState.ActiveDataId);
        state.Add("TargetIds", appState.TargetIds);
        state.Add("SelectionIds", appState.SelectionIds);

        Dictionary <String, Object> result = new Dictionary <String, Object>();

        result.Add("state", state);
        result.Add("truncated", truncated);
        ReturnJson(result);
    }
Пример #7
0
    public static AppState FromString(string stateString)
    {
        Queue    values   = new Queue(stateString.Split(Separator));
        AppState appState = new AppState();

        string version = ((string)values.Peek())[0] != VersionMarker ? "2.0" : ((string)values.Dequeue()).Substring(1);

        int         tab;
        FunctionTab functionTabs;

        switch (version)
        {
        case "2.0":
            appState.Application    = (string)values.Dequeue();
            appState.MapTab         = (string)values.Dequeue();
            appState.TargetLayer    = (string)values.Dequeue();
            appState.SelectionLayer = (string)values.Dequeue();
            values.Dequeue(); // skip SelectionDistance
            appState.ActiveMapId    = (string)values.Dequeue();
            appState.ActiveDataId   = (string)values.Dequeue();
            appState.TargetIds      = StringCollection.FromString((string)values.Dequeue());
            appState.SelectionIds   = StringCollection.FromString((string)values.Dequeue());
            appState.Query          = (string)values.Dequeue();
            appState.DataTab        = (string)values.Dequeue();
            appState.MarkupCategory = (string)values.Dequeue();
            appState.MarkupGroups   = StringCollection.FromString((string)values.Dequeue());

            tab          = Convert.ToInt32((string)values.Dequeue());
            functionTabs = FunctionTab.All;

            switch (tab)
            {
            case 1: functionTabs = FunctionTab.Selection; break;

            case 2: functionTabs = FunctionTab.Markup; break;

            case 3: functionTabs = FunctionTab.None; break;
            }

            appState.FunctionTabs      = functionTabs;
            appState.ActiveFunctionTab = functionTabs == FunctionTab.All ? FunctionTab.Selection : functionTabs;
            appState.Extent            = ProjectExtent(EnvelopeExtensions.FromDelimitedString((string)values.Dequeue(), Separator2));
            break;

        case "2.1":
            appState.Application    = (string)values.Dequeue();
            appState.MapTab         = (string)values.Dequeue();
            appState.Action         = (Action)(Convert.ToInt32((string)values.Dequeue()));
            appState.TargetLayer    = (string)values.Dequeue();
            appState.TargetIds      = StringCollection.FromString((string)values.Dequeue());
            appState.ActiveMapId    = (string)values.Dequeue();
            appState.ActiveDataId   = (string)values.Dequeue();
            appState.Proximity      = (string)values.Dequeue();
            appState.SelectionLayer = (string)values.Dequeue();
            appState.SelectionIds   = StringCollection.FromString((string)values.Dequeue());
            appState.Query          = (string)values.Dequeue();
            appState.DataTab        = (string)values.Dequeue();
            appState.MarkupCategory = (string)values.Dequeue();
            appState.MarkupGroups   = StringCollection.FromString((string)values.Dequeue());

            tab          = Convert.ToInt32((string)values.Dequeue());
            functionTabs = FunctionTab.All;

            switch (tab)
            {
            case 0: functionTabs = FunctionTab.None; break;

            case 1: functionTabs = FunctionTab.Selection; break;

            case 2: functionTabs = FunctionTab.Markup; break;
            }

            appState.FunctionTabs      = functionTabs;
            appState.ActiveFunctionTab = functionTabs == FunctionTab.All ? FunctionTab.Selection : functionTabs;
            appState.Extent            = ProjectExtent(EnvelopeExtensions.FromDelimitedString((string)values.Dequeue(), Separator2));
            appState.Markup            = CoordinateMarkupFromString((string)values.Dequeue());
            break;

        case "2.4":
            appState.Application       = (string)values.Dequeue();
            appState.MapTab            = (string)values.Dequeue();
            appState.Action            = (Action)(Convert.ToInt32((string)values.Dequeue()));
            appState.TargetLayer       = (string)values.Dequeue();
            appState.TargetIds         = StringCollection.FromString((string)values.Dequeue());
            appState.ActiveMapId       = (string)values.Dequeue();
            appState.ActiveDataId      = (string)values.Dequeue();
            appState.Proximity         = (string)values.Dequeue();
            appState.SelectionLayer    = (string)values.Dequeue();
            appState.SelectionIds      = StringCollection.FromString((string)values.Dequeue());
            appState.Query             = (string)values.Dequeue();
            appState.DataTab           = (string)values.Dequeue();
            appState.MarkupCategory    = (string)values.Dequeue();
            appState.MarkupGroups      = StringCollection.FromString((string)values.Dequeue());
            appState.FunctionTabs      = (FunctionTab)(Convert.ToInt32((string)values.Dequeue()));
            appState.ActiveFunctionTab = (FunctionTab)(Convert.ToInt32((string)values.Dequeue()));
            appState.Extent            = ProjectExtent(EnvelopeExtensions.FromDelimitedString((string)values.Dequeue(), Separator2));
            appState.Markup            = CoordinateMarkupFromString((string)values.Dequeue());
            break;

        case "2.5":
            appState.Application       = (string)values.Dequeue();
            appState.MapTab            = (string)values.Dequeue();
            appState.Action            = (Action)(Convert.ToInt32((string)values.Dequeue()));
            appState.TargetLayer       = (string)values.Dequeue();
            appState.TargetIds         = StringCollection.FromString((string)values.Dequeue());
            appState.ActiveMapId       = (string)values.Dequeue();
            appState.ActiveDataId      = (string)values.Dequeue();
            appState.Proximity         = (string)values.Dequeue();
            appState.SelectionLayer    = (string)values.Dequeue();
            appState.SelectionIds      = StringCollection.FromString((string)values.Dequeue());
            appState.Query             = (string)values.Dequeue();
            appState.DataTab           = (string)values.Dequeue();
            appState.MarkupCategory    = (string)values.Dequeue();
            appState.MarkupGroups      = StringCollection.FromString((string)values.Dequeue());
            appState.FunctionTabs      = (FunctionTab)(Convert.ToInt32((string)values.Dequeue()));
            appState.ActiveFunctionTab = (FunctionTab)(Convert.ToInt32((string)values.Dequeue()));
            appState.Extent            = ProjectExtent(EnvelopeExtensions.FromDelimitedString((string)values.Dequeue(), Separator2));
            appState.Markup            = CoordinateMarkupFromString((string)values.Dequeue());
            appState.VisibleLayers     = LayersFromString((string)values.Dequeue());
            break;

        case "3.1":
            appState.Application       = (string)values.Dequeue();
            appState.MapTab            = (string)values.Dequeue();
            appState.Action            = (Action)(Convert.ToInt32((string)values.Dequeue()));
            appState.TargetLayer       = (string)values.Dequeue();
            appState.TargetIds         = StringCollection.FromString((string)values.Dequeue());
            appState.ActiveMapId       = (string)values.Dequeue();
            appState.ActiveDataId      = (string)values.Dequeue();
            appState.Proximity         = (string)values.Dequeue();
            appState.SelectionLayer    = (string)values.Dequeue();
            appState.SelectionIds      = StringCollection.FromString((string)values.Dequeue());
            appState.Query             = (string)values.Dequeue();
            appState.DataTab           = (string)values.Dequeue();
            appState.MarkupCategory    = (string)values.Dequeue();
            appState.MarkupGroups      = StringCollection.FromString((string)values.Dequeue());
            appState.FunctionTabs      = (FunctionTab)(Convert.ToInt32((string)values.Dequeue()));
            appState.ActiveFunctionTab = (FunctionTab)(Convert.ToInt32((string)values.Dequeue()));
            appState.Extent            = ProjectExtent(EnvelopeExtensions.FromDelimitedString((string)values.Dequeue(), Separator2));
            appState.Markup            = CoordinateMarkupFromString((string)values.Dequeue());
            appState.VisibleLayers     = LayersFromString((string)values.Dequeue());
            appState.Level             = (string)values.Dequeue();

            if (values.Count > 0)
            {
                var text = (string)values.Dequeue();

                if (!String.IsNullOrEmpty(text) && text != "1")
                {
                    appState.Markup[0].Text = text;
                }
            }
            break;

        case "4.2":
            appState.Application       = (string)values.Dequeue();
            appState.MapTab            = (string)values.Dequeue();
            appState.Action            = (Action)(Convert.ToInt32((string)values.Dequeue()));
            appState.TargetLayer       = (string)values.Dequeue();
            appState.TargetIds         = StringCollection.FromString((string)values.Dequeue());
            appState.ActiveMapId       = (string)values.Dequeue();
            appState.ActiveDataId      = (string)values.Dequeue();
            appState.Proximity         = (string)values.Dequeue();
            appState.SelectionLayer    = (string)values.Dequeue();
            appState.SelectionIds      = StringCollection.FromString((string)values.Dequeue());
            appState.Query             = (string)values.Dequeue();
            appState.DataTab           = (string)values.Dequeue();
            appState.MarkupCategory    = (string)values.Dequeue();
            appState.MarkupGroups      = StringCollection.FromString((string)values.Dequeue());
            appState.Markup            = FromJson <List <Markup> >((string)values.Dequeue());
            appState.FunctionTabs      = (FunctionTab)(Convert.ToInt32((string)values.Dequeue()));
            appState.ActiveFunctionTab = (FunctionTab)(Convert.ToInt32((string)values.Dequeue()));
            appState.Extent            = ProjectExtent(EnvelopeExtensions.FromDelimitedString((string)values.Dequeue(), Separator2));
            appState.VisibleLayers     = LayersFromString((string)values.Dequeue());
            appState.Level             = (string)values.Dequeue();
            break;

        case "5.0":
            appState.Application       = (string)values.Dequeue();
            appState.MapTab            = (string)values.Dequeue();
            appState.Search            = (string)values.Dequeue();
            appState.SearchCriteria    = FromJson <Dictionary <String, Object> >((string)values.Dequeue());
            appState.Action            = (Action)(Convert.ToInt32((string)values.Dequeue()));
            appState.TargetLayer       = (string)values.Dequeue();
            appState.TargetIds         = StringCollection.FromString((string)values.Dequeue());
            appState.ActiveMapId       = (string)values.Dequeue();
            appState.ActiveDataId      = (string)values.Dequeue();
            appState.Proximity         = (string)values.Dequeue();
            appState.SelectionLayer    = (string)values.Dequeue();
            appState.SelectionIds      = StringCollection.FromString((string)values.Dequeue());
            appState.Query             = (string)values.Dequeue();
            appState.DataTab           = (string)values.Dequeue();
            appState.MarkupCategory    = (string)values.Dequeue();
            appState.MarkupGroups      = StringCollection.FromString((string)values.Dequeue());
            appState.Markup            = FromJson <List <Markup> >((string)values.Dequeue());
            appState.FunctionTabs      = (FunctionTab)(Convert.ToInt32((string)values.Dequeue()));
            appState.ActiveFunctionTab = (FunctionTab)(Convert.ToInt32((string)values.Dequeue()));
            appState.Extent            = EnvelopeExtensions.FromDelimitedString((string)values.Dequeue(), Separator2);
            appState.VisibleLayers     = LayersFromString((string)values.Dequeue());
            appState.VisibleTiles      = LayersFromString((string)values.Dequeue());
            appState.Level             = (string)values.Dequeue();
            break;
        }

        return(appState);
    }