コード例 #1
0
        public void ImportLayer(MG_Layer layer)
        {
            if (layer == null)
            {
                return;
            }
            // stop multi same data
            if (this.IsTableExist(layer.GetLayerName()))
            {
                return;
            }

            this.CreateTable(layer.FieldSet, layer.Type);
            string layerName = layer.FieldSet.GetName();
            int    fc        = layer.GetFeatureCount();

            // save ext
            this.CreateTableExt();
            this.InsertExtent(layerName, layer.Extent);
            for (int i = 0; i < fc; i++)
            {
                MG_Feature f = layer.GetFeature(i);
                if (f.Geometry.Type == layer.Type)
                {
                    this.Insert(layerName, f.ValueSet, f.Geometry);
                }
            }
        }
コード例 #2
0
        public static MG_Layer LoadShapeFile(string filePath)
        {// xxx\line.shp
            MG_Layer mgLayer = new MG_Layer();

            try
            {
                Ogr.RegisterAll();
                DataSource ds    = Ogr.Open(filePath, 0);
                Layer      layer = ds.GetLayerByIndex(0);

                mgLayer.SetLayerName(layer.GetName());
                mgLayer.SetLayerType(AsGeometryType(layer.GetGeomType()));

                Envelope ext = new Envelope();
                layer.GetExtent(ext, 1);
                mgLayer.Extent   = AsExtent(ext);                    // collect data
                mgLayer.FieldSet = AsFieldSet(layer.GetLayerDefn()); // collect data

                int fc = layer.GetFeatureCount(1);
                for (int fid = 0; fid < fc; fid++)
                {
                    Feature    f         = layer.GetFeature(fid);
                    MG_Feature mgFeature = AsFeature(f);
                    mgLayer.AddFeature(mgFeature);// collect data
                }
            }
            catch (Exception err)
            {
                MessageBox.Show(err.ToString());
            }

            return(mgLayer);
        }
コード例 #3
0
        protected MG_FeatureSet GetFeatureSet(MG_FieldSet fieldSet, string table)
        {
            NpgsqlDataReader reader = this.SelectAll(table);

            if (reader == null || !reader.HasRows)
            {
                return(null);
            }

            MG_FeatureSet featureSet = new MG_FeatureSet();
            int           fc         = reader.FieldCount; // 4

            while (reader.Read())
            {// oid f1,f2,f3... geom
                MG_Feature  f        = new MG_Feature(fieldSet);
                MG_ValueSet valueSet = new MG_ValueSet();
                string      oid      = reader["oid"].ToString();
                string      geom     = reader["geomtext"].ToString();

                for (int i = 1; i < fc - 1; i++)
                {
                    string   str   = reader[i].ToString();
                    MG_Value value = new MG_Value(i - 1, str);
                    valueSet.Add(value);
                }
                f.ValueSet = valueSet;
                f.Geometry = MG_ShapeFileOper.AsGeometry(geom);
                featureSet.Add(f);
            }
            reader.Close();
            reader.Dispose();
            return(featureSet);
        }
コード例 #4
0
ファイル: MG_ToolDrawPoint.cs プロジェクト: justasabc/minigis
        public override void MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                Panel panel = (Panel)sender;
                this.FromPoint = new Point(e.X, e.Y);

                // draw point
                MG_BaseDisplay.FillPoint(panel.CreateGraphics(), brush, this.FromPoint, MG_Constant.PointRadius);

                // screen to map
                this.MapPoint = MG_BaseRender.ToPoint(this.FromPoint, this.MapView);

                //1 create a feature
                // 1.1 set geometry
                this.Feature.SetGeometry(this.MapPoint);
                // 1.2 set field value
                for (int i = 0; i < this.Feature.GetFieldSet().Count(); i++)
                {
                    this.Feature.SetValue(i, null);
                }

                //2 create a new feature
                MG_Feature newFeature = new MG_Feature(this.Feature);
                //3 add new feature to layer
                this.Layer.AddFeature(newFeature);

                //4 clear data to store the next point
                this.MapPoint.Clear();
            }
        }
