/// <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); }
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)); } }