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); }
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)); }
public bool Equals3D(ProjCoordinate other) { if (!Equals2D(other)) { return(false); } return(CoordinateChecker.AreZOrdinatesEqual(this, other, 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); }
public bool Equals(ProjCoordinate other) { return(CoordinateChecker.AreXOrdinatesEqual(this, other, 0) && CoordinateChecker.AreYOrdinatesEqual(this, other, 0) && CoordinateChecker.AreZOrdinatesEqual(this, other, 0)); }