A reverse chronological list of changes to GeographicLib
For more information, see http://geographiclib.sourceforge.net/ The current version of the library is 1.25. Changes between 1.25 (released 2012-10-16) and 1.24 versions: * Changes to geodesic calculations: + restart Newton's method in Geodesic::Inverse when it goes awry; + back up Newton's method with the bisection method; + Geodesic::Inverse now converges for any value of f; + add GeodesicExact and GeodesicLineExact which are formulated in terms of elliptic integrals and thus yield accurate results even for very eccentric ellipsoids. + the -E option to Geod invokes these exact classes. * Add functionality to EllipticFunction: + add all the traditional elliptic integrals; + remove restrictions on argument range for incomplete elliptic integrals; + allow imaginary modulus for elliptic integrals and elliptic functions; + make interface to the symmetric elliptic integrals public. * Allow GeographicLib::Ellipsoid to be copied. * Changes to the build tools: + cmake uses folders in Visual Studio to reduce clutter; + allow precision of reals to be set in cmake; + fail gracefully in the absence of pod documentation tools; + remove support for maintainer tasks in Makefile.mk. Changes between 1.24 (released 2012-09-22) and 1.23 versions: * Allow the specification of the hemisphere in UTM coordinates in order to provide continuity across the equator: + add UTMUPS::Transfer; + add GeoCoords::UTMUPSRepresentation(bool, int) and GeoCoords::AltUTMUPSRepresentation(bool, int); + use the hemisphere letter in, e.g., GeoConvert -u -z 31N. * Add UTMUPS::DecodeEPSG and UTMUPS::EncodeEPSG. * cmake changes: + restore support for cmake 2.4.x; + explicitly check version of doxygen. * Fix building under cygwin. * Document restrictions on f in the Introduction. * Fix python interface to work with version 2.6.x. Changes between 1.23 (released 2012-07-17) and 1.22 versions: * Documentation changes: + remove html documentation from distribution and use web links if doxygen is not available; + use doxygen tags to document exceptions; + begin migrating the documentation to using Greek letters where appropriate (requires doxygen 1.8.1.2 or later). * Add Math::AngNormalize and Math::AngNormalize2; the allowed range for longitudes and azimuths widened to [-540d, 540d). * DMS::Decode understands more unicode symbols. * Geohash uses geohash code "nan" to stand for not a number. * Add Ellipsoid::NormalCurvatureRadius. * Various fixes in LambertConformalConic, TransverseMercator, PolarStereographic, and Ellipsoid to handle reverse projections of points near infinity. * Fix programming blunder in LambertConformalConic::Forward (incorrect results were returned if the tangent latitude was negative). Changes between 1.22 (released 2012-05-27) and 1.21 versions: * Add Geohash and Ellipsoid classes. * Fix bug in AlbersEqualArea of very prolate ellipsoids (b^2 > 2 a^2). * cmake changes: + optionally use PACKAGE_PATH and INSTALL_PATH to determine CMAKE_INSTALL_PREFIX; + use COMMON_INSTALL_PATH to determine layout of installation directories; + as a consequence, the installation paths for the documentation, and python and matlab interfaces are shortened for Windows; + zip source distribution now uses DOS line endings; + the tests work in debug mode for Windows; + default setting of GEOGRAPHICLIB_DATA does not depend on CMAKE_INSTALL_PREFIX; + add a cmake configuration for build tree. Changes between 1.21 (released 2012-04-25) and 1.20 versions: * Support colon-separated DMS output: + DMS::Encode and GeoCoords::DMSRepresentation generalized; + GeoConvert and Geod now accept a -: option. * GeoidEval does not print the gradient of the geoid height by default (because it's subject to large errors); give the -g option to get the gradient printed. * Work around optimization BUG in GeographicLib::Geodesic::Inverse with tdm mingw g++ version 4.6.1. * autoconf fixed to ensure that that out-of-sources builds work; document this as the preferred method of using autoconf. * cmake tweaks: + simplify the configuration of doxygen; + allow the Matlab compiler to be specified with the MATLAB_COMPILER option. Changes between 1.20 (released 2012-03-23) and 1.19 versions: * cmake tweaks: + improve find_package's matching of compiler versions; + CMAKE_INSTALL_PREFIX set from CMAKE_PREFIX_PATH if available; + add "x64" to the package name for the 64-bit binary installer; + fix cmake warning with Visual Studio Express. * Fix SphericalEngine to deal with aggessive iterator checking by Visual Studio. * Fix transcription BUG is Geodesic.js. Changes between 1.19 (released 2012-03-13) and 1.18 versions: * Slight improvement in Geodesic::Inverse for very short lines. * Fix argument checking tests in MGRS::Forward. * Add --comment-delimiter and --line-separator options to the utility programs. * Add installer for 64-bit Windows; the compiled Matlab interface is supplied with the Windows 64-bit installer only. Changes between 1.18 (released 2012-02-18) and 1.17 versions: * Improve documentation on configuration with cmake. * cmake's find_package ensures that the compiler versions match on Windows. * Improve documentation on compiling Matlab interface. * Binary installer for Windows installs under C:/pkg-vc10 by default. Changes between 1.17 (released 2012-01-21) and 1.16 versions: * Work around optimization BUG in Geodesic::Inverse with g++ version 4.4.0 (mingw). * Fix BUG in argument checking with OSGB::GridReference. * Fix missing include file in SphericalHarmonic2. * Add simple examples of usage for each class. * Add internal documenation to the cmake configuration files. Changes between 1.16 (released 2011-12-07) and 1.15 versions: * Add calculation of the earth's gravitational field: + add NormalGravity GravityModel and GravityCircle classes; + add command line utility Gravity; + add Gravity models; + add Constants::WGS84_GM(), Constants::WGS84_omega(), and similarly for GRS80. * Build uses GEOGRAPHICLIB_DATA to specify a common parent directory for geoid, gravity, and magnetic data (instead of GEOGRAPHICLIB_GEOID_PATH, etc.); similarly, GeoidEval, Gravity, and MagneticField, look at the environment variable GEOGRAPHICLIB_DATA to locate the data. * Spherical harmonic software changes: + capitalize enums SphericalHarmonic::FULL and SphericalHarmonic::SCHMIDT (the lower case names are retained but deprecated); + optimize the sum by using a static table of square roots which is updated by SphericalEngine::RootTable; + avoid overflow for high degree models. * Magnetic software fixes: + fix documentation BUG in MagneticModel::Circle; + make MagneticModel constructor explicit; + provide default MagneticCircle constructor; + add additional inspector functions to MagneticCircle; + add -c option to MagneticField; + default height to zero in MagneticField. Changes between 1.15 (released 2011-11-08) and 1.14 versions: * Add calculation of the earth's magnetic field: + add MagneticModel and MagneticCircle classes; + add command line utility MagneticField; + add Magnetic models; + add Installing the magnetic field models; + add The format of the magnetic model files; + add classes SphericalEngine, CircularEngine, SphericalHarmonic, SphericalHarmonic1, and SphericalHarmonic2. which sum spherical harmonic series. * Add Utility class to support I/O and date manipulation. * Cmake configuration includes a _d suffix on the library built in debug mode. * For the Python package, include manifest and readme files; don't install setup.py for non-Windows systems. * Include Doxygen tag file in distribution as doc/html/Geographic.tag. Changes between 1.14 (released 2011-09-30) and 1.13 versions: * Ensure that geographiclib-config.cmake is relocatable. * Allow more unicode symbols to be used in DMS::Decode. * Modify GeoidEval so that it can be used to convert the height datum for LIDAR data. * Modest speed-up of Geodesic::Inverse. * Changes in python interface: + FIX BUG in transcription of Geodesic::Inverse; + include setup.py for easy installation; + python only distribution is available at http://pypi.python.org/pypi/geographiclib * Supply a minimal Qt qmake project file for library src/Geographic.pro. Changes between 1.13 (released 2011-08-13) and 1.12 versions: * Changes to I/O: + allow : (colon) to be used as a DMS separator in DMS::Decode; + also accept Unicode symbols for degrees, minutes, and seconds (coded as UTF-8); + provide optional swaplatlong argument to various DMS and GeoCoords functions to make longitude precede latitude; + GeoConvert now has a -w option to make longitude precede latitude on input and output; + include a Javascript version of DMS. * Slight improvement in starting guess for solution of geographic latitude in terms of conformal latitude in TransverseMercator, TransverseMercatorExact, and LambertConformalConic. * For most classes, get rid of const member variables so that the default copy assignment works. * Put Math and Accumulator in their own header files. * Remove unused "fast" GeographicLib::Accumulator method. * Reorganize the Python interface. * Withdraw some deprecated routines. * cmake changes: + include FindGeographic.cmake in distribution; + building with cmake creates and installs geographiclib-config.cmake; + better support for building a shared library under Windows. Changes between 1.12 (released 2011-07-21) and 1.11 versions: * Change license to MIT/X11. * Add GeographicLib::PolygonArea class and equivalent Matlab function. * Provide Javascript and Python implementations of geodesic routines. * Fix Windows installer to include runtime dlls for Matlab. * Fix (innocuous) unassigned variable in Geodesic::GenInverse. * Geodesic routines in Matlab return a12 as first column of aux return value (incompatible change). * A couple of code changes to enable compilation with Visual Studio 2003. Changes between 1.11 (released 2011-06-27) and 1.10 versions: * Changes to Planimeter: + add -l flag to Planimeter for polyline calculations; + trim precision of area to 3 decimal places; + FIX BUG with pole crossing edges (due to compiler optimization). * Geod no longer reports the reduced length by default; however the -f flag still reports this and in addition gives the geodesic scales and the geodesic area. * FIX BUGS (compiler-specific) in inverse geodesic calculations. * FIX BUG: accommodate tellg() returning -1 at end of string. * Change way flattening of the ellipsoid is specified: + constructors take f argument which is taken to be the flattening if f < 1 and the inverse flattening otherwise (this is a compatible change for spheres and oblate ellipsoids, but it is an INCOMPATIBLE change for prolate ellipsoids); + the -e arguments to the Utility Programs are handled similarly; in addition, simple fractions, e.g., 1/297, can be used for the flattening; + introduce Constants::WGS84_f() for the WGS84 flattening (and deprecate Constants::WGS84_r() for the inverse flattening); + most classes have a Flattening() member function; + InverseFlattening() has been deprecated (and now returns inf for a sphere, instead of 0). Changes between 1.10 (released 2011-06-11) and 1.9 versions: * Improvements to Matlab/Octave interface: + add {geocentric,localcartesian}{forward,reverse}; + make geographiclibinterface more general; + install the source for the interface; + cmake compiles the interface if ENABLE_MATLAB=ON; + include compiled interface with Windows binary installer. * Fix various configuration issues + autoconf did not install Config.h; + cmake installed in man/man1 instead of share/man/man1; + cmake did not set the rpath on the tools. Changes between 1.9 (released 2011-05-28) and 1.8 versions: * FIX BUG in area returned by Planimeter for pole encircling polygons. * FIX BUG in error message reported when DMS::Decode reads the string "5d.". * FIX BUG in AlbersEqualArea::Reverse (lon0 not being used). * Ensure that all exceptions thrown in the Utility Programs are caught. * Avoid using catch within GeographicLib::DMS. * Move Accumulator class from Planimeter.cpp to Constants.hpp. * Add Math::sq<T>. * Simplify Installing the geoid datasets + add geographiclib-get-geoids for Unix-like systems; + add installers for Windows. * Provide cmake support: + build binary installer for Windows; + include regression tests; + add --input-string, --input-file, --output-file options to the Utility Programs to support tests. * Rename utility EquidistantTest as GeodesicProj and TransverseMercatorTest as TransverseMercatorProj. * Add ConicProj. * Reverse the initial sense of the -s option for Planimeter. * Migrate source from subversion to git. Changes between 1.8 (released 2011-02-22) and 1.7 versions: * Optionally return rotation matrix from GeographicLib::Geocentric and GeographicLib::LocalCartesian. * For the Utility Programs, supply man pages, -h prints the synopsis, --help prints the man page, --version prints the version. * Use accurate summation in Planimeter. * Add 64-bit targets for Visual Studio 2010. * Use templates for defining math functions and some constants. * GeographicLib::Geoid updates + Add GeographicLib::Geoid::DefaultGeoidPath and GeographicLib::Geoid::DefaultGeoidName; + GeoidEval uses environment variable GEOID_NAME as the default geoid; + Add --msltohae and --haetomsl as GeoidEval options (and don't document the single hyphen versions). * Remove documentation that duplicates papers on transverse Mercator and geodesics. Changes between 1.7 (released 2010-12-21) and 1.6 versions: * FIX BUG in scale returned by GeographicLib::LambertConformalConic::Reverse. * Add GeographicLib::AlbersEqualArea projection. * Library created by Visual Studio is Geographic.lib instead of GeographicLib.lib (compatible with makefiles). * Make classes NaN aware. * Use cell arrays for MGRS strings in Matlab. * Add solution/project files for Visual Studio 2010 (32-bit only). * Use C++11 static_assert and math functions, if available. Change between 1.6 (released 2010-11-23) and 1.5 versions: * FIX BUG introduced in GeographicLib::Geoid in version 1.5 (found by Dave Edwards). Changes between 1.5 (released 2010-11-19) and 1.4 versions: * Improve area calculations for small polygons. * Add -s and -r flags to Planimeter utility. * Improve the accuracy of GeographicLib::LambertConformalConic using divided differences. * FIX BUG in meridian convergence returned by LambertConformalConic::Forward. * Add optional threadsafe parameter to GeographicLib::Geoid constructor. WARNING: This changes may break binary compatibility with previous versions of GeographicLib. However, the library is source compatible. * Add GeographicLib::OSGB. * Matlab and Octave interfaces to GeographicLib::UTMUPS, GeographicLib::MGRS, GeographicLib::Geoid, GeographicLib::Geodesic provided. * Minor changes + explicitly turn on optimization in Visual Studio 2008 projects; + add missing dependencies in some Makefiles; + move pi() and degree() from GeographicLib::Constants to GeographicLib::Math; + introduce GeographicLib::Math::extended type to aid testing; + add GeographicLib::Math::epi() and GeographicLib::Math::edegree(). + fixes to compile under cygwin; + tweak expression used to find latitude from conformal latitude. Changes between 1.4 (released 2010-09-12) and 1.3 versions: * Changes to GeographicLib::Geodesic and GeographicLib::GeodesicLine: + FIX BUG in Geodesic::Inverse with prolate ellipsoids; + add area computations to Geodesic::Direct and Geodesic::Inverse; + add geodesic areas to geodesic test set; + make GeodesicLine constructor public; + change longitude series in Geodesic into Helmert-like form; + ensure that equatorial geodesics have cos(alpha0) = 0 identically; + generalize interface for Geodesic and GeodesicLine; + split GeodesicLine and Geodesic into different files; + signal convergence failure in Geodesic::Inverse with NaNs; + deprecate one function in Geodesic and two functions in GeodesicLine; + deprecate -n option for Geod. WARNING: These changes may break binary compatibility with previous versions of GeographicLib. However, the library is source compatible (with the proviso that GeographicLib/GeodesicLine.hpp may now need to be included). * Add the Planimeter utility for computing the areas of geodesic polygons. * Improve iterative solution of GeographicLib::Gnomonic::Reverse. * Add GeographicLib::Geoid::ConvertHeight. * Add -msltohae, -haetomsl, and -z options to \ref geoideval. * Constructors check that minor radius is positive. * Add overloaded Forward and Reverse functions to the projection classes which don't return the convergence (or azimuth) and scale. * Document function parameters and return values consistently. Changes between 1.3 (released 2010-07-21) and 1.2 versions: * Add GeographicLib::Gnomonic, the ellipsoid generalization of the gnomonic projection. * Add -g and -e options to Equidistanttest. * Use fixed-point notation for output from Cartconvert, Equidistanttest, Transversemercatortest. * PolarStereographic: + Improved conversion to conformal coordinates; + Fix bug with scale at opposite pole; + Complain if latitude out of range in SetScale. * Add GeographicLib::Math::NaN(). * Add long double version of hypot for Windows. * Add EllipticFunction::E(real). * Update references to Geotrans in MGRS documentation. * Speed up tmseries.mac. Changes between 1.2 (released 2010-05-21) and 1.1 versions: * FIX BUGS in GeographicLib::Geodesic, + wrong azimuth returned by Direct if point 2 is on a pole; + Inverse sometimes fails with very close points. * Improve calculation of scale in GeographicLib::CassiniSoldner, + add GeodesicLine::Scale, GeodesicLine::EquatorialAzimuth, and GeodesicLine::EquatorialArc; + break friend connection between CassiniSoldner and Geodesic. * Add DMS::DecodeAngle and DMS::DecodeAzimuth. Extend DMS::Decode and DMS::Encode to deal with distances. * Code and documentation changes in Geodesic and Geocentric for consistency with the forthcoming paper on geodesics. * Increase order of series using in Geodesic to 6 (full accuracy maintained for ellipsoid flattening < 0.01). * Macro __NO_LONG_DOUBLE_MATH to disable use of long double. * Correct declaration of Math::isfinite to return a bool. * Changes in the Utility Programs, + improve error reporting when parsing command line arguments; + accept latitudes and longitudes in decimal degrees or degrees, minutes, and seconds, with optional hemisphere designators; + GeoConvert -z accepts zone or zone+hemisphere; + GeoidEval accepts any of the input formats used by GeoConvert; + CartConvert allows the ellipsoid to be specified with -e. Changes between 1.1 (released 2010-02-09) and 1.0 versions: * FIX BUG (introduced in 2009-03) in EllipticFunction::E(sn,cn,dn). * Increase accuracy of scale calculation in TransverseMercator and TransverseMercatorExact. * Code and documentation changes for consistency with arXiv:1002.1417 Changes between 1.0 (released 2010-01-07) and 2009-11 versions: * Add autoconf configuration files. * BUG FIX: Improve initial guess for Newton's method in PolarStereographic::Reverse. (Previously this failed to converge when the co-latitude exceeded about 130 deg.) * Constructors for TransverseMercator, TransverseMercatorExact, PolarStereographic, Geocentric, and Geodesic now check for obvious problems with their arguments and throw an exception if necessary. * Most classes now include inspector functions such as MajorRadius() so that you can determine how instances were constructed. * Add GeographicLib::LambertConformalConic class. * Add GeographicLib::PolarStereographic::SetScale to allow the latitude of true scale to be specified. * Add solution and project files for Visual Studio 2008. * Add GeographicLib::GeographicErr for exceptions. * GeographicLib::Geoid changes: + BUG FIX: fix typo in GeographicLib::Geoid::Cache which could cause a segmentation fault in some cases when the cached area spanned the prime meridian. + Include sufficient edge data to allow heights to be returned for cached area without disk reads; + Add inspector functions to query the extent of the cache. Changes between 2009-11 and 2009-10 versions: * Allow specification of "closest UTM zone" in GeographicLib::UTMUPS and GeoConvert (via -t option). * Utilities now complain is there are too many tokens on input lines. * Include real-to-real versions of GeographicLib::DMS::Decode and GeographicLib::DMS::Encode. * More house-cleaning changes: + Ensure that functions which return results through reference arguments do not alter the arguments when an exception is thrown. + Improve accuracy of GeographicLib::MGRS::Forward. + Include more information in some error messages. + Improve accuracy of inverse hyperbolic functions. + Fix the way GeographicLib::Math functions handle different precisions. Changes between 2009-10 and 2009-09 versions: * Change web site to http://geographiclib.sourceforge.net * Several house-cleaning changes: + Change from the a flat directory structure to a more easily maintained one. + Introduce Math class for common mathematical functions (in Constants.hpp). + Use Math::real as the type for all real quantities. By default this is typedef'ed to double; and the library should be installed this way. + Eliminate const reference members of AzimuthalEquidistant, CassiniSoldner and LocalCartesian so that they may be copied. + Make several constructors explicit. Disallow some constructors. Disallow copy constructor/assignment for Geoid. + Document least square formulas in Geoid.cpp. + Use unsigned long long for files positions of geoid files in Geoid. + Introduce optional mgrslimits argument in UTMUPS::Forward and UTMUPS::Reverse to enforce stricter MGRS limits on eastings and northings.in + Add 64-bit targets in Visual Studio project files. Changes between 2009-09 and 2009-08 versions: * Add GeographicLib::Geoid and GeoidEval utility. Changes between 2009-08 and 2009-07 versions: * Add GeographicLib::CassiniSoldner class and EquidistantTest utility. * Fix bug in GeographicLib::Geodesic::Inverse where NaNs were sometimes returned. * INCOMPATIBLE CHANGE: AzimuthalEquidistant now returns the reciprocal of the azimuthal scale instead of the reduced length. * Add -n option to GeoConvert. Changes between 2009-07 and 2009-06 versions: * Speed up the series inversion code in tmseries.mac and geod.mac. * Reference Borkowski in section on Geocentric coordinates. Changes between 2009-06 and 2009-05 versions: * Add routines to decode and encode zone+hemisphere to GeographicLib::UTMUPS. * Clean up code in GeographicLib::Geodesic. Changes between 2009-05 and 2009-04 versions: * Improvements to GeographicLib::Geodesic: + more economical series expansions, + return reduced length (as does the Geod utility), + improved calculation of starting point for inverse method, + use reduced length to give derivative for Newton's method. * Add AzimuthalEquidistant class. + Make GeographicLib::Geocentric, GeographicLib::TransverseMercator, and GeographicLib::PolarStereographic classes work with prolate ellipsoids. * CartConvert checks its inputs more carefully. * Remove reference to defunct Constants.cpp from GeographicLib.vcproj. Changes between 2009-04 and 2009-03 versions: * Use compile-time constants to select the order of series in GeographicLib::TransverseMercator. * 2x unroll of Clenshaw summation to avoid data shuffling. * Simplification of GeographicLib::EllipticFunction::E. * Use STATIC_ASSERT for compile-time checking of constants. * Improvements to GeographicLib::Geodesic: + compile-time option to change order of series used, + post maxima code for generating the series, + tune the order of series for double, + improvements in the selection of starting points for Newton's method, + accept and return spherical arc lengths, + works with both oblate and prolate spheroids, + add -a, -e, -b options to the Geod utility. Changes between 2009-03 and 2009-02 versions: * Add GeographicLib::Geodesic and the Geod utility. * Declare when no exceptions are thrown by functions. * Minor changes to GeographicLib::DMS class. * Use invf = 0 to mean a sphere in constructors to some classes. * The makefile creates a library and includes an install target. * Rename GeographicLib::ECEF to GeographicLib::Geocentric, ECEFConvert to CartConvert. * Use inline functions to define constant doubles in Constants.hpp. Changes between 2009-02 and 2009-01 versions: * Fix documentation of constructors (flattening -> inverse flattening). * Use std versions of math functions. * Add ECEF and LocalCartesian classes and ECEFConvert utility. * Gather the documentation on the utility programs onto one page. |