コード例 #5
0
        public override void MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                this.IsMouseDown = false;

                // screen point to map point
                MG_LineString MapLineString = new MG_LineString();
                for (int i = 0; i < this.LineString.Count(); i++)
                {
                    MG_Point screenPoint = this.LineString.GetAt(i);
                    Point    screen      = new Point((int)screenPoint.x, (int)screenPoint.y);
                    MG_Point mapPoint    = MG_BaseRender.ToPoint(screen, this.MapView);
                    MapLineString.Add(mapPoint);
                }
                MG_LineString MapLineStringOther = new MG_LineString();
                for (int i = 0; i < this.LineStringOther.Count(); i++)
                {
                    MG_Point screenPoint = this.LineStringOther.GetAt(i);
                    Point    screen      = new Point((int)screenPoint.x, (int)screenPoint.y);
                    MG_Point mapPoint    = MG_BaseRender.ToPoint(screen, this.MapView);
                    MapLineStringOther.Add(mapPoint);
                }


                //1 create a feature
                // 1.1 set geometry
                this.Feature.SetGeometry(MapLineString);
                // 1.2 set field value
                for (int i = 0; i < this.Feature.GetFieldSet().Count(); i++)
                {
                    this.Feature.SetValue(i, null);
                }

                //2 create a new feature
                MG_Feature newFeature1 = new MG_Feature(this.Feature);
                //3 add new feature to layer
                this.Layer.AddFeature(newFeature1);

                //4 clear data to store the next linestring
                this.LineString.Clear();

                //1 create a feature
                // 1.1 set geometry
                this.Feature.SetGeometry(MapLineStringOther);
                // 1.2 set field value
                for (int i = 0; i < this.Feature.GetFieldSet().Count(); i++)
                {
                    this.Feature.SetValue(i, null);
                }

                //2 create a new feature
                MG_Feature newFeature2 = new MG_Feature(this.Feature);
                //3 add new feature to layer
                this.Layer.AddFeature(newFeature2);

                //4 clear data to store the next linestring
                this.LineStringOther.Clear();
            }
        }
コード例 #6
0
ファイル: MG_MapRender.cs プロジェクト: justasabc/minigis
        public static void RenderFeature(MG_Feature f, MG_MapView mapview, Graphics g)
        {
            //int realValue = GetRealValue(f.Symbol.LineWidth, mapview);
            Pen        pen   = new Pen(f.Symbol.OutlineColor, f.Symbol.LineWidth);
            SolidBrush brush = new SolidBrush(f.Symbol.FillColor);

            RenderGeometry(g, pen, brush, mapview, f.Geometry);
        }
コード例 #7
0
        public static Feature ToFeature(MG_Feature mgFeature)
        {
            // field set
            FeatureDefn def = ToFeatureDefn(mgFeature.GetFieldSet());
            Feature     f   = new Feature(def);

            // field value
            int fieldCount = mgFeature.GetFieldCount();

            for (int i = 0; i < fieldCount; i++)
            {
                object    value     = mgFeature.GetValue(i).Value;
                FieldType fieldType = f.GetFieldType(i);
                if (fieldType == FieldType.OFTString)
                {
                    if (value != null)
                    {
                        f.SetField(i, value.ToString());
                    }
                }
                else if (fieldType == FieldType.OFTInteger)
                {// id name url
                    if (value != null)
                    {
                        f.SetField(i, Int32.Parse(value.ToString()));
                    }
                }
                else if (fieldType == FieldType.OFTReal)
                {
                    if (value != null)
                    {
                        f.SetField(i, Double.Parse(value.ToString()));
                    }
                }
                else if (fieldType == FieldType.OFTDateTime)
                {
                    if (value != null)
                    {
                        DateTime dt = (DateTime)value;
                        f.SetField(i, dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second, dt.Millisecond);
                    }
                }
            }
            //geometry
            string   wkt = mgFeature.GetGeometry().AsWKT();
            Geometry g   = Geometry.CreateFromWkt(wkt);
            // test
            Envelope env = new Envelope();

            g.GetEnvelope(env);

            f.SetGeometry(g);

            //f.SetStyleString(null);

            return(f);
        }
