Example #1
0
        private static IGeometry BuildBufferLineSimplifiedSet(Geometry g, double distance)
        {
            var simpLines = new List <IGeometry>();

            var lines = LinearComponentExtracter.GetLines(g);

            foreach (var line in lines)
            {
                var pts = line.Coordinates;
                simpLines.Add(g.Factory.CreateLineString(BufferInputLineSimplifier.Simplify(pts, distance)));
            }
            var simpGeom = g.Factory.BuildGeometry(simpLines);

            return(simpGeom);
        }
Example #2
0
        private void Extract(IGeometry geom)
        {
            if (_geomFact == null)
            {
                _geomFact = geom.Factory;
            }

            /*
             * PolygonExtracter.getPolygons(geom, polygons);
             * LineStringExtracter.getLines(geom, lines);
             * PointExtracter.getPoints(geom, points);
             */
            _polygons.AddRange(PolygonExtracter.GetPolygons(geom).Cast <IPolygon>());
            _lines.AddRange(LinearComponentExtracter.GetLines(geom).Cast <ILineString>());
            _points.AddRange(PointExtracter.GetPoints(geom).Cast <IPoint>());
        }
Example #3
0
        public static Geometry ExtractSegments(Geometry g)
        {
            var lines    = LinearComponentExtracter.GetLines(g);
            var segments = new List <Geometry>();

            foreach (LineString line in lines)
            {
                for (int i = 1; i < line.NumPoints; i++)
                {
                    var seg = g.Factory.CreateLineString(
                        new[] { line.GetCoordinateN(i - 1), line.GetCoordinateN(i) }
                        );
                    segments.Add(seg);
                }
            }
            return(g.Factory.BuildGeometry(segments));
        }
Example #4
0
        /*
         * /// <summary>
         * ///
         * /// </summary>
         * /// <param name="locs"></param>
         * /// <param name="polys"></param>
         * /// <param name="locPtPoly"></param>
         * private void ComputeInside(IEnumerable<GeometryLocation> locs, IEnumerable<IPolygon> polys, GeometryLocation[] locPtPoly)
         * {
         *  foreach (GeometryLocation loc in locs)
         *  {
         *      foreach (IPolygon poly in polys)
         *      {
         *          ComputeInside(loc, poly, locPtPoly);
         *          if (_minDistance <= _terminateDistance)
         *              return;
         *      }
         *  }
         * }
         *
         * /// <summary>
         * ///
         * /// </summary>
         * /// <param name="ptLoc"></param>
         * /// <param name="poly"></param>
         * /// <param name="locPtPoly"></param>
         * private void ComputeInside(GeometryLocation ptLoc, IPolygon poly, GeometryLocation[] locPtPoly)
         * {
         *  Coordinate pt = ptLoc.Coordinate;
         *  // if pt is not in exterior, distance to geom is 0
         *  if (Location.Exterior != _ptLocator.Locate(pt, poly))
         *  {
         *      _minDistance = 0.0;
         *      locPtPoly[0] = ptLoc;
         *      GeometryLocation locPoly = new GeometryLocation(poly, pt);
         *      locPtPoly[1] = locPoly;
         *      return;
         *  }
         * }
         *
         */

        /// <summary>
        /// Computes distance between facets (lines and points) of input geometries.
        /// </summary>
        private void ComputeFacetDistance()
        {
            var locGeom = new GeometryLocation[2];

            /*
             * Geometries are not wholely inside, so compute distance from lines and points
             * of one to lines and points of the other
             */
            var lines0 = LinearComponentExtracter.GetLines(_geom[0]);
            var lines1 = LinearComponentExtracter.GetLines(_geom[1]);

            var pts0 = PointExtracter.GetPoints(_geom[0]);
            var pts1 = PointExtracter.GetPoints(_geom[1]);

            // exit whenever minDistance goes LE than terminateDistance
            ComputeMinDistanceLines(lines0, lines1, locGeom);
            UpdateMinDistance(locGeom, false);
            if (_minDistance <= _terminateDistance)
            {
                return;
            }

            locGeom[0] = null;
            locGeom[1] = null;
            ComputeMinDistanceLinesPoints(lines0, pts1, locGeom);
            UpdateMinDistance(locGeom, false);
            if (_minDistance <= _terminateDistance)
            {
                return;
            }

            locGeom[0] = null;
            locGeom[1] = null;
            ComputeMinDistanceLinesPoints(lines1, pts0, locGeom);
            UpdateMinDistance(locGeom, true);
            if (_minDistance <= _terminateDistance)
            {
                return;
            }

            locGeom[0] = null;
            locGeom[1] = null;
            ComputeMinDistancePoints(pts0, pts1, locGeom);
            UpdateMinDistance(locGeom, false);
        }
