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