public void TestAtomic()
 {
     IPolygon g = (IPolygon)Read("POLYGON ((1 9, 9 9, 9 1, 1 1, 1 9))");
     GeometryCollectionEnumerator i = new GeometryCollectionEnumerator(g);
     Assert.IsTrue(i.MoveNext());
     Assert.IsTrue(i.Current is IPolygon);
     Assert.IsTrue(!i.MoveNext());
 }
 public void TestGeometryCollection()
 {
     IGeometryCollection g = (IGeometryCollection)Read(
           "GEOMETRYCOLLECTION (GEOMETRYCOLLECTION (POINT (10 10)))");
     GeometryCollectionEnumerator i = new GeometryCollectionEnumerator(g);
     Assert.IsTrue(i.MoveNext());
     Assert.IsTrue(i.Current is IGeometryCollection);
     Assert.IsTrue(i.MoveNext());
     Assert.IsTrue(i.Current is IGeometryCollection);
     Assert.IsTrue(i.MoveNext());
     Assert.IsTrue(i.Current is IPoint);
     Assert.IsTrue(!i.MoveNext());
 }
 public void TestGeometryCollectionIterator()
 {
     GeometryCollection g = (GeometryCollection)reader.Read(
           "GEOMETRYCOLLECTION (GEOMETRYCOLLECTION (POINT (10 10)))");
     GeometryCollectionEnumerator i = new GeometryCollectionEnumerator(g);
     //The NTS GeometryCollectionEnumerator does not have a HasNext property, and the interfaces is slightly different
     //assertTrue(i.hasNext());
     //assertTrue(i.next() instanceof GeometryCollection);
     //assertTrue(i.next() instanceof GeometryCollection);
     //assertTrue(i.next() instanceof Point);
     Assert.IsTrue(i.MoveNext());
     Assert.IsTrue(i.Current is GeometryCollection);
     Assert.IsTrue(i.MoveNext());
     Assert.IsTrue(i.Current is GeometryCollection);
     Assert.IsTrue(i.MoveNext());
     Assert.IsTrue(i.Current is Point);
 }
        public static IGeometry toGeometryCollection(IGeometry g)
        {
            if (!(g is IGeometryCollection))
            {
                return g.Factory.CreateGeometryCollection(new[] { g });
            }

            var atomicGeoms = new List<IGeometry>();
            var it = new GeometryCollectionEnumerator(g as IGeometryCollection);
            while (it.MoveNext())
            {
                var g2 = it.Current;
                if (!(g2 is IGeometryCollection))
                    atomicGeoms.Add(g2);
            }

            return g.Factory.CreateGeometryCollection(GeometryFactory.ToGeometryArray(atomicGeoms));
        }
        private static Boolean ContainsPoint(Coordinate p, IGeometry geom)
        {
            if (geom is IPolygon)
                return ContainsPointInPolygon(p, (IPolygon)geom);

            if (geom is IGeometryCollection)
            {
                IEnumerator<IGeometry> geomi = new GeometryCollectionEnumerator((IGeometryCollection)geom);
                while (geomi.MoveNext())
                {
                    IGeometry g2 = geomi.Current;
                    if (g2 != geom)
                        if (ContainsPoint(p, g2))
                            return true;
                }
            }
            return false;
        }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="p"></param>
 /// <param name="geom"></param>
 /// <returns></returns>
 private static bool ContainsPoint(ICoordinate p, IGeometry geom)
 {
     if (geom is IPolygon) 
         return ContainsPointInPolygon(p, (IPolygon) geom);
     
     if(geom is IGeometryCollection) 
     {
         IEnumerator geomi = new GeometryCollectionEnumerator((IGeometryCollection) geom);
         while (geomi.MoveNext()) 
         {
             IGeometry g2 = (IGeometry) geomi.Current;
             // if(g2 != geom)  --- Diego Guidi say's: Java code tests reference equality: in C# with operator overloads we tests the object.equals()... more slower!                    
             if (!ReferenceEquals(g2, geom)) 
                 if (ContainsPoint(p, g2))
                     return true;
         }
     }
     return false;
 }
        public static IGeometry toGeometryCollection(IGeometry g)
        {
            if (!(g is IGeometryCollection))
            {
                return(g.Factory.CreateGeometryCollection(new[] { g }));
            }

            var atomicGeoms = new List <IGeometry>();
            var it          = new GeometryCollectionEnumerator(g as IGeometryCollection);

            while (it.MoveNext())
            {
                var g2 = it.Current;
                if (!(g2 is IGeometryCollection))
                {
                    atomicGeoms.Add(g2);
                }
            }

            return(g.Factory.CreateGeometryCollection(GeometryFactory.ToGeometryArray(atomicGeoms)));
        }
