示例#1
0
 public PolygonLayer()
 {
     elements = new List <Polygon>();
     dataset  = new PropertyDataSet();
     type     = LayerType.Polygon;
 }
示例#2
0
 public PointLayer()
 {
     elements = new List <MPoint>();
     dataset  = new PropertyDataSet();
     type     = LayerType.Point;
 }
示例#3
0
 public LineLayer()
 {
     elements = new List <Line>();
     dataset  = new PropertyDataSet();
     type     = LayerType.Line;
 }
示例#4
0
        /// <summary>
        /// 读取shapefile主程序
        /// </summary>
        /// <param name="filename"></param>
        public static Layer readshpfile(string filename)
        {
            //Read dbf file
            PropertyDataSet set = new PropertyDataSet();

            set.New();
            string          path = Path.GetDirectoryName(filename) + "\\";
            string          name = Path.GetFileNameWithoutExtension(filename) + ".dbf";
            OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=DBASE III;");

            conn.Open();
            string sqlStr = "Select * from " + name;

            OleDbDataAdapter myAdapter = new OleDbDataAdapter(sqlStr, conn);
            //Build the Update and Delete SQL Statements
            OleDbCommandBuilder myBuilder = new OleDbCommandBuilder(myAdapter);


            //Fill the DataSet with the Table 'bookstock'
            myAdapter.Fill(set.table);
            for (int i = 0; i < set.table.Rows.Count; i++)
            {
                set.table.Rows[i]["ID"] = i + 1;
            }
            conn.Close();

            //Layer newlayer=new Layer();
            FileStream   sfilesream = new FileStream(filename, FileMode.Open);
            BinaryReader br         = new BinaryReader(sfilesream);

            br.BaseStream.Seek(0, SeekOrigin.Begin);
            uint filecode;

            uint[] unused = new uint[5];
            uint   filelength;
            int    version;
            int    shapetype;
            double Xmin;
            double Ymin;
            double Xmax;
            double Ymax;
            double Zmin;
            double Zmax;
            double Mmin;
            double Mmax;

            filecode = EndianConvert(br.ReadUInt32());
            for (int i = 0; i < 5; i++)
            {
                unused[i] = EndianConvert(br.ReadUInt32());
            }
            filelength = EndianConvert(br.ReadUInt32());
            version    = br.ReadInt32();
            shapetype  = br.ReadInt32();
            Xmin       = br.ReadDouble();
            Ymin       = br.ReadDouble();
            Xmax       = br.ReadDouble();
            Ymax       = br.ReadDouble();
            Zmin       = br.ReadDouble();
            Zmax       = br.ReadDouble();
            Mmin       = br.ReadDouble();
            Mmax       = br.ReadDouble();

            switch (shapetype)
            {
            case 0:
                break;

            case 1:
                PointLayer pointslayer = new PointLayer();
                //List<MPoint>points1=new List<MPoint>();
                readPoint(pointslayer.elements, br);
                pointslayer.dataset = set;
                pointslayer.FindMinMax();
                return(pointslayer);

            case 3:
                LineLayer linelayer = new LineLayer();
                //List<PList> multiPointList = new List<PList>();
                //Line lines = new Line(0,multiPointList);
                readLine(linelayer.elements, br);
                linelayer.dataset = set;
                linelayer.FindMinMax();
                return(linelayer);

            case 5:
                PolygonLayer polygonlayer = new PolygonLayer();
                //List<PList> multiPointList5 = new List<PList>();
                //Polygon polygons = new Polygon(0, multiPointList5);
                readPolygon(polygonlayer.elements, br);
                polygonlayer.dataset = set;
                polygonlayer.FindMinMax();
                return(polygonlayer);

            case 8:
                PointLayer pointslayer8 = new PointLayer();
                //List<MPoint>points1=new List<MPoint>();
                readPoint(pointslayer8.elements, br);
                pointslayer8.dataset = set;
                pointslayer8.FindMinMax();
                return(pointslayer8);

            case 11:
                break;

            case 13:
                break;

            case 15:
                break;

            case 18:
                break;

            case 21:
                PointLayer pointslayer21 = new PointLayer();
                //List<MPoint>points1=new List<MPoint>();
                readPoint(pointslayer21.elements, br);
                pointslayer21.dataset = set;
                pointslayer21.FindMinMax();
                return(pointslayer21);

            case 23:
                break;

            case 25:
                break;

            case 28:
                PointLayer pointslayer28 = new PointLayer();
                //List<MPoint>points1=new List<MPoint>();
                readPoint(pointslayer28.elements, br);
                pointslayer28.dataset = set;
                pointslayer28.FindMinMax();
                return(pointslayer28);

            case 31:
                break;
            }
            br.Close();
            sfilesream.Close();
            return(null);
        }