コード例 #1
0
        private System.Spatial.Geography CreateGeographyPolygon(Esri.ArcGISRuntime.Geometry.Polygon polygon, System.Spatial.CoordinateSystem cs)
        {
            var b = System.Spatial.SpatialBuilder.Create();

            if (cs != null)
            {
                b.GeographyPipeline.SetCoordinateSystem(cs);
            }

            var rings = Utilities.SplitMultiPolygon(polygon).ToList();

            if (rings.Count > 1)
            {
                b.GeographyPipeline.BeginGeography(System.Spatial.SpatialType.MultiPolygon);
            }

            foreach (var outerRing in rings)
            {
                b.GeographyPipeline.BeginGeography(System.Spatial.SpatialType.Polygon);
                CreateGeographyFigures(new Esri.ArcGISRuntime.Geometry.ReadOnlyPart[] { outerRing.Item1 }.Union(outerRing.Item2), b, true);
                b.GeographyPipeline.EndGeography();
            }

            if (rings.Count > 1)
            {
                b.GeographyPipeline.EndGeography();
            }
            return(b.ConstructedGeography);
        }
コード例 #2
0
        private static Microsoft.SqlServer.Types.SqlGeometry CreateGeometryPolygon(Esri.ArcGISRuntime.Geometry.Polygon polygon, int cs)
        {
            var b = new Microsoft.SqlServer.Types.SqlGeometryBuilder();

            b.SetSrid(cs);

            var rings = Utilities.SplitMultiPolygon(polygon).ToList();

            if (rings.Count > 1)
            {
                b.BeginGeometry(Microsoft.SqlServer.Types.OpenGisGeometryType.MultiPolygon);
            }

            foreach (var outerRing in rings)
            {
                b.BeginGeometry(Microsoft.SqlServer.Types.OpenGisGeometryType.Polygon);
                CreateGeometryFigures(new Esri.ArcGISRuntime.Geometry.ReadOnlyPart[] { outerRing.Item1 }.Union(outerRing.Item2), b, true);
                b.EndGeometry();
            }

            if (rings.Count > 1)
            {
                b.EndGeometry();
            }
            return(b.ConstructedGeometry);
        }
コード例 #3
0
        /// <summary>
        /// Calculates the scale at the center of a polygon, at a given pixel size
        /// </summary>
        /// <remarks>
        /// A pixel is a device independent logical pixel - ie 1/96 inches.
        /// </remarks>
        /// <param name="visibleArea">The area which center the scale will be calculated for.</param>
        /// <param name="unitsPerPixel">The size of a device indepedent pixel in the units of the spatial reference</param>
        /// <returns>The MapScale for the center of the view</returns>
        public static double CalculateScale(Esri.ArcGISRuntime.Geometry.Polygon visibleArea, double unitsPerPixel)
        {
            if (visibleArea == null)
            {
                return(double.NaN);
            }

            if (visibleArea.SpatialReference == null)
            {
                return(double.NaN);
            }

            if (double.IsNaN(unitsPerPixel) || unitsPerPixel <= 0)
            {
                return(double.NaN);
            }

            var center             = visibleArea.Extent.GetCenter();
            var centerOnePixelOver = new Geometry.MapPoint(center.X + unitsPerPixel, center.Y, center.SpatialReference);

            // Calculate the geodedetic distance between two points one 'pixel' apart
            var    result           = Geometry.GeometryEngine.DistanceGeodetic(center, centerOnePixelOver, Geometry.LinearUnits.Inches, Geometry.AngularUnits.Degrees, Geometry.GeodeticCurveType.Geodesic);
            double distanceInInches = result.Distance;

            return(distanceInInches * 96);
        }
