Exemple #1
0
 protected Geography(System.Spatial.CoordinateSystem coordinateSystem, SpatialImplementation creator)
 {
     Util.CheckArgumentNull(coordinateSystem, "coordinateSystem");
     Util.CheckArgumentNull(creator, "creator");
     this.coordinateSystem = coordinateSystem;
     this.creator          = creator;
 }
Exemple #2
0
 protected Geometry(System.Spatial.CoordinateSystem coordinateSystem, SpatialImplementation creator)
 {
     Util.CheckArgumentNull(coordinateSystem, "coordinateSystem");
     Util.CheckArgumentNull(creator, "creator");
     this.coordinateSystem = coordinateSystem;
     this.creator = creator;
 }
Exemple #3
0
        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));
        }
Exemple #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();
        }
Exemple #5
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();
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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);
        }
Exemple #8
0
 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));
 }
Exemple #9
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);
        }