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);
        }
Exemple #7
0
        /// <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));
        }
Exemple #9
0
 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);
        }
 public PreparedPolygon(IPolygonal poly)
     : base((IGeometry)poly)
 {
     _isRectangle = Geometry.IsRectangle;
 }