Example #5
0
        /// <summary>
        ///
        /// </summary>
        private void ComputeLineDistance()
        {
            GeometryLocation[] locGeom = new GeometryLocation[2];

            /*
             * Geometries are not wholely inside, so compute distance from lines and points
             * of one to lines and points of the other
             */
            IList lines0 = LinearComponentExtracter.GetLines(geom[0]);
            IList lines1 = LinearComponentExtracter.GetLines(geom[1]);

            IList pts0 = PointExtracter.GetPoints(geom[0]);
            IList pts1 = PointExtracter.GetPoints(geom[1]);

            // bail whenever minDistance goes to zero, since it can't get any less
            ComputeMinDistanceLines(lines0, lines1, locGeom);
            UpdateMinDistance(locGeom, false);
            if (minDistance <= terminateDistance)
            {
                return;
            }

            locGeom[0] = null;
            locGeom[1] = null;
            ComputeMinDistanceLinesPoints(lines0, pts1, locGeom);
            UpdateMinDistance(locGeom, false);
            if (minDistance <= terminateDistance)
            {
                return;
            }

            locGeom[0] = null;
            locGeom[1] = null;
            ComputeMinDistanceLinesPoints(lines1, pts0, locGeom);
            UpdateMinDistance(locGeom, true);
            if (minDistance <= terminateDistance)
            {
                return;
            }

            locGeom[0] = null;
            locGeom[1] = null;
            ComputeMinDistancePoints(pts0, pts1, locGeom);
            UpdateMinDistance(locGeom, false);
        }
        private static List <LineSegment> ExtractSegmentsNorm(Geometry geom)
        {
            var segs  = new List <LineSegment>();
            var lines = LinearComponentExtracter.GetLines(geom);

            foreach (var line in lines)
            {
                var pts = line.Coordinates;
                for (int i = 0; i < pts.Length - 1; i++)
                {
                    var seg = new LineSegment(pts[i], pts[i + 1]);
                    seg.Normalize();
                    segs.Add(seg);
                }
            }

            return(segs);
        }
Example #7
0
        protected override void Visit(IGeometry geom)
        {
            /**
             * It may be the case that the rectangle and the
             * envelope of the geometry component are disjoint,
             * so it is worth checking this simple condition.
             */
            var elementEnv = geom.EnvelopeInternal;

            if (!_rectEnv.Intersects(elementEnv))
            {
                return;
            }

            // check segment intersections
            // get all lines from geometry component
            // (there may be more than one if it's a multi-ring polygon)
            var lines = LinearComponentExtracter.GetLines(geom);

            CheckIntersectionWithLineStrings(lines);
        }
        private static IGeometry ExtractLines(ICollection <IGeometry> geoms)
        {
            IGeometryFactory factory = null;
            var lines = new List <IGeometry>();

            foreach (var g in geoms)
            {
                if (factory == null)
                {
                    factory = g.Factory;
                }
                var coll = LinearComponentExtracter.GetLines(g);
                lines.AddRange(coll);
            }

            if (factory == null)
            {
                return(null);
            }
            return(factory.BuildGeometry(geoms));
        }
Example #9
0
        public static Geometry ExtractLines(Geometry g)
        {
            var lines = LinearComponentExtracter.GetLines(g);

            return(g.Factory.BuildGeometry(lines));
        }
        public static IGeometry extractLines(IGeometry g)
        {
            var lines = LinearComponentExtracter.GetLines(g);

            return(g.Factory.BuildGeometry(NetTopologySuite.Utilities.CollectionUtil.Cast <IGeometry>((ICollection)lines)));
        }
Example #11
0
        public static IGeometry ExtractLines(IGeometry g)
        {
            ICollection <IGeometry> lines = LinearComponentExtracter.GetLines(g);

            return(g.Factory.BuildGeometry(lines));
        }
Example #12
0
 public static IGeometry toLines(IGeometry g)
 {
     return(g.Factory.BuildGeometry(LinearComponentExtracter.GetLines(g)));
 }