private static IEnumerable <uint> Encode(IPolygonal polygonal, TileGeometryTransform tgt, int zoom) { var geometry = (Geometry)polygonal; //Test the whole polygon geometry is larger than a single pixel. if (IsGreaterThanOnePixelOfTile(geometry, zoom)) { int currentX = 0, currentY = 0; for (int i = 0; i < geometry.NumGeometries; i++) { var polygon = (Polygon)geometry.GetGeometryN(i); //Test that individual polygons are larger than a single pixel. if (!IsGreaterThanOnePixelOfTile(polygon, zoom)) { continue; } foreach (uint encoded in Encode(polygon.Shell.CoordinateSequence, tgt, ref currentX, ref currentY, true, false)) { yield return(encoded); } foreach (var hole in polygon.InteriorRings) { foreach (uint encoded in Encode(hole.CoordinateSequence, tgt, ref currentX, ref currentY, true, true)) { yield return(encoded); } } } } }
/* * internal static IGeometry PolygonizeForClip(IGeometry geometry, IPreparedGeometry clip) * { * var lines = LineStringExtracter.GetLines(geometry); * var clippedLines = new List<IGeometry>(); * foreach (ILineString line in lines) * { * if (clip.Contains(line)) * clippedLines.Add(line); * } * var polygonizer = new Polygonizer(); * polygonizer.Add(clippedLines); * var polys = polygonizer.GetPolygons(); * var polyArray = GeometryFactory.ToGeometryArray(polys); * return geometry.Factory.CreateGeometryCollection(polyArray); * } */ internal static IGeometry ClipPolygon(IGeometry polygon, IPolygonal clipPolygonal) { var clipPolygon = (IGeometry)clipPolygonal; var nodedLinework = polygon.Boundary.Union(clipPolygon.Boundary); var polygons = Polygonize(nodedLinework); /* * // Build a prepared clipPolygon * var prepClipPolygon = NetTopologySuite.Geometries.Prepared.PreparedGeometryFactory.Prepare(clipPolygon); */ // only keep polygons which are inside the input var output = new List <IGeometry>(); for (int i = 0; i < polygons.NumGeometries; i++) { var candpoly = (IPolygon)polygons.GetGeometryN(i); var interiorPoint = candpoly.InteriorPoint; if (polygon.Contains(interiorPoint) && /*prepClipPolygon.Contains(candpoly)*/ clipPolygon.Contains(interiorPoint)) { output.Add(candpoly); } } /* * return polygon.Factory.CreateGeometryCollection( * GeometryFactory.ToGeometryArray(output)); */ return(polygon.Factory.BuildGeometry(output)); }
internal static IGeometry ClipPolygon(IGeometry polygon, IPolygonal clipPolygonal) { var clipPolygon = (IGeometry) clipPolygonal; var nodedLinework = polygon.Boundary.Union(clipPolygon.Boundary); var polygons = Polygonize(nodedLinework); /* // Build a prepared clipPolygon var prepClipPolygon = NetTopologySuite.Geometries.Prepared.PreparedGeometryFactory.Prepare(clipPolygon); */ // only keep polygons which are inside the input var output = new List<IGeometry>(); for (var i = 0; i < polygons.NumGeometries; i++) { var candpoly = (IPolygon) polygons.GetGeometryN(i); var interiorPoint = candpoly.InteriorPoint; if (polygon.Contains(interiorPoint) && /*prepClipPolygon.Contains(candpoly)*/ clipPolygon.Contains(interiorPoint)) output.Add(candpoly); } /* return polygon.Factory.CreateGeometryCollection( GeometryFactory.ToGeometryArray(output)); */ return polygon.Factory.BuildGeometry(output); }
public void Render(Map map, IPolygonal geometry, Graphics graphics) { var mp = geometry as MultiPolygon; if (mp != null) { foreach (Polygon poly in mp.Polygons) OnRenderInternal(map, poly, graphics); return; } OnRenderInternal(map, (Polygon)geometry, graphics); }
/// <summary> /// Function to render the geometry /// </summary> /// <param name="map">The map object, mainly needed for transformation purposes.</param> /// <param name="geometry">The geometry to symbolize.</param> /// <param name="graphics">The graphics object to use.</param> public void Render(Map map, IPolygonal geometry, Graphics graphics) { var mp = geometry as IMultiPolygon; if (mp != null) { for (var i = 0; i < mp.NumGeometries;i++) { var poly = (IPolygon) mp[i]; OnRenderInternal(map, poly, graphics); } return; } OnRenderInternal(map, (IPolygon)geometry, graphics); }
public void Render(Map map, IPolygonal geometry, Graphics graphics) { var mp = geometry as MultiPolygon; if (mp != null) { foreach (Polygon poly in mp.Polygons) { OnRenderInternal(map, poly, graphics); } return; } OnRenderInternal(map, (Polygon)geometry, graphics); }
/// <summary> /// Function to render the geometry /// </summary> /// <param name="map">The map object, mainly needed for transformation purposes.</param> /// <param name="geometry">The geometry to symbolize.</param> /// <param name="graphics">The graphics object to use.</param> public void Render(Map map, IPolygonal geometry, Graphics graphics) { var mp = geometry as IMultiPolygon; if (mp != null) { for (var i = 0; i < mp.NumGeometries; i++) { var poly = (IPolygon)mp[i]; OnRenderInternal(map, poly, graphics); } return; } OnRenderInternal(map, (IPolygon)geometry, graphics); }
private static IGeometry OrientationEnsured(IPolygonal geometry) { var polygon = geometry as IPolygon; if (polygon != null) { return(OrientationEnsured(polygon)); } var mp = (IMultiPolygon)geometry; var polygons = new IPolygon[mp.NumGeometries]; for (var i = 0; i < mp.NumGeometries; i++) { polygons[i] = (IPolygon)OrientationEnsured((IPolygon)mp.GetGeometryN(i)); } return(mp.Factory.CreateMultiPolygon(polygons)); }
public PreparedPolygon(IPolygonal poly) : base((IGeometry)poly) { _isRectangle = Geometry.IsRectangle; }
private static IGeometry OrientationEnsured(IPolygonal geometry) { var polygon = geometry as IPolygon; if (polygon != null) return OrientationEnsured(polygon); var mp = (IMultiPolygon)geometry; var polygons = new IPolygon[mp.NumGeometries]; for (var i = 0; i < mp.NumGeometries; i++) polygons[i] = (IPolygon)OrientationEnsured((IPolygon)mp.GetGeometryN(i)); return mp.Factory.CreateMultiPolygon(polygons); }