/// <summary> /// Reads LineString shapefile /// </summary> /// <param name="stream"></param> /// <returns></returns> protected virtual IList ReadLineStringData(Stream stream) { IList list = new ArrayList(); // Jump to first header stream.Seek(100, SeekOrigin.Begin); // Read big endian informations using (BigEndianBinaryReader beReader = new BigEndianBinaryReader(stream)) { // Read little endian informations using (BinaryReader leReader = new BinaryReader(stream)) { // For each header while (stream.Position < stream.Length) { ReadFeatureHeader(beReader); shapeReader.ReadBoundingBox(leReader); int[] indexParts = null; int numParts = shapeReader.ReadNumParts(leReader); int numPoints = shapeReader.ReadNumPoints(leReader); indexParts = shapeReader.ReadIndexParts(leReader, numParts); Coordinate[] coordinates = shapeReader.ReadCoordinates(leReader, numPoints); if (numParts == 1) { list.Add(shapeReader.CreateLineString(coordinates)); } else { list.Add(shapeReader.CreateMultiLineString(numPoints, indexParts, coordinates)); } } } } return(list); }