Пример #1
0
        public int CompareTo(ProjCoordinate other)
        {
            if (Equals(other))
            {
                return(0);
            }

            if (!CoordinateChecker.AreXOrdinatesEqual(this, other, 0))
            {
                return(X < other.X ? -1 : 1);
            }
            if (!CoordinateChecker.AreYOrdinatesEqual(this, other, 0))
            {
                return(Y < other.Y ? -1 : 1);
            }

            if (CoordinateChecker.HasValidZOrdinate(this))
            {
                if (!CoordinateChecker.HasValidZOrdinate(other))
                {
                    return(-1);
                }
                return(Z < other.Z ? -1 : 1);
            }

            if (CoordinateChecker.HasValidZOrdinate(other))
            {
                return(Z < other.Z ? -1 : 1);
            }

            return(0);
        }
Пример #2
0
        public double Distance(ProjCoordinate p)
        {
            if (p == null)
            {
                throw new ArgumentNullException("p");
            }

            var tmpP = (p is ProjCoordinate)
                            ? p as ProjCoordinate
                            : new ProjCoordinate(p.X, p.Y, p.Z);

            double dx, dy, dz = 0;

            if (HasValidXandYOrdinates && tmpP.HasValidXandYOrdinates)
            {
                dx = X - p.X;
                dy = Y - p.Y;
            }
            else
            {
                throw new Proj4NetException();
            }

            if (HasValidZOrdinate && tmpP.HasValidZOrdinate)
            {
                dz = Z - tmpP.Z;
            }

            if (HasValidZOrdinate != tmpP.HasValidZOrdinate)
            {
                throw new Proj4NetException();
            }

            return(Math.Sqrt(dx * dx + dy * dy + dz * dz));
        }
Пример #3
0
 public bool Equals3D(ProjCoordinate other)
 {
     if (!Equals2D(other))
     {
         return(false);
     }
     return(CoordinateChecker.AreZOrdinatesEqual(this, other, 0));
 }
Пример #4
0
        /// <summary>
        /// Tranforms a coordinate from the source <see cref="CoordinateReferenceSystem"/> to the target one.
        /// </summary>
        /// <param name="src">the input coordinate to be transformed</param>
        /// <param name="tgt">the transformed coordinate</param>
        /// <returns>the target coordinate which was passed in</returns>
        /// <exception cref="Proj4NetException">if a computation error is encountered</exception>
        public Coordinate Transform(Coordinate src, Coordinate tgt)
        {
            // NOTE: this method may be called many times, so needs to be as efficient as possible
            Coordinate geoCoord = new ProjCoordinate(0, 0);

            if (_doInverseProjection)
            {
                // inverse project to geographic
                _sourceCRS.Projection.InverseProjectRadians(src, geoCoord);
            }
            else
            {
                geoCoord.CoordinateValue = src;
            }

            //Adjust source prime meridian if specified other than Greenwich
            var primeMeridian = _sourceCRS.Projection.PrimeMeridian;

            if (primeMeridian.Name != NamedMeridian.Greenwich)
            {
                primeMeridian.InverseAdjust(geoCoord);
            }

            if (_doDatumTransform)
            {
                DatumTransform(geoCoord);
            }

            //Adjust target prime meridian if specified other than Greenwich
            primeMeridian = _targetCRS.Projection.PrimeMeridian;
            if (primeMeridian.Name != NamedMeridian.Greenwich)
            {
                primeMeridian.Adjust(geoCoord);
            }

            if (_doForwardProjection)
            {
                // project from geographic to planar
                _targetCRS.Projection.ProjectRadians(geoCoord, tgt);
            }
            else
            {
                tgt.CoordinateValue = geoCoord;
            }

            return(tgt);
        }
Пример #5
0
 public bool Equals(ProjCoordinate other)
 {
     return(CoordinateChecker.AreXOrdinatesEqual(this, other, 0) &&
            CoordinateChecker.AreYOrdinatesEqual(this, other, 0) &&
            CoordinateChecker.AreZOrdinatesEqual(this, other, 0));
 }