Exemple #1
0
        /// <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;*/
        }
Exemple #2
0
 /// <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);
 }
Exemple #3
0
 internal MyLayer(MyGrid grid)
 {
     layerName = grid.Name;
     dataType  = MySpaceDataType.MyGrid;
     spaceData = new MySpaceData(grid);
     Visible   = true;
     filepath  = grid.FilePath;
 }
Exemple #4
0
 /// <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);
 }
Exemple #5
0
 /// <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;
 }
Exemple #6
0
 /// <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;
 }
Exemple #7
0
 /// <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;
 }
Exemple #8
0
 /// <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;
 }
Exemple #9
0
        /// <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;
            }
        }
Exemple #10
0
 /// <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;
 }
Exemple #11
0
        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);
        }
Exemple #12
0
        /// <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();
        }
Exemple #13
0
        /// <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;
                }
            }
        }
Exemple #14
0
 /// <summary>
 /// 基于栅格数据的构造函数
 /// </summary>
 /// <param name="grid"></param>
 internal MySpaceData(MyGrid grid)
 {
     myGrid   = grid;
     dataName = grid.Name;
     dataType = MySpaceDataType.MyGrid;
 }
Exemple #15
0
 public Renderer(MySpaceDataType datatype_value)
 {
     datatype = datatype_value;
 }
Exemple #16
0
        //public SimpleRenderer()        {  symbolstyle=new Symbol (); }

        public SimpleRenderer(MySpaceDataType datatype_value)
        {
            SymbolCount = 1;
            datatype    = datatype_value;
            symbolstyle = CreatNewSymbol();
        }
Exemple #17
0
        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;
            }
            }
        }
Exemple #18
0
 /// <summary>
 /// 复制渲染方式
 /// </summary>
 /// <param name="from"></param>
 /// <returns></returns>
 public virtual void CopyRenderer(Renderer from)
 {
     this.datatype = from.DataType;
 }