private async void LoadSpatialReferencesAsync() { //init - placeholder _executing = true; OnPropertyChanged("IsExecutingQuery"); _timer.Start(); _coordSystems = new ObservableCollection <CoordSystemCollection>(); _coordSystems.Add(new CoordSystemCollection() { Name = "Loading Geographic Coordinate Systems...", Regions = null }); _coordSystems.Add(new CoordSystemCollection() { Name = "Loading Projected Coordinate Systems...", Regions = null }); try { await System.Threading.Tasks.Task.Run(() => { Dictionary <string, Dictionary <string, CoordSystemRegion> > regions = new Dictionary <string, Dictionary <string, CoordSystemRegion> >(); regions.Add("Geographic Coordinate Systems", new Dictionary <string, CoordSystemRegion>()); //Geographic regions.Add("Projected Coordinate Systems", new Dictionary <string, CoordSystemRegion>()); //Projected string content = Resource1.sr_out; //Stored coordinate system information int startIndex = 0; string coordSystemType = "]]Geographic Coordinate Systems"; string remainder = ""; int idx = 9999; while (idx > 0) { idx = content.IndexOf(coordSystemType); if (idx < 0 && coordSystemType == "]]Geographic Coordinate Systems") { coordSystemType = "]]Projected Coordinate Systems"; idx = content.IndexOf(coordSystemType); } //now if it is less than zero, we are on the last coordinate system record //Note: "+2" to skip the ']]' in the search string string sr_record = content.Substring(0, idx > 0 ? idx + 2 : content.Length); //each sr comes in blocks of 4 string[] srs = sr_record.Split(new char[] { '|' }); //Get the name components first - includes the coordinate system type //and the region string[] names = srs[0].Split(new char[] { '/' }); var srCategory = names[0]; string sep = ""; string srRegion = ""; for (int n = 1; n < names.Length - 1; n++) { srRegion += sep + names[n]; sep = ", "; } var name = string.Format("{0} ({1})", names[names.Length - 1], srs[1]); var wkid = Int32.Parse(srs[2]); var wkt = srs[3]; //save it CoordSystemRegion region = null; if (!regions[srCategory].ContainsKey(srRegion)) { region = new CoordSystemRegion(); region.CoordSystemInfos = new List <CoordSystemInfo>(); region.Name = srRegion; regions[srCategory].Add(srRegion, region); } else { region = regions[srCategory][srRegion]; } CoordSystemInfo cs = new CoordSystemInfo() { Name = name, InternalName = srs[1], Region = srRegion, WKID = wkid, WKT = wkt }; region.CoordSystemInfos.Add(cs); if (idx > 0) { remainder = content.Substring(idx + 2); content = remainder; } } //save them _coordSystems.Clear(); _coordSystems = null; _coordSystems = new ObservableCollection <CoordSystemCollection>(); _coordSystems.Add(new CoordSystemCollection() { Name = "Geographic Coordinate Systems", Regions = regions["Geographic Coordinate Systems"].Values.ToList() }); _coordSystems.Add(new CoordSystemCollection() { Name = "Projected Coordinate Systems", Regions = regions["Projected Coordinate Systems"].Values.ToList() }); }); } finally { _timer.Stop(); _executing = false; OnPropertyChanged("IsExecutingQuery"); OnPropertyChanged("CoordinateSystems"); } }
private async void LoadSpatialReferencesAsync() { //init - placeholder _executing = true; OnPropertyChanged("IsExecutingQuery"); _timer.Start(); _coordSystems = new ObservableCollection<CoordSystemCollection>(); _coordSystems.Add(new CoordSystemCollection() { Name = "Loading Geographic Coordinate Systems...", Regions = null }); _coordSystems.Add(new CoordSystemCollection() { Name = "Loading Projected Coordinate Systems...", Regions = null }); try { await System.Threading.Tasks.Task.Run(() => { Dictionary<string, Dictionary<string, CoordSystemRegion>> regions = new Dictionary<string, Dictionary<string, CoordSystemRegion>>(); regions.Add("Geographic Coordinate Systems", new Dictionary<string, CoordSystemRegion>());//Geographic regions.Add("Projected Coordinate Systems", new Dictionary<string, CoordSystemRegion>());//Projected string content = Resource1.sr_out;//Stored coordinate system information int startIndex = 0; string coordSystemType = "]]Geographic Coordinate Systems"; string remainder = ""; int idx = 9999; while (idx > 0) { idx = content.IndexOf(coordSystemType); if (idx < 0 && coordSystemType == "]]Geographic Coordinate Systems") { coordSystemType = "]]Projected Coordinate Systems"; idx = content.IndexOf(coordSystemType); } //now if it is less than zero, we are on the last coordinate system record //Note: "+2" to skip the ']]' in the search string string sr_record = content.Substring(0, idx > 0 ? idx + 2 : content.Length); //each sr comes in blocks of 4 string[] srs = sr_record.Split(new char[] { '|' }); //Get the name components first - includes the coordinate system type //and the region string[] names = srs[0].Split(new char[] { '/' }); var srCategory = names[0]; string sep = ""; string srRegion = ""; for (int n = 1; n < names.Length - 1; n++) { srRegion += sep + names[n]; sep = ", "; } var name = string.Format("{0} ({1})", names[names.Length - 1], srs[1]); var wkid = Int32.Parse(srs[2]); var wkt = srs[3]; //save it CoordSystemRegion region = null; if (!regions[srCategory].ContainsKey(srRegion)) { region = new CoordSystemRegion(); region.CoordSystemInfos = new List<CoordSystemInfo>(); region.Name = srRegion; regions[srCategory].Add(srRegion, region); } else { region = regions[srCategory][srRegion]; } CoordSystemInfo cs = new CoordSystemInfo() { Name = name, InternalName = srs[1], Region = srRegion, WKID = wkid, WKT = wkt }; region.CoordSystemInfos.Add(cs); if (idx > 0) { remainder = content.Substring(idx + 2); content = remainder; } } //save them _coordSystems.Clear(); _coordSystems = null; _coordSystems = new ObservableCollection<CoordSystemCollection>(); _coordSystems.Add(new CoordSystemCollection() { Name = "Geographic Coordinate Systems", Regions = regions["Geographic Coordinate Systems"].Values.ToList() }); _coordSystems.Add(new CoordSystemCollection() { Name = "Projected Coordinate Systems", Regions = regions["Projected Coordinate Systems"].Values.ToList() }); }); } finally { _timer.Stop(); _executing = false; OnPropertyChanged("IsExecutingQuery"); OnPropertyChanged("CoordinateSystems"); } }