コード例 #4
0
        internal System.Spatial.Geography CreateGeography(Esri.ArcGISRuntime.Geometry.Geometry geometry)
        {
            if (geometry == null)
            {
                throw new ArgumentNullException("geometry");
            }
            System.Spatial.CoordinateSystem cs = null;
            if (geometry.SpatialReference != null)
            {
                if (!geometry.SpatialReference.IsGeographic &&
                    geometry.SpatialReference.BaseGeographic != null &&
                    geometry.SpatialReference.BaseGeographic.Wkid > 0)
                {
                    geometry = Esri.ArcGISRuntime.Geometry.GeometryEngine.Project(geometry, geometry.SpatialReference.BaseGeographic);
                }
                if (!geometry.SpatialReference.IsGeographic)
                {
                    throw new ArgumentException("Can't convert geometry spatial reference to a supported geographic coordinate system");
                }
                if (geometry.SpatialReference.Wkid > 0)
                {
                    cs = System.Spatial.CoordinateSystem.Geometry(geometry.SpatialReference.Wkid);
                }
            }
            if (geometry is Esri.ArcGISRuntime.Geometry.MapPoint)
            {
                return(CreateGeographyPoint((Esri.ArcGISRuntime.Geometry.MapPoint)geometry, cs));
            }
            if (geometry is Esri.ArcGISRuntime.Geometry.Multipoint)
            {
                return(CreateGeographyMultipoint((Esri.ArcGISRuntime.Geometry.Multipoint)geometry, cs));
            }
            if (geometry is Esri.ArcGISRuntime.Geometry.Polyline)
            {
                return(CreateGeographyLineString((Esri.ArcGISRuntime.Geometry.Polyline)geometry, cs));
            }
            if (geometry is Esri.ArcGISRuntime.Geometry.Envelope)             //Convert to polygon
            {
                var env = ((Esri.ArcGISRuntime.Geometry.Envelope)geometry);
                geometry = new Esri.ArcGISRuntime.Geometry.Polygon(new Esri.ArcGISRuntime.Geometry.MapPoint[] {
                    new Esri.ArcGISRuntime.Geometry.MapPoint(env.XMin, env.YMax),
                    new Esri.ArcGISRuntime.Geometry.MapPoint(env.XMin, env.YMin),
                    new Esri.ArcGISRuntime.Geometry.MapPoint(env.XMax, env.YMin),
                    new Esri.ArcGISRuntime.Geometry.MapPoint(env.XMax, env.YMax),
                    new Esri.ArcGISRuntime.Geometry.MapPoint(env.XMin, env.YMax)
                }, geometry.SpatialReference);
            }
            if (geometry is Esri.ArcGISRuntime.Geometry.Polygon)
            {
                return(CreateGeographyPolygon((Esri.ArcGISRuntime.Geometry.Polygon)geometry, cs));
            }

            throw new NotImplementedException();
        }
コード例 #5
0
        internal static Microsoft.SqlServer.Types.SqlGeometry CreateGeometry(Esri.ArcGISRuntime.Geometry.Geometry geometry)
        {
            if (geometry == null)
            {
                throw new ArgumentNullException("geometry");
            }
            int cs = 0;

            if (geometry.SpatialReference != null && geometry.SpatialReference.Wkid > 0)
            {
                cs = geometry.SpatialReference.Wkid;
            }
            if (geometry is Esri.ArcGISRuntime.Geometry.MapPoint)
            {
                return(CreateGeometryPoint((Esri.ArcGISRuntime.Geometry.MapPoint)geometry, cs));
            }
            if (geometry is Esri.ArcGISRuntime.Geometry.Multipoint)
            {
                return(CreateGeometryMultipoint((Esri.ArcGISRuntime.Geometry.Multipoint)geometry, cs));
            }
            if (geometry is Esri.ArcGISRuntime.Geometry.Polyline)
            {
                return(CreateGeometryLineString((Esri.ArcGISRuntime.Geometry.Polyline)geometry, cs));
            }
            if (geometry is Esri.ArcGISRuntime.Geometry.Envelope)             //Convert to polygon
            {
                var env = ((Esri.ArcGISRuntime.Geometry.Envelope)geometry);
                geometry = new Esri.ArcGISRuntime.Geometry.Polygon(new Esri.ArcGISRuntime.Geometry.MapPoint[] {
                    new Esri.ArcGISRuntime.Geometry.MapPoint(env.XMin, env.YMax),
                    new Esri.ArcGISRuntime.Geometry.MapPoint(env.XMin, env.YMin),
                    new Esri.ArcGISRuntime.Geometry.MapPoint(env.XMax, env.YMin),
                    new Esri.ArcGISRuntime.Geometry.MapPoint(env.XMax, env.YMax),
                    new Esri.ArcGISRuntime.Geometry.MapPoint(env.XMin, env.YMax)
                }, geometry.SpatialReference);
            }
            if (geometry is Esri.ArcGISRuntime.Geometry.Polygon)
            {
                return(CreateGeometryPolygon((Esri.ArcGISRuntime.Geometry.Polygon)geometry, cs));
            }

            throw new NotImplementedException();
        }
