protected Geography(System.Spatial.CoordinateSystem coordinateSystem, SpatialImplementation creator) { Util.CheckArgumentNull(coordinateSystem, "coordinateSystem"); Util.CheckArgumentNull(creator, "creator"); this.coordinateSystem = coordinateSystem; this.creator = creator; }
protected Geometry(System.Spatial.CoordinateSystem coordinateSystem, SpatialImplementation creator) { Util.CheckArgumentNull(coordinateSystem, "coordinateSystem"); Util.CheckArgumentNull(creator, "creator"); this.coordinateSystem = coordinateSystem; this.creator = creator; }
internal static int ComputeHashCodeFor <T>(System.Spatial.CoordinateSystem coords, IEnumerable <T> fields) { Func <int, T, int> func = null; if (func == null) { func = (current, field) => (current * 0x18d) ^ field.GetHashCode(); } return(fields.Aggregate <T, int>(coords.GetHashCode(), func)); }
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 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(); }
private System.Spatial.Geography CreateGeographyLineString(Esri.ArcGISRuntime.Geometry.Polyline polyline, System.Spatial.CoordinateSystem cs) { var b = System.Spatial.SpatialBuilder.Create(); if (cs != null) { b.GeographyPipeline.SetCoordinateSystem(cs); } b.GeographyPipeline.BeginGeography( polyline.Parts.Count < 2 ? System.Spatial.SpatialType.LineString : System.Spatial.SpatialType.MultiLineString); CreateGeographyFigures(polyline.Parts, b, false); b.GeographyPipeline.EndGeography(); return(b.ConstructedGeography); }
private System.Spatial.GeographyMultiPoint CreateGeographyMultipoint(Esri.ArcGISRuntime.Geometry.Multipoint multipoint, System.Spatial.CoordinateSystem cs) { var b = System.Spatial.SpatialBuilder.Create(); if (cs != null) { b.GeographyPipeline.SetCoordinateSystem(cs); } b.GeographyPipeline.BeginGeography(System.Spatial.SpatialType.MultiPoint); foreach (var p in multipoint.Points) { b.GeographyPipeline.BeginGeography(System.Spatial.SpatialType.Point); b.GeographyPipeline.BeginFigure(ToGeographyPosition(p)); b.GeographyPipeline.EndFigure(); b.GeographyPipeline.EndGeography(); } b.GeographyPipeline.EndGeography(); return((System.Spatial.GeographyMultiPoint)b.ConstructedGeography); }
private System.Spatial.GeographyPoint CreateGeographyPoint(Esri.ArcGISRuntime.Geometry.MapPoint mapPoint, System.Spatial.CoordinateSystem cs) { return(System.Spatial.GeographyPoint.Create(cs, mapPoint.Y, mapPoint.X, mapPoint.HasZ ? (double?)mapPoint.Z : null, mapPoint.HasM ? (double?)mapPoint.M : null)); }
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); }