private Coordinate GetFieldFromGps(Gps gps) { var x = (int)((gps.Longitude - XLowerLeftCorner) / CellSize); var y = (int)((gps.Latitude - YLowerLeftCorner) / CellSize); return(new Coordinate(x, y)); }
/// <summary> /// Retrieves a pixel value at a position from GPS. /// </summary> /// <param name="gps">A Gps position for the desired pixel.</param> /// <returns>The value of the pixel.</returns> public double GetValueFromGps(Gps gps) { if (gps.Longitude < XLowerLeftCorner || gps.Longitude > XLowerLeftCorner + NumberOfColumns * CellSize || gps.Latitude < YLowerLeftCorner || gps.Latitude > YLowerLeftCorner + NumberOfRows * CellSize) { return(NoDataValue); } var coordinate = GetFieldFromGps(gps); return(GetValue(coordinate)); }
public double DistanceTo(Gps targetGps) { var theta = Longitude - targetGps.Longitude; var thetaRad = Math.PI * theta / 180; var baseRad = Math.PI * Latitude / 180; var targetRad = Math.PI * targetGps.Latitude / 180; var dist = Math.Sin(baseRad) * Math.Sin(targetRad) + Math.Cos(baseRad) * Math.Cos(targetRad) * Math.Cos(thetaRad); dist = Math.Acos(dist); dist = dist * 180 / Math.PI; dist = dist * 60 * 1.1515; const double kilometers = 1.609344; return(kilometers * dist); }