/// <summary> /// 基于文件路径的构造函数 /// </summary> internal MyLayer(string layerpath) { if (Path.GetExtension(layerpath) == ".shp") { Shapefile shp = new Shapefile(layerpath); layerName = shp.Name; dataType = shp.DataType; spaceData = new MySpaceData(shp); renderer = new SimpleRenderer(dataType); rendertype = RendererType.SimpleRenderer; hastext = false; Visible = true; filepath = shp.FilePath; } else { CosmosGisVector cgv = new CosmosGisVector(layerpath); layerName = cgv.Name; dataType = cgv.SpaceDataType; spaceData = new MySpaceData(cgv); renderer = new SimpleRenderer(dataType); rendertype = RendererType.SimpleRenderer; hastext = false; Visible = true; filepath = cgv.FilePath; } /*///TODO * spaceData = new MySpaceData(""); * layerName = Path.GetFileNameWithoutExtension(fileName); * dataType = spaceData.DataType; * this.Visible = true;*/ }
/// <summary> /// 基于Shapefile的构造函数 /// </summary> /// <param name="shp"></param> internal MySpaceData(Shapefile shp) { filePath = shp.AttrFilePath; dataName = shp.Name; dataType = shp.DataType; geoFeature = shp.GetGeometryFeature(); property = new MyProperty(shp.AttrFilePath); }
internal MyLayer(MyGrid grid) { layerName = grid.Name; dataType = MySpaceDataType.MyGrid; spaceData = new MySpaceData(grid); Visible = true; filepath = grid.FilePath; }
/// <summary> /// 基于CosmosGisVector的构造函数 /// </summary> /// <param name="cgv"></param> internal MySpaceData(CosmosGisVector cgv) { filePath = cgv.AttrFilePath; dataName = cgv.Name; dataType = cgv.SpaceDataType; geoFeature = cgv.GetGeometryFeature(); property = new MyProperty(cgv.AttrFilePath); }
/// <summary> /// 构造函数,参数不能修改 /// </summary> /// <param name="datatype_value">要素的类型</param> /// <param name="newfieldname">渲染字段名称</param> /// <param name="newvalues">所有该字段的值</param> public UniqueValueRenderer(MySpaceDataType datatype_value, string newfieldname, List <string> newvalues) { newvalues = newvalues.Distinct().ToList(); datatype = datatype_value; field = newfieldname; values = newvalues; symbolstyles = new List <Symbol>(); RandonSymbol(); SymbolCount = symbolstyles.Count; }
/// <summary> /// 基于CosmosGisVector的构造函数 /// </summary> /// <param name="cgv">CosmosGisVector</param> internal MyLayer(CosmosGisVector cgv) { layerName = cgv.Name; dataType = cgv.SpaceDataType; spaceData = new MySpaceData(cgv); renderer = new SimpleRenderer(dataType); rendertype = RendererType.SimpleRenderer; hastext = false; Visible = true; filepath = cgv.FilePath; }
/// <summary> /// 基于Shapefile的构造函数 /// </summary> /// <param name="shp">Shapefile</param> internal MyLayer(Shapefile shp) { layerName = shp.Name; dataType = shp.DataType; spaceData = new MySpaceData(shp); renderer = new SimpleRenderer(dataType); rendertype = RendererType.SimpleRenderer; hastext = false; Visible = true; filepath = shp.FilePath; }
/// <summary> /// 自定义分级层数的颜色分级构造函数 /// </summary> /// <param name="datatype_value"></param> /// <param name="newfieldname"></param> /// <param name="newvalues"></param> /// <param name="breakcount"></param> public ClassBreakRenderer(MySpaceDataType datatype_value, int breakcount, string newfieldname, List <double> newvalues) { datatype = datatype_value; field = newfieldname; values = newvalues; values.Sort(); BreakEqualByValue(breakcount); symbolmode = 1; symbolstyles = new List <Symbol>(); AutoSetColor(Color.Red, Color.Green); SymbolCount = symbolstyles.Count; }
/// <summary> /// //选择空间数据类型 /// </summary> private void comboBoxType_SelectedIndexChanged(object sender, EventArgs e) { switch (comboBoxType.SelectedIndex) { case 0: spaceDataType = MySpaceDataType.MyPoint; break; case 1: spaceDataType = MySpaceDataType.MyPolyLine; break; case 2: spaceDataType = MySpaceDataType.MyPolygon; break; } }
/// <summary> /// 自定义分级级数的分级方法,可选分级模式 /// </summary> /// <param name="datatype_value"></param> /// <param name="newfieldname"></param> /// <param name="newvalues"></param> /// <param name="breakcount"></param> /// <param name="newmode"></param> public ClassBreakRenderer(MySpaceDataType datatype_value, int breakcount, string newfieldname, List <double> newvalues, int newmode) { datatype = datatype_value; field = newfieldname; values = newvalues; values.Sort(); BreakEqualByValue(breakcount); symbolmode = newmode; symbolstyles = new List <Symbol>(); if (newmode == 1) { AutoSetColor(Color.Red, Color.Green); } else if (newmode == 2) { AutoSetSize(0.5, (0.5 + BreakCount * 0.5)); } SymbolCount = symbolstyles.Count; }
static private int GetSpaceDataTypeID(MySpaceDataType spaceDataType) { int id = -1; switch (spaceDataType) { case MySpaceDataType.MyPoint: id = 0; break; case MySpaceDataType.MyPolyLine: id = 1; break; case MySpaceDataType.MyPolygon: id = 2; break; } return(id); }
/// <summary> /// 在指定路径下创建指定类型的空白CGV文件 /// </summary> /// <param name="path">文件路径</param> /// <param name="spaceDataType">要素类型</param> public static void CreateEmptyCgv(string path, MySpaceDataType spaceDataType) { using (StreamWriter sw = new StreamWriter(path, false)) { string title = GetSpaceDataTypeID(spaceDataType).ToString() + " 10000000 -10000000 10000000 -10000000 0"; //文件头 sw.WriteLine(title); } string mdbFilePath = Path.GetDirectoryName(path) + "\\" + Path.GetFileNameWithoutExtension(path) + ".mdb"; ADOX.Catalog catalog = new Catalog(); catalog.Create(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + mdbFilePath); //此语句在数据库已经存在时会报错,待完善 string connectString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + mdbFilePath; OleDbConnection cnn = new OleDbConnection(connectString); cnn.Open(); OleDbCommand command = new OleDbCommand("Create Table " + Path.GetFileNameWithoutExtension(path) + "(FID integer primary key);", cnn); command.ExecuteNonQuery(); cnn.Close(); cnn.Dispose(); }
/// <summary> /// 基于文件路径的构造函数 /// </summary> /// <param name="path">文件路径</param> public CosmosGisVector(string path) { if (Path.GetExtension(path) != ".cgv") { throw new IOException("文件拓展名不正确!"); } this.filePath = path; this.Name = Path.GetFileNameWithoutExtension(path); this.attrFilePath = Path.GetDirectoryName(path) + "\\" + Name + ".mdb"; using (StreamReader sr = new StreamReader(new FileStream(path, FileMode.Open))) { string strLine = sr.ReadLine(); //读文件头 string[] data = strLine.Split(' '); spaceDataTypeID = int.Parse(data[0]); xmin = Double.Parse(data[1]); xmax = Double.Parse(data[2]); ymin = Double.Parse(data[3]); ymax = Double.Parse(data[4]); count = int.Parse(data[5]); switch (spaceDataTypeID) { case 0: spaceDataType = MySpaceDataType.MyPoint; ReadPointCgv(sr); break; case 1: spaceDataType = MySpaceDataType.MyPolyLine; ReadMultiPolylineCgv(sr); break; case 2: spaceDataType = MySpaceDataType.MyPolygon; ReadMultiPolygonCgv(sr); break; } } }
/// <summary> /// 基于栅格数据的构造函数 /// </summary> /// <param name="grid"></param> internal MySpaceData(MyGrid grid) { myGrid = grid; dataName = grid.Name; dataType = MySpaceDataType.MyGrid; }
public Renderer(MySpaceDataType datatype_value) { datatype = datatype_value; }
//public SimpleRenderer() { symbolstyle=new Symbol (); } public SimpleRenderer(MySpaceDataType datatype_value) { SymbolCount = 1; datatype = datatype_value; symbolstyle = CreatNewSymbol(); }
public Shapefile(string filePath) { this.filePath = filePath; fileName = Path.GetFileNameWithoutExtension(filePath); attrFilePath = Path.GetDirectoryName(filePath) + "\\" + fileName + ".mdb"; FileStream fs = new FileStream(filePath, FileMode.Open); BinaryReader br = new BinaryReader(fs); //读取文件头 fileCode = ReverseByte(br.ReadInt32()); for (int i = 1; i <= 5; i++) { br.ReadInt32(); } fileLength = ReverseByte(br.ReadInt32()) * 2; version = br.ReadInt32(); shapeTypeID = 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(); byteCount += 100; float xcenter = ((float)xmin + (float)xmax) / 2; float ycenter = ((float)ymin + (float)ymax) / 2; centerPos = new PointF(xcenter, ycenter); switch (shapeTypeID) { case 1: { shapeType = ShapeType.Point; ReadPointShp(br); dataType = MySpaceDataType.MyPoint; break; } case 3: { shapeType = ShapeType.Polyline; ReadPolyLineShp(br); dataType = MySpaceDataType.MyPolyLine; break; } case 5: { shapeType = ShapeType.Polygon; ReadPolygonShp(br); dataType = MySpaceDataType.MyPolygon; break; } default: { shapeType = ShapeType.NullShape; break; } } }
/// <summary> /// 复制渲染方式 /// </summary> /// <param name="from"></param> /// <returns></returns> public virtual void CopyRenderer(Renderer from) { this.datatype = from.DataType; }