Exemple #1
0
        internal static void Transform(drawing.Graphics graphics, sb.Primitives.Geometry original, sb.Point location, drawing.Pen pen, drawing.Brush brush)
        {
            if (original.Geometries != null)
            {
                foreach (var geometry in original.Geometries)
                {
                    Transform(graphics, geometry, location, pen, brush);
                }
            }
            else
            {
                if (original.NumberOfPoints < 1)
                {
                    return;
                }

                var firstPoint = original.Points[0];

                if (original.Type == sb.Primitives.GeometryType.Point)
                {
                    graphics.DrawEllipse(pen, (float)(firstPoint.X + location.X), (float)(firstPoint.Y + location.Y), pointSize, pointSize);
                }
                else if (original.Type == Ham.SpatialBase.Primitives.GeometryType.LineString)
                {
                    AddLineString(graphics, original, location, pen, brush);
                }
            }
        }
Exemple #2
0
        internal static void Transform(WriteableBitmap context, sb.Primitives.Geometry original, sb.Point location, int border, int fill)
        {
            if (original.Geometries != null)
            {
                foreach (var geometry in original.Geometries)
                {
                    Transform(context, geometry, location, border, fill);
                }
            }
            else
            {
                if (original.NumberOfPoints < 1)
                {
                    return;
                }

                var firstPoint = original.Points[0];

                if (original.Type == sb.Primitives.GeometryType.Point)
                {
                    context.DrawEllipseCentered(border, (int)(firstPoint.X + location.X), (int)(firstPoint.Y + location.Y), pointSize, pointSize);
                }
                else if (original.Type == Ham.SpatialBase.Primitives.GeometryType.LineString)
                {
                    AddLineString(context, original, location, border, fill);
                }
            }
        }
Exemple #3
0
        private static void AddLineString(drawing.Graphics graphics, sb.Primitives.Geometry original, sb.Point location, drawing.Pen pen, drawing.Brush brush)
        {
            if (original.NumberOfPoints < 1)
            {
                return;
            }

            for (int i = 1; i < original.NumberOfPoints; i++)
            {
                graphics.DrawLine(pen,
                                  (float)(original.Points[i - 1].X + location.X),
                                  (float)(original.Points[i - 1].Y + location.Y),
                                  (float)(original.Points[i].X + location.X),
                                  (float)(original.Points[i].Y + location.Y));
            }
        }
Exemple #4
0
        private static void AddLineString(WriteableBitmap context, sb.Primitives.Geometry original, sb.Point location, int border, int fill)
        {
            if (original.NumberOfPoints < 1)
            {
                return;
            }

            for (int i = 1; i < original.NumberOfPoints; i++)
            {
                context.DrawLine(
                    (int)(original.Points[i - 1].X + location.X),
                    (int)(original.Points[i - 1].Y + location.Y),
                    (int)(original.Points[i].X + location.X),
                    (int)(original.Points[i].Y + location.Y),
                    border);
            }
        }
        private void AddPoint(WriteableBitmap context, SqlGeometry point, Func <Point, Point> transform, int border, int fill, ImageSource imageSymbol, sb.Primitives.Geometry geometrySymbol)
        {
            var center = transform(point.AsWpfPoint()).AsPoint();

            if (geometrySymbol != null)
            {
                GeometryHelper.Transform(context, geometrySymbol, center, border, fill);
            }
            else if (imageSymbol != null)
            {
                throw new NotImplementedException();
            }
            else
            {
                context.DrawEllipseCentered((int)center.X, (int)center.Y, pointSize, pointSize, border);
            }
        }
        private int AddGeometry(WriteableBitmap context, SqlGeometry geometry, Func <Point, Point> transform, int border, int fill, ImageSource imageSymbol, sb.Primitives.Geometry geometrySymbol)
        {
            if (geometry.IsNotValidOrEmpty())
            {
                return(1);
            }

            var type = geometry.GetOpenGisType();

            switch (type)
            {
            case OpenGisGeometryType.Point:
                AddPoint(context, geometry, transform, border, fill, imageSymbol, geometrySymbol);
                break;

            case OpenGisGeometryType.LineString:
                AddLineString(context, geometry, transform, border, fill);
                break;

            case OpenGisGeometryType.Polygon:
                AddPolygon(context, geometry, transform, border, fill);
                break;

            case OpenGisGeometryType.MultiPoint:
                AddMultiPoint(context, geometry, transform, border, fill, imageSymbol, geometrySymbol);
                break;

            case OpenGisGeometryType.MultiLineString:
                AddMultiLineString(context, geometry, transform, border, fill);
                break;

            case OpenGisGeometryType.MultiPolygon:
                AddMultiPolygon(context, geometry, transform, border, fill);
                break;

            case OpenGisGeometryType.GeometryCollection:
            case OpenGisGeometryType.CircularString:
            case OpenGisGeometryType.CompoundCurve:
            case OpenGisGeometryType.CurvePolygon:
            default:
                break;
            }

            return(0);
        }
        //int intBorderColor;

        //int intFillColor;

        public WriteableBitmap ParseSqlGeometry(List <SqlGeometry> geometries, Func <Point, Point> transform, int width, int height, Color border, Color fill, ImageSource pointSymbol = null, sb.Primitives.Geometry symbol = null)
        {
            //int? intBorderColor = border.HasValue ? WriteableBitmapExtensions.ConvertColor(border.Value) : (int?)null;

            //int? intFillColor = fill.HasValue ? WriteableBitmapExtensions.ConvertColor(fill.Value) : (int?)null;
            int intBorderColor = WriteableBitmapExtensions.ConvertColor(border);

            int intFillColor = WriteableBitmapExtensions.ConvertColor(fill);

            WriteableBitmap result = new WriteableBitmap(width, height, 96, 96, PixelFormats.Pbgra32, null);

            if (geometries != null)
            {
                using (result.GetBitmapContext())
                {
                    foreach (SqlGeometry item in geometries)
                    {
                        AddGeometry(result, item, transform, intBorderColor, intFillColor, pointSymbol, symbol);
                    }
                }
            }

            //result.Freeze();

            return(result);
        }
        private void AddMultiPoint(WriteableBitmap context, SqlGeometry multiPoint, Func <Point, Point> transform, int border, int fill, ImageSource imageSymbol, sb.Primitives.Geometry geometrySymbol)
        {
            int numberOfPoints = multiPoint.STNumGeometries().Value;

            for (int i = 0; i < numberOfPoints; i++)
            {
                var point = multiPoint.STGeometryN(i + 1);

                if (point.IsNotValidOrEmpty())
                {
                    continue;
                }

                AddPoint(context, point, transform, border, fill, imageSymbol, geometrySymbol);
            }
        }