示例#1
0
        /// <summary>
        /// Reads list of Projected CS
        /// </summary>
        /// <returns></returns>
        private bool ReadPcs()
        {
            _listPcs.Clear();

            DbConnection conn = _provider.CreateConnection(_dbname); // new DbConnection(get_ConectionString());
            DbCommand    cmd  = conn.CreateCommand();

            cmd.CommandText = Constants.SqlPcs;

            conn.Open();
            DbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

            int codeColumn     = ColumnIndexByName(reader, Constants.CmnCsCode);
            int nameColumn     = ColumnIndexByName(reader, Constants.CmnCsName);
            int sourceColumn   = ColumnIndexByName(reader, Constants.CmnCsSource);
            int leftColumn     = ColumnIndexByName(reader, Constants.CmnCsLeft);
            int rightColumn    = ColumnIndexByName(reader, Constants.CmnCsRight);
            int bottomColumn   = ColumnIndexByName(reader, Constants.CmnCsSouth);
            int topColumn      = ColumnIndexByName(reader, Constants.CmnCsNorth);
            int areaNameColumn = ColumnIndexByName(reader, Constants.CmnCsAreaName);
            int remarksColumn  = ColumnIndexByName(reader, Constants.CmnCsRemarks);
            int scopeColumn    = ColumnIndexByName(reader, Constants.CmnCsScope);
            int typeColumn     = ColumnIndexByName(reader, Constants.CmnCsProjection);
            int localColumn    = ColumnIndexByName(reader, Constants.CmnCsLocal);
            int proj4Column    = ColumnIndexByName(reader, Constants.CmnCsProj4);
            int esriNameColumn = ColumnIndexByName(reader, Constants.EsriName);

            if (codeColumn == -1 || nameColumn == -1 || sourceColumn == -1 || leftColumn == -1 || rightColumn == -1 ||
                bottomColumn == -1 || topColumn == -1 || areaNameColumn == -1 || remarksColumn == -1 ||
                scopeColumn == -1 || typeColumn == -1 || localColumn == -1 || proj4Column == -1 || esriNameColumn == -1)
            {
                MessageService.Current.Warn("The expected field isn't found in the [Coordinate Systems] table");
                return(false);
            }

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    var pcs = new ProjectedCs
                    {
                        Code       = reader.GetInt32(codeColumn),
                        Name       = reader.GetString(nameColumn),
                        Left       = reader.GetDouble(leftColumn),
                        Right      = reader.GetDouble(rightColumn),
                        Top        = reader.GetDouble(topColumn),
                        Bottom     = reader.GetDouble(bottomColumn),
                        SourceCode = reader.GetInt32(sourceColumn),
                        Scope      = reader.GetString(scopeColumn),
                        AreaName   = reader.GetString(areaNameColumn),
                        Proj4      =
                            (!reader.IsDBNull(proj4Column)) ? reader.GetString(proj4Column) : "",
                        ProjectionType =
                            (!reader.IsDBNull(typeColumn)) ? reader.GetString(typeColumn) : "",
                        Remarks =
                            (!reader.IsDBNull(remarksColumn))
                                              ? reader.GetString(remarksColumn)
                                              : "",
                        Local    = false,
                        EsriName =
                            (!reader.IsDBNull(esriNameColumn))
                                              ? reader.GetString(esriNameColumn)
                                              : ""
                    };

                    if (!reader.IsDBNull(localColumn))
                    {
                        pcs.Local = reader.GetBoolean(localColumn);
                    }

                    _listPcs.Add(pcs);
                }
            }
            return(true);
        }