コード例 #6
0
        internal System.Spatial.Geometry CreateGeometry(Esri.ArcGISRuntime.Geometry.Geometry geometry)
        {
            if (geometry == null)
            {
                throw new ArgumentNullException("geometry");
            }
            System.Spatial.CoordinateSystem cs = null;
            if (geometry.SpatialReference != null && geometry.SpatialReference.Wkid > 0)
            {
                cs = System.Spatial.CoordinateSystem.Geometry(geometry.SpatialReference.Wkid);
            }
            if (geometry is Esri.ArcGISRuntime.Geometry.MapPoint)
            {
                return(CreateGeometryPoint((Esri.ArcGISRuntime.Geometry.MapPoint)geometry, cs));
            }
            if (geometry is Esri.ArcGISRuntime.Geometry.Multipoint)
            {
                return(CreateGeometryMultipoint((Esri.ArcGISRuntime.Geometry.Multipoint)geometry, cs));
            }
            if (geometry is Esri.ArcGISRuntime.Geometry.Polyline)
            {
                return(CreateGeometryLineString((Esri.ArcGISRuntime.Geometry.Polyline)geometry, cs));
            }
            if (geometry is Esri.ArcGISRuntime.Geometry.Envelope)             //Convert to polygon
            {
                var env = ((Esri.ArcGISRuntime.Geometry.Envelope)geometry);
                geometry = new Esri.ArcGISRuntime.Geometry.Polygon(new Esri.ArcGISRuntime.Geometry.MapPoint[] {
                    new Esri.ArcGISRuntime.Geometry.MapPoint(env.XMin, env.YMax),
                    new Esri.ArcGISRuntime.Geometry.MapPoint(env.XMin, env.YMin),
                    new Esri.ArcGISRuntime.Geometry.MapPoint(env.XMax, env.YMin),
                    new Esri.ArcGISRuntime.Geometry.MapPoint(env.XMax, env.YMax),
                    new Esri.ArcGISRuntime.Geometry.MapPoint(env.XMin, env.YMax)
                }, geometry.SpatialReference);
            }
            if (geometry is Esri.ArcGISRuntime.Geometry.Polygon)
            {
                return(CreateGeometryPolygon((Esri.ArcGISRuntime.Geometry.Polygon)geometry, cs));
            }

            throw new NotImplementedException();
        }
        internal static Microsoft.SqlServer.Types.SqlGeography CreateGeography(Esri.ArcGISRuntime.Geometry.Geometry geometry)
        {
            if (geometry == null)
            {
                throw new ArgumentNullException("geometry");
            }
            if (geometry.SpatialReference == null)
            {
                throw new ArgumentException("Spatial reference cannot be null when converting to Geography types");
            }
            int cs = 0;

            if (geometry.SpatialReference != null)
            {
                if (!geometry.SpatialReference.IsGeographic &&
                    geometry.SpatialReference.BaseGeographic != null &&
                    geometry.SpatialReference.BaseGeographic.Wkid > 0)
                {
                    geometry = Esri.ArcGISRuntime.Geometry.GeometryEngine.Project(geometry, geometry.SpatialReference.BaseGeographic);
                }
                if (!geometry.SpatialReference.IsGeographic)
                {
                    throw new ArgumentException("Can't convert geometry spatial reference to a supported geographic coordinate system");
                }
                if (geometry.SpatialReference.Wkid > 0)
                {
                    cs = geometry.SpatialReference.Wkid;
                }
                else
                {
                    throw new ArgumentException("Unsupported geographic coordinate system");
                }
            }
            if (geometry is Esri.ArcGISRuntime.Geometry.MapPoint)
            {
                return(CreateGeographyPoint((Esri.ArcGISRuntime.Geometry.MapPoint)geometry, cs));
            }
            if (geometry is Esri.ArcGISRuntime.Geometry.Multipoint)
            {
                return(CreateGeographyMultipoint((Esri.ArcGISRuntime.Geometry.Multipoint)geometry, cs));
            }
            if (geometry is Esri.ArcGISRuntime.Geometry.Polyline)
            {
                return(CreateGeographyLineString((Esri.ArcGISRuntime.Geometry.Polyline)geometry, cs));
            }
            if (geometry is Esri.ArcGISRuntime.Geometry.Envelope)             //Convert to polygon
            {
                var env = ((Esri.ArcGISRuntime.Geometry.Envelope)geometry);
                geometry = new Esri.ArcGISRuntime.Geometry.Polygon(new Esri.ArcGISRuntime.Geometry.MapPoint[] {
                    new Esri.ArcGISRuntime.Geometry.MapPoint(env.XMin, env.YMax),
                    new Esri.ArcGISRuntime.Geometry.MapPoint(env.XMin, env.YMin),
                    new Esri.ArcGISRuntime.Geometry.MapPoint(env.XMax, env.YMin),
                    new Esri.ArcGISRuntime.Geometry.MapPoint(env.XMax, env.YMax),
                    new Esri.ArcGISRuntime.Geometry.MapPoint(env.XMin, env.YMax)
                }, geometry.SpatialReference);
            }
            if (geometry is Esri.ArcGISRuntime.Geometry.Polygon)
            {
                return(CreateGeographyPolygon((Esri.ArcGISRuntime.Geometry.Polygon)geometry, cs));
            }

            throw new NotImplementedException();
        }