Пример #1
0
        /// <summary>
        /// Computes the Geodetic coordinate reference system.
        /// </summary>
        /// <returns>The Geodetic coordinate reference system.</returns>
        /// <exception cref="System.IO.InvalidDataException">Geodetic coordinate reference system code is invalid.</exception>
        private GeographicCoordinateReferenceSystem ComputeGeodeticCoordinateReferenceSystem()
        {
            Int32 code = Convert.ToInt32(_currentGeoKeys[GeoKey.GeodeticCoordinateReferenceSystemType]);

            // EPSG geodetic coordinate reference system codes
            if (code < 32767)
            {
                GeographicCoordinateReferenceSystem referenceSystem = GeographicCoordinateReferenceSystems.FromIdentifier("EPSG::" + code).FirstOrDefault();

                if (referenceSystem == null)
                {
                    return(new GeographicCoordinateReferenceSystem("EPSG::" + code, "undefined", CoordinateSystems.EllipsoidalLatLonD, GeodeticDatums.WGS84, AreasOfUse.World));
                }

                return(referenceSystem);
            }

            // user-defined geodetic coordinate reference system
            if (code == Int16.MaxValue)
            {
                String            citation  = _currentGeoKeys[GeoKey.GeodeticCoordinateReferenceSystemCitation].ToString();
                GeodeticDatum     datum     = ComputeGeodeticDatum();
                UnitOfMeasurement angleUnit = ComputeAngularUnit();

                CoordinateSystem coordinateSystem = new CoordinateSystem(CoordinateSystem.UserDefinedIdentifier, CoordinateSystem.UserDefinedName,
                                                                         CoordinateSystemType.Ellipsoidal,
                                                                         CoordinateSystemAxisFactory.GeodeticLatitude(angleUnit),
                                                                         CoordinateSystemAxisFactory.GeodeticLongitude(angleUnit));

                return(new GeographicCoordinateReferenceSystem(GeographicCoordinateReferenceSystem.UserDefinedIdentifier, GeographicCoordinateReferenceSystem.UserDefinedName,
                                                               citation, null, null, coordinateSystem, datum, null));
            }

            throw new InvalidDataException("Geodetic coordinate reference system code is invalid.");
        }
Пример #2
0
        /// <summary>
        /// Returns a collection with items matching a specified datum.
        /// </summary>
        /// <param name="datum">The geodetic datum.</param>
        /// <returns>A collection containing the items that match the specified datum.</returns>
        /// <exception cref="System.ArgumentNullException">The datum is null.</exception>
        public IEnumerable <GeographicCoordinateReferenceSystem> WithDatum(GeodeticDatum datum)
        {
            if (datum == null)
            {
                throw new ArgumentNullException(nameof(datum));
            }

            return(this.GetReferences().Where(referenceSystem => referenceSystem.Datum.Equals(datum)));
        }
Пример #3
0
        static public ISpatialReference AXL2SpatialReference(XmlNode coordSysNode)
        {
            ISpatialReference sRef = null;

            if (coordSysNode != null)
            {
                try
                {
                    if (coordSysNode.Attributes["id"] != null && coordSysNode.Attributes["id"].Value != "0")
                    {
                        sRef = gView.Framework.Geometry.SpatialReference.FromID("epsg:" + coordSysNode.Attributes["id"].Value);
                    }
                    else if (coordSysNode.Attributes["string"] != null)
                    {
                        sRef = gView.Framework.Geometry.SpatialReference.FromWKT(coordSysNode.Attributes["string"].Value);
                    }

                    if (sRef != null && coordSysNode.Attributes["datumtransformid"] != null)
                    {
                        GeodeticDatum datum = Const.FromID(coordSysNode.Attributes["datumtransformid"].Value);
                        if (datum != null)
                        {
                            sRef.Datum = datum;
                        }
                    }
                    else if (sRef != null && coordSysNode.Attributes["datumid"] != null)
                    {
                        GeodeticDatum datum = Const.FromID(coordSysNode.Attributes["datumid"].Value);
                        if (datum != null)
                        {
                            sRef.Datum = datum;
                        }
                    }
                    else if (sRef != null && coordSysNode.Attributes["datumtransformstring"] != null)
                    {
                        GeodeticDatum datum = GeodeticDatum.FromESRIWKT(coordSysNode.Attributes["datumtransformstring"].Value);
                        if (datum != null)
                        {
                            sRef.Datum = datum;
                        }
                    }
                    else if (sRef != null && coordSysNode.Attributes["datumstring"] != null)
                    {
                        GeodeticDatum datum = GeodeticDatum.FromESRIWKT(coordSysNode.Attributes["datumstring"].Value);
                        if (datum != null)
                        {
                            sRef.Datum = datum;
                        }
                    }
                }
                catch { }
            }
            return(sRef);
        }
