Represents the multipoint geometry.
Inheritance: Geometry
Example #1
0
        /// <summary>
        /// Creates a new geometry from JSON.
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static Geometry ToGeometry(string json)
        {
            if (json == null)
            {
                return(null);
            }

            if (json.Contains("x") && json.Contains("y"))
            {
                return(Point.FromJson(json));
            }
            if (json.Contains("points"))
            {
                return(Multipoint.FromJson(json));
            }
            if (json.Contains("paths"))
            {
                return(Polyline.FromJson(json));
            }
            if (json.Contains("rings"))
            {
                return(Polygon.FromJson(json));
            }

            throw new ArgumentException("This geometry type is not supported.", nameof(json));
        }
Example #2
0
 private static XElement ToKmlMultipoint(this Multipoint geometry, double?z, XElement[] extraElements)
 {
     return(new XElement(ns + "MultiGeometry",
                         geometry.points.Select(p => new Point {
         x = p[0], y = p[1], z = p.Length > 2 ? p[2] : (double?)null
     }.ToKmlPoint(z, extraElements))));
 }
Example #3
0
        /// <summary>
        /// Creates a new geometry from well-known text (WKT).
        /// </summary>
        /// <param name="wkt"></param>
        /// <returns></returns>
        public static Geometry ToGeometry(string wkt)
        {
            if (wkt == null)
            {
                return(null);
            }

            var s = wkt.ToUpperInvariant().Trim();

            if (s.StartsWith("POINT"))
            {
                return(Point.FromWkt(wkt));
            }
            if (s.StartsWith("MULTIPOINT"))
            {
                return(Multipoint.FromWkt(wkt));
            }
            if (s.StartsWith("MULTILINESTRING"))
            {
                return(Polyline.FromWkt(wkt));
            }
            if (s.StartsWith("MULTIPOLYGON"))
            {
                return(Polygon.FromWkt(wkt));
            }

            throw new ArgumentException("This geometry type is not supported.", nameof(wkt));
        }
Example #4
0
        /// <summary>
        /// Creates a new multipoint from well-known text (WKT).
        /// </summary>
        /// <param name="wkt"></param>
        /// <returns></returns>
        public static Multipoint FromWkt(string wkt)
        {
            if (wkt == null)
            {
                return(null);
            }

            var multipoint = new Multipoint();

            multipoint.LoadWkt(wkt);
            return(multipoint);
        }
Example #5
0
        internal static string ToWkt(this Multipoint multipoint)
        {
            if (multipoint == null)
            {
                return(null);
            }

            if (multipoint.points == null || multipoint.points.Length == 0)
            {
                return("MULTIPOINT EMPTY");
            }

            return($"MULTIPOINT({string.Join(",", multipoint.points.Select(p => $"({p[0]} {p[1]})"))})");
        }
Example #6
0
        /// <summary>
        /// Creates a new multipoint from well-known text (WKT).
        /// </summary>
        /// <param name="wkt"></param>
        /// <returns></returns>
        public static Multipoint FromWkt(string wkt)
        {
            if (wkt == null)
                return null;

            var multipoint = new Multipoint();
            multipoint.LoadWkt(wkt);
            return multipoint;
        }
Example #7
0
        internal static void LoadWkt(this Multipoint multipoint, string wkt)
        {
            var json = wkt.ToJson("MULTIPOINT");

            multipoint.points = json == null ? new double[][] { } : json.Deserialize <double[][]>();
        }
Example #8
0
        /// <summary>
        /// Determines if the multipoint is within the specified distance from the other multipoint.
        /// </summary>
        /// <param name="multipoint1"></param>
        /// <param name="multipoint2"></param>
        /// <param name="distance"></param>
        /// <returns></returns>
        public static bool WithinDistance(this Multipoint multipoint1, Multipoint multipoint2, double distance)
        {
            if (Null(multipoint1, multipoint2))
                return false;

            return multipoint1.Extent().Buffer(distance).Intersects(multipoint2.Extent()) && multipoint1.Distance(multipoint2) < distance;
        }
Example #9
0
        /// <summary>
        /// Determines if the point is within the specified distance from the multipoint.
        /// </summary>
        /// <param name="point"></param>
        /// <param name="multipoint"></param>
        /// <param name="distance"></param>
        /// <returns></returns>
        public static bool WithinDistance(this Point point, Multipoint multipoint, double distance)
        {
            if (Null(point, multipoint))
                return false;

            return point.Extent().Buffer(distance).Intersects(multipoint.Extent()) && point.Distance(multipoint) < distance;
        }
Example #10
0
        /// <summary>
        /// Determines if the polygon completely contains the multipoint.
        /// </summary>
        /// <param name="polygon"></param>
        /// <param name="multipoint"></param>
        /// <returns></returns>
        public static bool Contains(this Polygon polygon, Multipoint multipoint)
        {
            if (Null(polygon, multipoint))
                return false;

            return polygon.Contains(multipoint.points);
        }
Example #11
0
        /// <summary>
        /// Calculates the shortest distance to the multipoint.
        /// </summary>
        /// <param name="polygon"></param>
        /// <param name="multipoint"></param>
        /// <returns></returns>
        public static double Distance(this Polygon polygon, Multipoint multipoint)
        {
            AssertNotNull(polygon, multipoint);

            return multipoint.Distance(polygon);
        }
Example #12
0
        /// <summary>
        /// Calculates the shortest distance to the multipoint.
        /// </summary>
        /// <param name="polyline"></param>
        /// <param name="multipoint"></param>
        /// <returns></returns>
        public static double Distance(this Polyline polyline, Multipoint multipoint)
        {
            AssertNotNull(polyline, multipoint);

            return multipoint.Distance(polyline);
        }
Example #13
0
        /// <summary>
        /// Calculates the distance to the other multipoint.
        /// </summary>
        /// <param name="multipoint1"></param>
        /// <param name="multipoint2"></param>
        /// <returns></returns>
        public static double Distance(this Multipoint multipoint1, Multipoint multipoint2)
        {
            AssertNotNull(multipoint1, multipoint2);

            if (multipoint1.Equals(multipoint2))
                return 0;

            return multipoint1.points.SelectMany(p1 => multipoint2.points.Select(p2 => Length(p1, p2))).Min();
        }
Example #14
0
        /// <summary>
        /// Calculates the shortest distance to the multipoint.
        /// </summary>
        /// <param name="point"></param>
        /// <param name="multipoint"></param>
        /// <returns></returns>
        public static double Distance(this Point point, Multipoint multipoint)
        {
            AssertNotNull(point, multipoint);

            return multipoint.points.Min(p => Length(new[] { point.x, point.y }, p));
        }
Example #15
0
        /// <summary>
        /// Determines if the polygon is within the specified distance from the multipoint.
        /// </summary>
        /// <param name="polygon"></param>
        /// <param name="multipoint"></param>
        /// <param name="distance"></param>
        /// <returns></returns>
        public static bool WithinDistance(this Polygon polygon, Multipoint multipoint, double distance)
        {
            if (Null(polygon, multipoint))
                return false;

            return multipoint.Distance(polygon) < distance;
        }