示例#2
0
        private void FillRegions(TreeNodeAdv nodeWorld, bool showFullExtents)
        {
            // adding regions
            Hashtable dctRegions  = new Hashtable();
            var       listRegions = Database.Regions.Where(r => r.ParentCode == 1);

            foreach (var region in listRegions)
            {
                var nodeRegion = nodeWorld.Nodes.Add(region.Code.ToString(), region.Name, TreeViewConstants.IconFolder);
                dctRegions.Add(region.Code, nodeRegion);
            }

            // local GCS
            var listRegions2 = Database.Regions.Where(r => r.ParentCode > 1 && dctRegions.ContainsKey(r.ParentCode));

            foreach (var region in listRegions2)
            {
                var nodeRegion = dctRegions[region.ParentCode] as TreeNodeAdv;
                if (nodeRegion == null)
                {
                    continue;
                }

                var nodeSubregion = nodeRegion.Nodes.Add(region.Code.ToString(), region.Name,
                                                         TreeViewConstants.IconFolder);
                dctRegions.Add(region.Code, nodeSubregion);

                var listCountries =
                    region.Countries.Where(cn => cn.IsActive).Where(c => c.GeographicCs.Any(cs => cs.IsActive));
                foreach (var country in listCountries)
                {
                    TreeNodeAdv nodeCountry = null;
                    // it's to difficult to determine whether the country should be shown

                    foreach (var geographicCs in country.GeographicCs.Where(cs => cs.IsActive).OrderBy(gcs => gcs.Name))
                    {
                        var gcs = (GeographicCs)geographicCs;
                        // when extents are limited, no need to show global systems for each country
                        if (!showFullExtents && gcs.Type != GeographicalCsType.Local)
                        {
                            continue;
                        }

                        if (gcs.Type != GeographicalCsType.Local || _dctLocalWithClassification.ContainsKey(gcs.Code))
                        {
                            var projections = new List <ProjectedCs>();
                            foreach (int code in country.ProjectedCs)
                            {
                                ProjectedCs pcs = gcs.ProjectionByCode(code);
                                if (pcs != null && pcs.IsActive)
                                {
                                    projections.Add(pcs);
                                }
                            }

                            if (projections.Any())
                            {
                                // country node will be added only here
                                if (nodeCountry == null)
                                {
                                    nodeCountry = nodeSubregion.Nodes.Add(country.Code.ToString(), country.Name,
                                                                          TreeViewConstants.IconFolder);
                                }

                                var nodeGcs = nodeCountry.Nodes.Add(gcs.Code.ToString(), gcs.Name,
                                                                    TreeViewConstants.IconGlobe);
                                nodeGcs.Tag = gcs;
                                AddProjections(nodeGcs, gcs, projections);
                            }
                        }
                        else
                        {
                            if (nodeCountry == null)
                            {
                                nodeCountry = nodeSubregion.Nodes.Add(country.Code.ToString(), country.Name,
                                                                      TreeViewConstants.IconFolder);
                            }

                            // local GCS should be added to country even if there is no projection specified
                            var nodeGcs = nodeCountry.Nodes.Add(gcs.Code.ToString(), gcs.Name,
                                                                TreeViewConstants.IconGlobe);
                            nodeGcs.Tag = gcs;

                            foreach (var pcs in gcs.Projections.OrderBy(cs => cs.Name))
                            {
                                var nodePcs = nodeGcs.Nodes.Add(pcs.Code.ToString(), pcs.Name, TreeViewConstants.IconMap);
                                nodePcs.Tag = pcs;
                            }
                        }
                    }
                }
            }

            // regional GCS
            var list1 =
                Database.GeographicCs.Where(cs => cs.Type == GeographicalCsType.Regional && cs.IsActive)
                .OrderBy(cs => cs.Name);

            foreach (var gcs in list1)
            {
                var nodeRegion = dctRegions[gcs.RegionCode] as TreeNodeAdv;
                if (nodeRegion == null)
                {
                    continue;
                }

                var nodeGcs = nodeRegion.Nodes.Add(gcs.Code.ToString(), gcs.Name, TreeViewConstants.IconGlobe);
                nodeGcs.Tag = gcs;
                AddProjections(nodeGcs, gcs, gcs.Projections.Where(cs => !cs.Local));
            }
        }