Exemplo n.º 1
0
        /// <summary>
        /// Read a shapefile Point record.                                      POINT !!!! Z = 3
        /// </summary>
        /// <param name="stream">Input stream.</param>
        /// <param name="record">Shapefile record to be updated.</param>
        private static void ReadPoint(Stream stream, ShapeFileRecord record)
        {
            // Points - add a single point.
            //,double XMax,double XMin,double YMax,double YMin
            Vector3 p = new Vector3();

            p.x = (float)ShapeFile.ReadDouble64_LE(stream);
            p.y = (float)ShapeFile.ReadDouble64_LE(stream);
            p.z = 3;

            record.Points.Add(p);

            // Bounding Box.
            record.XMin = p.x;
            record.YMin = p.y;
            //record.ZMin = p.z;
            record.XMax = record.XMin;
            record.YMax = record.YMin;
            // record.ZMax = record.ZMin;
        }
Exemplo n.º 2
0
        /// <summary>
        /// Read a shapefile MultiPoint record.                                    MULTIPOINT !!!!! Z= 4
        /// </summary>
        /// <param name="stream">Input stream.</param>
        /// <param name="record">Shapefile record to be updated.</param>
        private static void ReadMultipoint(Stream stream, ShapeFileRecord record)
        {
            // Bounding Box.
            record.XMin = ShapeFile.ReadDouble64_LE(stream);
            record.YMin = ShapeFile.ReadDouble64_LE(stream);
            //record.ZMin = ShapeFile.ReadDouble64_LE(stream);
            record.XMax = ShapeFile.ReadDouble64_LE(stream);
            record.YMax = ShapeFile.ReadDouble64_LE(stream);
            //record.ZMax = ShapeFile.ReadDouble64_LE(stream);


            // Num Points.
            int numPoints = ShapeFile.ReadInt32_LE(stream);

            // Points.
            for (int i = 0; i < numPoints; i++)
            {
                Vector3 p = new Vector3();
                p.x = (float)ShapeFile.ReadDouble64_LE(stream);
                p.y = (float)ShapeFile.ReadDouble64_LE(stream);
                p.z = 4;
                record.Points.Add(p);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Read a shapefile record.
        /// </summary>
        /// <param name="stream">Input stream.</param>



        public ShapeFileRecord ReadShapeFileRecord(Stream stream)
        {
            ShapeFileRecord record = new ShapeFileRecord();

            //  MainWindow mw = new MainWindow();
            // Record Header.

            record.RecordNumber  = ShapeFile.ReadInt32_BE(stream);
            record.ContentLength = ShapeFile.ReadInt32_BE(stream);


            // Shape Type.
            record.ShapeType = ShapeFile.ReadInt32_LE(stream);


            // Read the shape geometry, depending on its type.
            switch (record.ShapeType)
            {
            case (int)ShapeType.NullShape:
                // Do nothing.
                break;

            case (int)ShapeType.Point:
                ShapeFile.ReadPoint(stream, record);
                break;

            case (int)ShapeType.PolyLine:
                // PolyLine has exact same structure as Polygon in shapefile.
                ShapeFile.ReadPolygon(stream, record);
                break;

            case (int)ShapeType.Polygon:
                ShapeFile.ReadPolygon(stream, record);
                break;

            case (int)ShapeType.Multipoint:
                ShapeFile.ReadMultipoint(stream, record);
                break;

            default:
            {
                string msg = String.Format(System.Globalization.CultureInfo.InvariantCulture, "ShapeType {0} is not supported.", (int)record.ShapeType);
                throw new ArgumentException(msg);
            }
            }

            // Add the record to our internal list.
            // Check if list Points is empty or not.
            if (record.Points.Count < 1)
            {
                return(record);
            }
            else
            {
                //PART POLYGON RECORD !!!! //////////////////////////////////////////////////////////////////
                //Check if list of int "Parts" is superior to 1.
                if (record.Parts.Count > 1)
                {
                    for (int a = 0; a < record.Parts.Count; a++)
                    {
                        ShapeFileRecord record1 = new ShapeFileRecord();
                        if (a + 1 < record.Parts.Count)
                        {
                            for (int b = record.Parts[a]; b < record.Parts[a + 1]; b++)
                            {
                                Vector3 p = new Vector3();
                                p.x = record.Points[b].x;
                                p.y = record.Points[b].y;
                                p.z = record.Points[b].z;
                                record1.Points.Add(p);
                                //Debug.Log("Valeur de x" + p.x);
                                //Debug.Log("Valeur de y" + p.y);
                                //Debug.Log("Valeur de z" + p.z);
                            }
                            record1.ShapeType = 5;
                            record1.Parts.Add(record.Parts[a]);
                            this.Myrecords.Add(record1);
                        }
                        else
                        {
                            for (int b = record.Parts[a]; b < record.Points.Count; b++)
                            {
                                Vector3 p = new Vector3();
                                p.x = record.Points[b].x;
                                p.y = record.Points[b].y;
                                p.z = record.Points[b].z;
                                record1.Points.Add(p);
                            }
                            record1.ShapeType = 5;
                            record1.Parts.Add(0);
                            this.Myrecords.Add(record1);
                        }
                    }
                    this.records.Add(record);
                    return(record);
                }
                this.records.Add(record);
                this.Myrecords.Add(record);
                return(record);
            }
        }