コード例 #1
0
ファイル: VectorLayer.cs プロジェクト: billtian/SharpMap
        /// <summary>
        /// Function to render <paramref name="feature"/> using <paramref name="style"/> and returning the area covered.
        /// </summary>
        /// <param name="g">The graphics object</param>
        /// <param name="map">The map</param>
        /// <param name="feature">The feature's geometry</param>
        /// <param name="style">The style to apply</param>
        protected RectangleF RenderGeometryEx(Graphics g, MapViewport map, IGeometry feature, VectorStyle style)
        {
            if (feature == null)
            {
                return(RectangleF.Empty);
            }

            var geometryType = feature.OgcGeometryType;

            switch (geometryType)
            {
            case OgcGeometryType.Polygon:
                if (style.EnableOutline)
                {
                    return(VectorRenderer.DrawPolygonEx(g, (IPolygon)feature, style.Fill, style.Outline, _clippingEnabled,
                                                        map));
                }
                else
                {
                    return(VectorRenderer.DrawPolygonEx(g, (IPolygon)feature, style.Fill, null, _clippingEnabled, map));
                }

            case OgcGeometryType.MultiPolygon:
                if (style.EnableOutline)
                {
                    return(VectorRenderer.DrawMultiPolygonEx(g, (IMultiPolygon)feature, style.Fill, style.Outline, _clippingEnabled, map));
                }
                return(VectorRenderer.DrawMultiPolygonEx(g, (IMultiPolygon)feature, style.Fill, null, _clippingEnabled, map));

            case OgcGeometryType.LineString:
                if (style.LineSymbolizer != null)
                {
                    style.LineSymbolizer.Render(map, (ILineString)feature, g);
                    return(RectangleF.Empty);
                }
                return(VectorRenderer.DrawLineStringEx(g, (ILineString)feature, style.Line, map, style.LineOffset));

            case OgcGeometryType.MultiLineString:
                if (style.LineSymbolizer != null)
                {
                    style.LineSymbolizer.Render(map, (IMultiLineString)feature, g);
                    return(RectangleF.Empty);
                }
                return(VectorRenderer.DrawMultiLineStringEx(g, (IMultiLineString)feature, style.Line, map, style.LineOffset));


            case OgcGeometryType.Point:
                if (style.PointSymbolizer != null)
                {
                    return(VectorRenderer.DrawPointEx(style.PointSymbolizer, g, (IPoint)feature, map));
                }

                if (style.Symbol != null || style.PointColor == null)
                {
                    return(VectorRenderer.DrawPointEx(g, (IPoint)feature, style.Symbol, style.SymbolScale, style.SymbolOffset,
                                                      style.SymbolRotation, map));
                }

                return(VectorRenderer.DrawPointEx(g, (IPoint)feature, style.PointColor, style.PointSize, style.SymbolOffset, map));

            case OgcGeometryType.MultiPoint:
                if (style.PointSymbolizer != null)
                {
                    return(VectorRenderer.DrawMultiPointEx(style.PointSymbolizer, g, (IMultiPoint)feature, map));
                }

                if (style.Symbol != null || style.PointColor == null)
                {
                    return(VectorRenderer.DrawMultiPointEx(g, (IMultiPoint)feature, style.Symbol, style.SymbolScale, style.SymbolOffset, style.SymbolRotation, map));
                }

                return(VectorRenderer.DrawMultiPointEx(g, (IMultiPoint)feature, style.PointColor, style.PointSize, style.SymbolOffset, map));

            case OgcGeometryType.GeometryCollection:
                var coll         = (IGeometryCollection)feature;
                var combinedArea = RectangleF.Empty;
                for (var i = 0; i < coll.NumGeometries; i++)
                {
                    IGeometry geom       = coll[i];
                    var       canvasArea = RenderGeometryEx(g, map, geom, style);
                    combinedArea = canvasArea.ExpandToInclude(combinedArea);
                }
                return(combinedArea);
            }
            throw new NotSupportedException();
        }