Ejemplo n.º 1
0
        public void BufferAroundLine()
        {
            var form = new Form {
                BackColor = Color.White, Size = new Size(500, 200)
            };

            form.Paint += delegate
            {
                Graphics g = form.CreateGraphics();

                List <ICoordinate> vertices = new List <ICoordinate>();

                vertices.Add(new Coordinate(0, 4));
                vertices.Add(new Coordinate(40, 15));
                vertices.Add(new Coordinate(50, 50));
                vertices.Add(new Coordinate(100, 62));
                vertices.Add(new Coordinate(240, 45));
                vertices.Add(new Coordinate(350, 5));

                IGeometry geometry = new LineString(vertices.ToArray());

                g.DrawLines(new Pen(Color.Blue, 1), GetPoints(geometry));

                BufferOp bufferOp = new BufferOp(geometry);
                bufferOp.EndCapStyle      = BufferStyle.CapButt;
                bufferOp.QuadrantSegments = 0;

                IGeometry bufGeo = bufferOp.GetResultGeometry(5);

                bufGeo = bufGeo.Union(geometry);
                g.FillPolygon(new SolidBrush(Color.Pink), GetPoints(bufGeo));
            };

            WindowsFormsTestHelper.ShowModal(form);
        }
Ejemplo n.º 2
0
        public static IGeometry BufferWithParams(IGeometry g, Double?distance,
                                                 int?quadrantSegments, int?capStyle, int?joinStyle,
                                                 Double?mitreLimit)
        {
            double dist = 0;

            if (distance != null)
            {
                dist = distance.Value;
            }

            var bufParams = new BufferParameters();

            if (quadrantSegments != null)
            {
                bufParams.QuadrantSegments = quadrantSegments.Value;
            }
            if (capStyle != null)
            {
                bufParams.EndCapStyle = (EndCapStyle)capStyle.Value;
            }
            if (joinStyle != null)
            {
                bufParams.JoinStyle = (JoinStyle)joinStyle.Value;
            }
            if (mitreLimit != null)
            {
                bufParams.MitreLimit = mitreLimit.Value;
            }

            return(BufferOp.Buffer(g, dist, bufParams));
        }
Ejemplo n.º 3
0
        public static IGeometry LogoBuffer(IGeometry g, double distance)
        {
            var lines     = LogoLines(g);
            var bufParams = new BufferParameters();

            bufParams.EndCapStyle = EndCapStyle.Square;
            return(BufferOp.Buffer(lines, distance, bufParams));
        }
Ejemplo n.º 4
0
        public static Geometry bufferMitredJoin(Geometry g, double distance)
        {
            var bufParams = new BufferParameters();

            bufParams.JoinStyle = JoinStyle.Mitre;

            return(BufferOp.Buffer(g, distance, bufParams));
        }
Ejemplo n.º 5
0
        public static IGeometry SingleSidedBuffer(IGeometry geom, double distance)
        {
            var bufParams = new BufferParameters {
                IsSingleSided = true
            };

            return(BufferOp.Buffer(geom, distance, bufParams));
        }
Ejemplo n.º 6
0
        public static Geometry BufferWithSimplify(Geometry g, double?distance,
                                                  double?simplifyFactor)
        {
            double dist = 0;

            if (distance != null)
            {
                dist = distance.Value;
            }

            var bufParams = new BufferParameters();

            if (simplifyFactor != null)
            {
                bufParams.SimplifyFactor = simplifyFactor.Value;
            }
            return(BufferOp.Buffer(g, dist, bufParams));
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Given a linestring, a polygon feature class, and a buffer distance (given in feet), returns the length of the linestring contained within the buffer distance of a polygon in the feature class.
        /// </summary>
        /// <param name="lineGeometry"></param>
        /// <param name="polygonsToCheck"></param>
        /// <param name="bufferDistance"></param>
        /// <returns></returns>
        public static double CalculateLengthOfLineWithinPolygon(Geometry lineGeometry, IEnumerable <Geometry> polygonsToCheck, int bufferDistance)
        {
            if (!(bufferDistance > 0))
            {
                return(CalculateLengthOfLineWithinPolygon(lineGeometry, polygonsToCheck));
            }

            var bufferedLine        = BufferOp.Buffer(lineGeometry, bufferDistance);
            var intersectingPolygon = polygonsToCheck.FirstOrDefault(x => x.Intersects(bufferedLine));

            if (intersectingPolygon == null)
            {
                return(0);
            }

            // buffer the geometry that intersects and calculate its intersection with the original line
            var bufferedIntersectingPolygon = BufferOp.Buffer(intersectingPolygon, bufferDistance);

            return(bufferedIntersectingPolygon.Intersection(lineGeometry).Length);
        }
Ejemplo n.º 8
0
		///<summary>
		/// Returns a buffer region around this Geometry having the given width.
		/// The buffer of a Geometry is the Minkowski sum of the Geometry with
		/// a disc of radius distance.  
		///</summary>
		///<param name="distance">The width of the buffer, interpreted according to the  PrecisionModel of the
		///Geometry.</param>
		///<returns>
		///Returns all points whose distance from this Geometry are less than or equal to distance.
		///</returns>
		public virtual Geometry Buffer(double distance) 
		{
			return BufferOp.GetBuffer(this, distance);
		}