Exemplo n.º 1
0
        /// <summary>
        /// Writes <paramref name="multiPoint"/> to a stream using <paramref name="writer"/>
        /// </summary>
        /// <param name="multiPoint">The multi point to write</param>
        /// <param name="writer">The writer to use</param>
        public void Write(MultiPoint multiPoint, BinaryWriter writer)
        {
            writer.Write((int)ShapeGeometryType.MultiPoint);

            // Write BoundingBox
            WriteBoundingBox(multiPoint.EnvelopeInternal, writer);

            // Write NumPoints
            writer.Write((int)multiPoint.NumPoints);

            // Merge sequences of points into one
            var seq = multiPoint.Factory.CoordinateSequenceFactory.Create(
                multiPoint.NumGeometries, ((Point)multiPoint.GetGeometryN(0)).CoordinateSequence.Ordinates);

            for (int i = 0; i < seq.Count; i++)
            {
                var pt = (Point)multiPoint.GetGeometryN(i);
                seq.SetX(i, pt.CoordinateSequence.GetX(i));
                seq.SetY(i, pt.CoordinateSequence.GetY(i));
                if (seq.HasZ)
                {
                    seq.SetZ(i, pt.CoordinateSequence.GetZ(i));
                }

                if (seq.HasM)
                {
                    seq.SetM(i, pt.CoordinateSequence.GetM(i));
                }
            }

            // Write Coordinates
            WriteCoordinates(seq, writer, seq.Ordinates);
        }
Exemplo n.º 2
0
        public void test_geometry()
        {
            //create a new multipoint
            MultiPoint mp = CreateTester1();

            Point point = mp.GetGeometryN(2) as Point;

            Assertion.AssertEquals("geometry-1: ", 2.0, point.X);
            Assertion.AssertEquals("geometry-1: ", 2.0, point.Y);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="geometry"></param>
        /// <param name="coordinateSpace">The size needed for each coordinate</param>
        /// <returns></returns>
        private int GetByteStreamSize(MultiPoint geometry, int coordinateSpace)
        {
            // int size
            int result = 4;

            if (geometry.NumPoints > 0)
            {
                // We can shortcut here, as all subgeoms have the same fixed size
                result += geometry.NumPoints * GetByteStreamSize(geometry.GetGeometryN(0), coordinateSpace);
            }

            return(result);
        }
Exemplo n.º 4
0
 /// <summary>
 /// A MultiPoint is simple if it has no repeated points.
 /// </summary>
 public virtual bool IsSimple(MultiPoint mp)
 {
     if (mp.IsEmpty)
         return true;
     var points = new HashSet<Coordinate>();
     for (int i = 0; i < mp.NumGeometries; i++)
     {
         Point pt = (Point)mp.GetGeometryN(i);
         Coordinate p = pt.Coordinate;
         if (points.Contains(p))
             return false;
         points.Add(p);
     }
     return true;
 }
        public void TestGetGeometryN()
        {
            MultiPoint m = (MultiPoint)reader.Read("MULTIPOINT(1.111 2.222, 3.333 4.444, 3.333 4.444)");
            IGeometry  g = m.GetGeometryN(1);

            Assert.IsTrue(g is Point);
            Point      p = (Point)g;
            Coordinate externalCoordinate = new Coordinate();
            Coordinate internaCoordinate  = p.Coordinate;

            externalCoordinate.X = internaCoordinate.X;
            externalCoordinate.Y = internaCoordinate.Y;
            Assert.AreEqual(3.333, externalCoordinate.X, 1E-10);
            Assert.AreEqual(4.444, externalCoordinate.Y, 1E-10);
        }
        /// <summary>
        /// Transforms a <see cref="MultiPoint"/> geometry.
        /// </summary>
        /// <param name="geom">The <c>MultiPoint</c> to transform</param>
        /// <param name="parent">The parent geometry</param>
        /// <returns>A <c>MultiPoint</c></returns>
        protected virtual Geometry TransformMultiPoint(MultiPoint geom, Geometry parent)
        {
            var transGeomList = new List <Geometry>();

            for (int i = 0; i < geom.NumGeometries; i++)
            {
                var transformGeom = TransformPoint((Point)geom.GetGeometryN(i), geom);
                if (transformGeom == null)
                {
                    continue;
                }
                if (transformGeom.IsEmpty)
                {
                    continue;
                }
                transGeomList.Add(transformGeom);
            }
            return(Factory.BuildGeometry(transGeomList));
        }
Exemplo n.º 7
0
        /// <summary>
        /// A MultiPoint is simple if it has no repeated points.
        /// </summary>
        public virtual bool IsSimple(MultiPoint mp)
        {
            if (mp.IsEmpty)
            {
                return(true);
            }
            ISet points = new ListSet();

            for (int i = 0; i < mp.NumGeometries; i++)
            {
                Point      pt = (Point)mp.GetGeometryN(i);
                Coordinate p  = pt.Coordinate;
                if (points.Contains(p))
                {
                    return(false);
                }
                points.Add(p);
            }
            return(true);
        }
Exemplo n.º 8
0
        /// <summary>
        /// Tests if MultiPoint is simple.
        /// </summary>
        /// <param name="mp">Geometry to test.  Must be of type MultiPoint.</param>
        /// <returns>Returns True if geometry is simple.</returns>
        /// <remarks>A MultiPoint is simple if and only if it has no repeated points.</remarks>
        public bool IsSimple(MultiPoint mp)
        {
            if (mp.IsEmpty())
            {
                return(true);
            }
            SortedList points = new SortedList();

            for (int i = 0; i < mp.GetNumGeometries(); i++)
            {
                Point      pt = (Point)mp.GetGeometryN(i);
                Coordinate p  = pt.GetCoordinate();
                if (points.Contains(p))
                {
                    return(false);
                }
                points.Add(p, p);
            }     //for ( int i = 0; i < mp.NumGeometries; i++ )
            return(true);
        }         // public bool IsSimple( MultiPoint mp )
Exemplo n.º 9
0
        private bool IsSimpleMultiPoint(MultiPoint mp)
        {
            if (mp.IsEmpty)
            {
                return(true);
            }

            var points = new HashSet <Coordinate>();

            for (int i = 0; i < mp.NumGeometries; i++)
            {
                var pt = (Point)mp.GetGeometryN(i);
                var p  = pt.Coordinate;
                if (points.Contains(p))
                {
                    _nonSimpleLocation = p;
                    return(false);
                }
                points.Add(p);
            }
            return(true);
        }