Ejemplo n.º 8
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="p"></param>
 /// <param name="geom"></param>
 private void ComputeLocation(ICoordinate p, IGeometry geom)
 {
     if (geom is ILineString)
     {
         UpdateLocationInfo(Locate(p, (ILineString)geom));
     }
     else if (geom is Polygon)
     {
         UpdateLocationInfo(Locate(p, (IPolygon)geom));
     }
     else if (geom is IMultiLineString)
     {
         IMultiLineString ml = (IMultiLineString)geom;
         foreach (ILineString l in ml.Geometries)
         {
             UpdateLocationInfo(Locate(p, l));
         }
     }
     else if (geom is IMultiPolygon)
     {
         IMultiPolygon mpoly = (IMultiPolygon)geom;
         foreach (IPolygon poly in mpoly.Geometries)
         {
             UpdateLocationInfo(Locate(p, poly));
         }
     }
     else if (geom is IGeometryCollection)
     {
         IEnumerator geomi = new GeometryCollectionEnumerator((IGeometryCollection)geom);
         while (geomi.MoveNext())
         {
             IGeometry g2 = (IGeometry)geomi.Current;
             if (g2 != geom)
             {
                 ComputeLocation(p, g2);
             }
         }
     }
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="p"></param>
 /// <param name="geom"></param>
 /// <returns></returns>
 private static bool ContainsPoint(ICoordinate p, IGeometry geom)
 {
     if (geom is IPolygon)
     {
         return(ContainsPointInPolygon(p, (IPolygon)geom));
     }
     else if (geom is IGeometryCollection)
     {
         IEnumerator geomi = new GeometryCollectionEnumerator((IGeometryCollection)geom);
         while (geomi.MoveNext())
         {
             IGeometry g2 = (IGeometry)geomi.Current;
             // if(g2 != geom)  --- Diego Guidi say's: Java code tests reference equality: in C# with operator overloads we tests the object.equals()... more slower!
             if (!ReferenceEquals(g2, geom))
             {
                 if (ContainsPoint(p, g2))
                 {
                     return(true);
                 }
             }
         }
     }
     return(false);
 }
        private static Boolean ContainsPoint(Coordinate p, IGeometry geom)
        {
            if (geom is IPolygon)
            {
                return(ContainsPointInPolygon(p, (IPolygon)geom));
            }

            if (geom is IGeometryCollection)
            {
                IEnumerator <IGeometry> geomi = new GeometryCollectionEnumerator((IGeometryCollection)geom);
                while (geomi.MoveNext())
                {
                    IGeometry g2 = geomi.Current;
                    if (g2 != geom)
                    {
                        if (ContainsPoint(p, g2))
                        {
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
Ejemplo n.º 11
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="p"></param>
 /// <param name="geom"></param>
 private void ComputeLocation(Coordinate p, IGeometry geom)
 {
     if (geom is IPoint)
         UpdateLocationInfo(Locate(p, (IPoint) geom));
     if (geom is ILineString) 
         UpdateLocationInfo(Locate(p, (ILineString) geom));                                  
     else if(geom is Polygon) 
         UpdateLocationInfo(Locate(p, (IPolygon) geom));            
     else if(geom is IMultiLineString) 
     {
         IMultiLineString ml = (IMultiLineString) geom;
         foreach (ILineString l in ml.Geometries)                     
             UpdateLocationInfo(Locate(p, l));                
     }
     else if(geom is IMultiPolygon)
     {
         IMultiPolygon mpoly = (IMultiPolygon) geom;
         foreach (IPolygon poly in mpoly.Geometries) 
             UpdateLocationInfo(Locate(p, poly));
     }
     else if (geom is IGeometryCollection) 
     {
         IEnumerator geomi = new GeometryCollectionEnumerator((IGeometryCollection) geom);
         while(geomi.MoveNext()) 
         {
             IGeometry g2 = (IGeometry) geomi.Current;
             if (g2 != geom)
                 ComputeLocation(p, g2);
         }
     }
 }