private void AddPoint(WriteableBitmap context, SqlGeometry point, Func <Point, Point> transform, int border, int fill, ImageSource imageSymbol, sb.Primitives.Geometry <sb.Primitives.Point> 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); } }
//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 <sb.Primitives.Point> 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 int AddGeometry(WriteableBitmap context, SqlGeometry geometry, Func <Point, Point> transform, int border, int fill, ImageSource imageSymbol, sb.Primitives.Geometry <sb.Primitives.Point> 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); }
private void AddMultiPoint(WriteableBitmap context, SqlGeometry multiPoint, Func <Point, Point> transform, int border, int fill, ImageSource imageSymbol, sb.Primitives.Geometry <sb.Primitives.Point> 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); } }