/// <summary> /// Parses a Layer element /// </summary> /// <param name="sr">A text reader</param> /// <param name="m">The map</param> /// <param name="shapePath">Path to the geodata file</param> private static void ParseLayer(TextReader sr, Map m, string shapePath) { string line; double maxScale = double.MaxValue; double minScale = double.MinValue; string connType = "local"; string name = ""; string data = ""; string type = ""; string classItem = ""; List <ClassElement> classes = new List <ClassElement>(); while ((line = sr.ReadLine()) != null) { line = TrimFixLine(line); string[] parts = ParseLine(line); if (parts != null && parts.Length > 0) { if (string.Compare(parts[0], "CLASS", StringComparison.InvariantCultureIgnoreCase) == 0) { classes.Add(ParseClass(sr)); } else if (string.Compare(parts[0], "CLASSITEM", StringComparison.InvariantCultureIgnoreCase) == 0) { classItem = parts[1]; } else if (string.Compare(parts[0], "END", StringComparison.InvariantCultureIgnoreCase) == 0) { var lay = new VectorLayer(name); lay.MaxVisible = maxScale; lay.MinVisible = minScale; if (connType == "local") { if (!Path.HasExtension(data)) { data = data + ".shp"; } Data.Providers.ShapeFile sf = new Data.Providers.ShapeFile(data, true); lay.DataSource = sf; } ApplyStyling(lay, classes, classItem, type); m.Layers.Add(lay); return; } else if (string.Compare(parts[0], "MAXSCALEDENOM", StringComparison.InvariantCultureIgnoreCase) == 0) { maxScale = Convert.ToDouble(parts[1], CultureInfo.InvariantCulture); } else if (string.Compare(parts[0], "TYPE", StringComparison.InvariantCultureIgnoreCase) == 0) { type = parts[1]; } else if (string.Compare(parts[0], "MINSCALEDENOM", StringComparison.InvariantCultureIgnoreCase) == 0) { minScale = Convert.ToDouble(parts[1], CultureInfo.InvariantCulture); } else if (string.Compare(parts[0], "NAME", StringComparison.InvariantCultureIgnoreCase) == 0) { name = parts[1]; } else if (string.Compare(parts[0], "OPACITY", StringComparison.InvariantCultureIgnoreCase) == 0) { minScale = Convert.ToDouble(parts[1], CultureInfo.InvariantCulture); } else if (string.Compare(parts[0], "DATA", StringComparison.InvariantCultureIgnoreCase) == 0) { data = parts[1]; if (!Path.IsPathRooted(data)) { data = Path.Combine(shapePath, data); } } } } }
/// <summary> /// Parses a Layer element /// </summary> /// <param name="sr"></param> /// <param name="m"></param> private static void ParseLayer(StreamReader sr, Map m, string shapePath) { string line; double maxScale = double.MaxValue; double minScale = double.MinValue; string connType = "local"; string name = ""; string data = ""; string type = ""; string classItem = ""; List<ClassElement> classes = new List<ClassElement>(); while ((line = sr.ReadLine()) != null) { line = TrimFixLine(line); string[] parts = ParseLine(line); if (parts != null && parts.Length > 0) { if (string.Compare(parts[0], "CLASS", true) == 0) { classes.Add(ParseClass(sr, m)); } else if (string.Compare(parts[0], "CLASSITEM", true) == 0) { classItem = parts[1]; } else if (string.Compare(parts[0], "END", true) == 0) { ILayer lay = new VectorLayer(name); lay.MaxVisible = maxScale; lay.MinVisible = minScale; if (connType == "local") { if (!Path.HasExtension(data)) data = data + ".shp"; SharpMap.Data.Providers.ShapeFile sf = new Data.Providers.ShapeFile(data, true); (lay as VectorLayer).DataSource = sf; } ApplyStyling(lay, classes,classItem, type); m.Layers.Add(lay); return; } else if (string.Compare(parts[0], "MAXSCALEDENOM", true) == 0) { maxScale = Convert.ToDouble(parts[1], CultureInfo.InvariantCulture); } else if (string.Compare(parts[0], "TYPE", true) == 0) { type = parts[1]; } else if (string.Compare(parts[0], "MINSCALEDENOM", true) == 0) { minScale = Convert.ToDouble(parts[1], CultureInfo.InvariantCulture); } else if (string.Compare(parts[0], "NAME", true) == 0) { name = parts[1]; } else if (string.Compare(parts[0], "OPACITY", true) == 0) { minScale = Convert.ToDouble(parts[1], CultureInfo.InvariantCulture); } else if (string.Compare(parts[0], "DATA", true) == 0) { data = parts[1]; if (!Path.IsPathRooted(data)) { data = Path.Combine(shapePath, data); } } } } }