/// <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); }
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); }
/// <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)); }
/// <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); }
/// <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 )
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); }