public PolygonLayer() { elements = new List <Polygon>(); dataset = new PropertyDataSet(); type = LayerType.Polygon; }
public PointLayer() { elements = new List <MPoint>(); dataset = new PropertyDataSet(); type = LayerType.Point; }
public LineLayer() { elements = new List <Line>(); dataset = new PropertyDataSet(); type = LayerType.Line; }
/// <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); }