Exemplo n.º 1
0
        public static GisShapeBase ToShape(IGeometry geometry, IEnumerable<object> data, LayerVector layer)
        {
            if (geometry == null)
                throw new Exception("Cannot convert a null geometry");

            GisShapeBase result;

            if (geometry is ScreenPoint)
            {
                var p = geometry as ScreenPoint;
                result = new GisShapePoint(layer);
                ((GisShapePoint)result).Point.X = p.X;
                ((GisShapePoint)result).Point.Y = p.Y;
            }
            else if (geometry is LineString)
            {
                var p = geometry as LineString;
                result = new GisShapeArc(layer);                

                foreach (var c in p.Coordinates)
                {
                    ((GisShapeArc)result).Points.Add(new GisPoint(c.X, c.Y));
                }
            }
            else if (geometry is Polygon)
            {
                var p = geometry as Polygon;
                result = new GisShapePolygon(layer);

                foreach (var c in p.Coordinates)
                {
                    ((GisShapePolygon)result).Points.Add(new GisPoint(c.X, c.Y));
                }

                foreach (var ir0 in p.InteriorRings)
                {
                    var ir1 = new Collection<GisPoint>();
                    ((GisShapePolygon)result).InteriorRings.Add(ir1);

                    foreach (var c in ir0.Coordinates)
                    {
                        ir1.Add(new GisPoint(c.X, c.Y));
                    }
                }
            }
            else if (geometry is MultiPolygon)
            {
                var p = geometry as MultiPolygon;
                result = new GisShapeMultiPolygon(layer);

                foreach (var g in p.Geometries)
                {
                    var child = new GisShapeMultiPolygon.PolygonGeometry();
                    ((GisShapeMultiPolygon)result).Geometries.Add(child);

                    foreach (var c in g.Coordinates)
                    {
                        child.Points.Add(new GisPoint(c.X, c.Y));
                    }

                    foreach (var ir0 in ((Polygon)g).InteriorRings)
                    {
                        var ir1 = new Collection<GisPoint>();
                        child.InteriorRings.Add(ir1);

                        foreach (var c in ir0.Coordinates)
                        {
                            ir1.Add(new GisPoint(c.X, c.Y));
                        }
                    }
                }
            }
            else
            {
                throw new NotImplementedException("Other geometries are not implemented");
            }

            int i = 0;
            foreach(var d in data)
            {
                string key = layer.Fields[i].Name;
                result[key] = d;
                i++;
            }

            return result;
        }
Exemplo n.º 2
0
 /// <summary>
 /// Creates a new instance of the <see cref="GisShapePoint"/>
 /// </summary>
 public GisShapePoint(LayerVector ll)
     : base(ll)
 {
     _point = new GisPoint();
     _point.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(_point_PropertyChanged);
 }
Exemplo n.º 3
0
        /// <summary>
        /// Returns a list of shapes contained in the passed GML string
        /// </summary>
        /// <param name="gml">GML string</param>
        /// <param name="layer">Layer where to load features</param>
        /// <param name="extent">extent of the shapes</param>
        /// <returns>List of shapes</returns>
        public static GisShapeCollection GetShapes(string gml, LayerVector layer, out Extent extent)
        {
            var res = new GisShapeCollection();
            res.Name = layer.Name;

            var slayer = new List<string>();

            foreach (LayerField t in layer.Fields)
            {
                slayer.Add(t.Name);
            }

            var provider = new SharpMap.GmlUtils.GmlProvider(gml, slayer);

            if (provider.Shapes == null)
            {
                extent = new Extent(provider.Extent.MinX,provider.Extent.MinY,provider.Extent.MaxX,provider.Extent.MaxY);
                return res;
            }

            for (int i = 0; i < provider.Shapes.Count; i++)
            {
                var shpOrig = provider.Shapes[i];
                GisShapeBase shpDest = layer.CreateShape();

                if (shpDest is GisShapePoint)
                {
                    (shpDest as GisShapePoint).Point.X = (shpOrig.Geometry as Point).X;
                    (shpDest as GisShapePoint).Point.Y = (shpOrig.Geometry as Point).Y;
                }
                else if (shpDest is GisShapeArc)
                {
                    for (int j=0; j<(shpOrig.Geometry as LineString).Coordinates.Length; j++)
                    {
                        var p = new GisPoint();
                        p.X = (shpOrig.Geometry as LineString).Coordinates[j].X;
                        p.Y = (shpOrig.Geometry as LineString).Coordinates[j].Y;
                        (shpDest as GisShapeArc).Points.Add(p);
                    }
                }
                else if (shpDest is GisShapeMultiPoint)
                {
                    for (int j = 0; j < (shpOrig.Geometry as MultiPoint).Geometries.Length; j++)
                    {
                        var p = new GisPoint();
                        p.X = ((shpOrig.Geometry as MultiPoint).Geometries[j] as IPoint).X;
                        p.Y = ((shpOrig.Geometry as MultiPoint).Geometries[j] as IPoint).Y;
                        (shpDest as GisShapeMultiPoint).Points.Add(p);
                    }
                }
                else if (shpDest is GisShapePolygon)
                {
                    for (int j = 0; j < (shpOrig.Geometry as Polygon).ExteriorRing.Coordinates.Length; j++)
                    {
                        var p = new GisPoint();
                        p.X = (shpOrig.Geometry as Polygon).ExteriorRing.Coordinates[j].X;
                        p.Y = (shpOrig.Geometry as Polygon).ExteriorRing.Coordinates[j].Y;
                        (shpDest as GisShapePolygon).Points.Add(p);
                    }
                }

                shpDest.UID = shpOrig.UID;
                shpDest.IsSelected = shpOrig.IsSelected;

                IEnumerable<string> keys = shpOrig.Keys;
                foreach(string key in keys)
                {
                    shpDest[key] = shpOrig[key];
                }

                if (shpDest != null)
                    res.Add(shpDest);
            }

            if (provider.Extent != null)
                extent = new Extent(provider.Extent.MinX, provider.Extent.MinY, provider.Extent.MaxX, provider.Extent.MaxY);
            else
                extent = new Extent();

            return res;
        }
 public GisShapeMultiPolygon(LayerVector layer) : base(layer)
 {
 }
Exemplo n.º 5
0
 /// <summary>
 /// Creates a new instance of the <see cref="GisShapeBase"/>
 /// </summary>
 public GisShapeBase(LayerVector layer)
 {
     //PropertyChanged = (s, e) => { };
     Layer = layer;
 }
Exemplo n.º 6
0
        /// <summary>
        /// Populates the types cache
        /// </summary>
        private void PopulateTypes(LayerVector ll)
        {
            _types = new Dictionary<string, GisFieldType>();

            for (int i = 0; i < ll.Fields.Count; i++)
            {
                _types.Add(ll.Fields[i].Name, ll.Fields[i].FieldType);
            }
        }