コード例 #8
0
        public static MG_Feature AsFeature(Feature f)
        {
            FeatureDefn def       = f.GetDefnRef();
            MG_FieldSet fieldSet  = AsFieldSet(def);
            MG_Feature  mgFeature = new MG_Feature(fieldSet);//collect data

            // geometry
            Geometry    g        = f.GetGeometryRef();
            MG_Geometry geometry = AsGeometry(g);
            string      wkt      = geometry.AsWKT(); // Test

            mgFeature.SetGeometry(geometry);         //collect data

            // symbol
            string styleString = f.GetStyleString();
            //f.SetStyleString(styleString);

            // attribute value
            MG_ValueSet valueSet    = new MG_ValueSet();
            int         fid         = f.GetFID();
            int         nFieldCount = f.GetFieldCount();

            for (int iField = 0; iField < nFieldCount; iField++)
            {
                FieldDefn fdef      = def.GetFieldDefn(iField);
                FieldType fieldType = fdef.GetFieldType();//OFTInteger OFTString OFTString

                MG_Value mgValue = new MG_Value();
                mgValue.Index = iField;// collect data
                //collect data
                if (fieldType == FieldType.OFTString)
                {
                    mgValue.Value = f.GetFieldAsString(iField);
                }
                else if (fieldType == FieldType.OFTInteger)
                {
                    mgValue.Value = f.GetFieldAsInteger(iField);
                }
                else if (fieldType == FieldType.OFTReal)
                {
                    mgValue.Value = f.GetFieldAsDouble(iField);
                }
                else if (fieldType == FieldType.OFTDateTime)
                {
                    int year, month, day, hour, minute, second, flag;
                    f.GetFieldAsDateTime(iField, out year, out month, out day, out hour, out minute, out second, out flag);
                    mgValue.Value = new DateTime(year, month, day, hour, minute, second, flag);
                }
                valueSet.Add(mgValue);
            }
            mgFeature.ValueSet = valueSet;//collect data

            return(mgFeature);
        }
コード例 #9
0
        public override void MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                this.IsMouseDown = false;
                Panel panel = (Panel)sender;

                if (this.Step == 0)
                {
                }
                else if (this.Step == 1)
                {
                }
                else if (this.Step == 2)
                {
                    // add last point
                    this.Point3 = new Point(e.X, e.Y);
                    MG_Point mapPoint3 = MG_BaseRender.ToPoint(Point3, this.MapView);
                    this.LineString.Add(mapPoint3);

                    // add first point again(same to first point)
                    MG_Point firstPoint = MG_BaseRender.ToPoint(this.FromPoint, this.MapView);
                    this.LineString.Add(firstPoint);
                    // add to polygon
                    this.Polygon.Add(this.LineString);

                    //1 create a feature
                    // 1.1 set geometry
                    this.Feature.SetGeometry(this.Polygon);
                    // 1.2 set field value
                    for (int i = 0; i < this.Feature.GetFieldSet().Count(); i++)
                    {
                        this.Feature.SetValue(i, null);
                    }

                    //2 create a new feature
                    MG_Feature newFeature = new MG_Feature(this.Feature);
                    //3 add new feature to layer
                    this.Layer.AddFeature(newFeature);

                    //4 clear data to store the next linestring
                    this.Polygon.Clear();
                    this.LineString.Clear();

                    // 5 reset control params
                    this.Step      = 0;
                    this.FromPoint = Point.Empty;
                    this.ToPoint   = Point.Empty;
                    this.Point3    = Point.Empty;
                }
            }
        }
コード例 #10
0
        public MG_BaseTool(MG_ToolType type, MG_Layer layer, MG_MapView mapview)
        {
            this.ToolType = type;

            this.Layer   = layer;
            this.MapView = mapview;
            if (layer != null)
            {// pan tool: layer==null
                this.Feature = new MG_Feature(this.Layer.GetFieldSet());
            }

            // empty point
            this.FromPoint  = Point.Empty;
            this.ToPoint    = Point.Empty;
            this.Point3     = Point.Empty;
            this.SelectRect = Rectangle.Empty;
        }
コード例 #11
0
        private DataTable GetDataTable(MG_Layer layer)
        {
            // Create a new DataTable.
            DataTable table = new DataTable(layer.GetLayerName());

            // add oid
            DataColumn oid_Column = new DataColumn("OID", Type.GetType("System.Int32"));

            table.Columns.Add(oid_Column);

            int i, j;

            // Add the column
            for (i = 0; i < layer.GetFieldSet().Count(); i++)
            {
                MG_Field   field  = layer.GetFieldSet().GetAt(i);
                DataColumn column = new DataColumn(field.Name);
                column.DataType = Type.GetType("System.String");
                // Add the Column to the DataColumnCollection.
                table.Columns.Add(column);
            }

            // Add the row
            for (i = 0; i < layer.GetFeatureCount(); i++)
            {
                MG_Feature f   = layer.GetFeature(i);
                DataRow    row = table.NewRow();
                // add oid
                row[0] = i + 1;

                for (j = 0; j < f.GetFieldCount(); j++)
                {
                    object value = f.GetValue(j).Value;
                    if (value != null)
                    {
                        row[j + 1] = value.ToString();
                    }
                }

                // Add the row to the DataRowCollection.
                table.Rows.Add(row);
            }

            return(table);
        }