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); }
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>()); }
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)); }
/* * /// <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); }
/// <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); }
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)); }
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))); }
public static IGeometry ExtractLines(IGeometry g) { ICollection <IGeometry> lines = LinearComponentExtracter.GetLines(g); return(g.Factory.BuildGeometry(lines)); }
public static IGeometry toLines(IGeometry g) { return(g.Factory.BuildGeometry(LinearComponentExtracter.GetLines(g))); }