public MapRenderer() { StyleRenderers[typeof(RasterStyle)] = new RasterStyleRenderer(); StyleRenderers[typeof(VectorStyle)] = new VectorStyleRenderer(); StyleRenderers[typeof(LabelStyle)] = new LabelStyleRenderer(); StyleRenderers[typeof(SymbolStyle)] = new SymbolStyleRenderer(); StyleRenderers[typeof(CalloutStyle)] = new CalloutStyleRenderer(); WidgetRenders[typeof(Hyperlink)] = new HyperlinkWidgetRenderer(); WidgetRenders[typeof(ScaleBarWidget)] = new ScaleBarWidgetRenderer(); WidgetRenders[typeof(ZoomInOutWidget)] = new ZoomInOutWidgetRenderer(); WidgetRenders[typeof(ButtonWidget)] = new ButtonWidgetRenderer(); }
public bool Draw(SKCanvas canvas, IReadOnlyViewport viewport, ILayer layer, IFeature feature, IStyle style, ISymbolCache symbolCache, long iteration) { try { var vectorStyle = (VectorStyle)style; var opacity = (float)(layer.Opacity * style.Opacity); switch (feature) { case RectFeature rectFeature: PolygonRenderer.Draw(canvas, viewport, vectorStyle, rectFeature, rectFeature.Rect.ToPolygon(), opacity); break; case PointFeature pointFeature: SymbolStyleRenderer.DrawSymbol(canvas, viewport, layer, pointFeature.Point.X, pointFeature.Point.Y, new SymbolStyle { Outline = vectorStyle.Outline, Fill = vectorStyle.Fill, Line = vectorStyle.Line }); break; case GeometryFeature geometryFeature: switch (geometryFeature.Geometry) { case GeometryCollection collection: for (var i = 0; i < collection.NumGeometries; i++) Draw(canvas, viewport, layer, new GeometryFeature(collection.GetGeometryN(i)), style, symbolCache, iteration); break; case Point point: Draw(canvas, viewport, layer, new PointFeature(point.X, point.Y), style, symbolCache, iteration); break; case Polygon polygon: PolygonRenderer.Draw(canvas, viewport, vectorStyle, feature, polygon, opacity, symbolCache); break; case LineString lineString: LineStringRenderer.Draw(canvas, viewport, vectorStyle, lineString, opacity); break; default: throw new ArgumentException("Unknown geometry of Feature"); } break; } } catch (Exception ex) { Logger.Log(LogLevel.Error, ex.Message, ex); } return true; }
public static void Draw(SKCanvas canvas, IReadOnlyViewport viewport, IStyle style, IFeature feature, IGeometry geometry, SymbolCache symbolCache, float opacity) { var point = geometry as Point; var destination = viewport.WorldToScreen(point); if (style is CalloutStyle calloutStyle) { CalloutStyleRenderer.Draw(canvas, viewport, symbolCache, opacity, destination, calloutStyle); } else if (style is LabelStyle labelStyle) { LabelRenderer.Draw(canvas, labelStyle, feature, destination, opacity); } else if (style is SymbolStyle symbolStyle) { if (symbolStyle.BitmapId >= 0) { // todo: Remove this call. ImageStyle should be used instead of SymbolStyle with BitmapId ImageStyleRenderer.Draw(canvas, symbolStyle, destination, symbolCache, opacity, viewport.Rotation); } else { SymbolStyleRenderer.Draw(canvas, symbolStyle, destination, opacity, symbolStyle.SymbolType, viewport.Rotation); } } else if (style is ImageStyle imageStyle) { ImageStyleRenderer.Draw(canvas, imageStyle, destination, symbolCache, opacity, viewport.Rotation); } else if (style is VectorStyle vectorStyle) { // Use the SymbolStyleRenderer and specify Ellipse SymbolStyleRenderer.Draw(canvas, vectorStyle, destination, opacity, SymbolType.Ellipse); } else { throw new Exception($"Style of type '{style.GetType()}' is not supported for points"); } }