/// <summary>
        /// Reads LineString shapefile
        /// </summary>
        /// <param name="stream"></param>
        /// <returns></returns>
        protected 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);
                        ICoordinate[] coordinates = shapeReader.ReadCoordinates(leReader, numPoints);

                        if (numParts == 1)
                        {
                            list.Add(shapeReader.CreateLineString(coordinates));
                        }
                        else
                        {
                            list.Add(shapeReader.CreateMultiLineString(numPoints, indexParts, coordinates));
                        }
                    }
                }
            }
            return(list);
        }