Пример #4
0
 public GeodeticDatumProperties(GeodeticDatum datum)
 {
     if (datum != null)
     {
         _datum = datum;
     }
     else
     {
         _datum = new GeodeticDatum();
     }
 }
Пример #5
0
        public override string GetStepParameters()
        {
            var parameters = new List <string>();

            parameters.Add(Name != null ? Name.ToStepValue() : "$");
            parameters.Add(Description != null ? Description.ToStepValue() : "$");
            parameters.Add(GeodeticDatum != null ? GeodeticDatum.ToStepValue() : "$");
            parameters.Add(VerticalDatum != null ? VerticalDatum.ToStepValue() : "$");
            parameters.Add(MapProjection != null ? MapProjection.ToStepValue() : "$");
            parameters.Add(MapZone != null ? MapZone.ToStepValue() : "$");
            parameters.Add(MapUnit != null ? MapUnit.ToStepValue() : "$");

            return(string.Join(", ", parameters.ToArray()));
        }
Пример #6
0
        public GeodeticDatum CreateGeodeticDatum()
        {
            GeodeticDatum datum = new GeodeticDatum(this.Name);

            switch (_method.ToLower())
            {
            case "geocentric_translation":
                if (_parameters.Count != 3)
                {
                    throw new Exception("Wrong number of parameters");
                }
                datum.X_Axis = _parameters.GetDouble("x_axis_translation");
                datum.Y_Axis = _parameters.GetDouble("y_axis_translation");
                datum.Z_Axis = _parameters.GetDouble("z_axis_translation");
                break;

            case "coordinate_frame":
            case "position_vector":
                if (_parameters.Count != 7)
                {
                    throw new Exception("Wrong number of parameters");
                }
                datum.X_Axis     = _parameters.GetDouble("x_axis_translation");
                datum.Y_Axis     = _parameters.GetDouble("y_axis_translation");
                datum.Z_Axis     = _parameters.GetDouble("z_axis_translation");
                datum.X_Rotation = _parameters.GetDouble("x_axis_rotation");
                datum.Y_Rotation = _parameters.GetDouble("y_axis_rotation");
                datum.Z_Rotation = _parameters.GetDouble("z_axis_rotation");
                datum.Scale_Diff = _parameters.GetDouble("scale_difference");
                break;

            default:
                throw new Exception("Unknown Method: " + _method);
            }

            return(datum);
        }
Пример #7
0
        /// <summary>
        /// Returns a collection with items matching a specified datum.
        /// </summary>
        /// <param name="collection">The coordinate reference system collection.</param>
        /// <param name="datum">The geodetic datum.</param>
        /// <returns>A collection containing the items that match the specified datum.</returns>
        /// <exception cref="System.ArgumentNullException">
        /// The collection is null.
        /// or
        /// The datum is null.
        /// </exception>
        public static IEnumerable <CoordinateReferenceSystem> WithDatum(this IEnumerable <CoordinateReferenceSystem> collection, GeodeticDatum datum)
        {
            if (collection == null)
            {
                throw new ArgumentNullException(nameof(collection));
            }
            if (datum == null)
            {
                throw new ArgumentNullException(nameof(datum));
            }

            return(collection.Where(item => item.Datum.Equals(datum)));
        }
 /// <summary>
 /// Returns a collection with items matching a specified datum.
 /// </summary>
 /// <param name="datum">The geodetic datum.</param>
 /// <returns>A collection containing the items that match the specified datum.</returns>
 /// <exception cref="System.ArgumentNullException">The datum is null.</exception>
 public IEnumerable <VerticalCoordinateReferenceSystem> WithDatum(GeodeticDatum datum)
 {
     return(this.GetReferences().Where(referenceSystem => referenceSystem.Datum.Equals(datum)));
 }