You can subscribe to this list here.
| 2012 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
(3) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2013 |
Jan
(1) |
Feb
(1) |
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
| 2014 |
Jan
(1) |
Feb
|
Mar
(1) |
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
(1) |
Nov
(2) |
Dec
(1) |
| 2015 |
Jan
|
Feb
|
Mar
(1) |
Apr
(1) |
May
(1) |
Jun
|
Jul
|
Aug
(1) |
Sep
(1) |
Oct
|
Nov
|
Dec
|
| 2016 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2017 |
Jan
|
Feb
(2) |
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
|
Dec
|
| 2019 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
(1) |
| 2020 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
| 2021 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2022 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
(1) |
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
| 2023 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2024 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
| 2025 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(2) |
Sep
(1) |
Oct
|
Nov
|
Dec
|
|
From: Charles K. <cha...@gm...> - 2025-09-30 17:55:47
|
Changes between 2.6 (released 2025-09-30) and 2.5.2 versions:
* Support for triaxial ellipoids. This is all placed in the
GeographicLib::Triaxial namespace with the header files in the
GeographicLib/Triaxial directory. This provides
+ Triaxial::Ellipsoid3 supports basic conversions of ellipsoidal
coordinates.
+ Triaxial::GeodesicLine3 and Triaxial::Geodesic3 solve the direct
and inverse geodesic problems on a triaxial ellipsoid. This
implements Jacobi's solution for the direct problem. The inverse
problem extends the method for solving the inverse problem on a
biaxial ellipsoid.
+ Triaxial::Cartesian3 performs conversions between different
systems of triaxial coordinates.
+ Triaxial::Conformal3 implements Jacobi's conformal projection for
a triaxial ellipsoid. This allow a triaxial ellipsoid to be
conformally mapped to a sphere or to any other ellipsoid.
+ Geod3Solve is a command-line utility offering access to
Triaxial::Geodesic3.
+ Cart3Convert is a command-line utility offering access to
Triaxial::Cartesian3.
+ Conformal3Proj is a command-line utiity offering access to
Triaxial::Conformal3.
+ Constants::Triaxial_Earth_a, Constants::Triaxial_Earth_b,
Constants::Triaxial_Earth_c, and Constants::Triaxial_Earth_lon0
specify a simple triaxial model for the Earth.
+ experimental::TriaxialGeodesicODE is provided to illustrate the
solution of the direct geodesic problem by integrating the
ordinary differential equations for the geodesic. Because this
depends on Boost, this is not part of the GeographicLib library.
+ experimental/Geod3ODE.cpp a utility for doing direct geodesic
calculations using experimental::TriaxialGeodesicODE.
* To support the triaxial routines, the following classes have been
added:
+ AngleT provides an accurate representation of angles of any
magnitude. This might replace AuxAngle at some point.
+ Trigfun supports representing periodic functions as Fourier
series with automatic selection of the number of terms to
use. This offers a tiny subset of the functionality of the trig
series in Chebfun. This might replace DST at some point.
* C++17 is now required. Minimum version of Visual Studio supported
is Visual Studio 15 2017.
* Add Math::clamp.
* Because experimental::TriaxialGeodesicODE depends on Boost, the
CMake option USE_BOOST_FOR_EXAMPLES has been renamed
USE_BOOST. This will cause find_package(Boost) to be called, but
does not affect how the library or the tools are built.
--
Charles Karney <ka...@al...>
702 Prospect Ave
Princeton, NJ 08540-4037
|
|
From: Charles K. <cha...@gm...> - 2025-08-22 11:08:08
|
Changes between 2.5.2 (released 2025-08-22) and 2.5.1 versions:
* Fix potential buffer overflow in DMS. Upgrading from earlier
versions is strongly recommended. If upgrading is not possible,
avoid processing untrusted or malformed inputs and run programs
linked to the library with restricted privileges. Thanks to
Rosario Matteo Grammatico for finding this vulnerability.
--
Charles Karney <ka...@al...>
702 Prospect Ave
Princeton, NJ 08540-4037
|
|
From: Charles K. <cha...@gm...> - 2025-08-20 16:51:20
|
Changes between 2.5.1 (released 2025-08-20) and 2.5 versions:
* Fix bug in geodesic inverse problem with very prolate
ellipsoids. For f < −2, a meridional path was incorrectly
returned in some cases for two points on the same meridian. This
affected both the series and exact solutions. (Or course, the
series solution is inaccurate for ellipsoids this eccentric.)
* Minor tweak to Math::atan2d to improve accuracy.
* Allow GEOGRAPHICLIB_PRECISION > 5 to allow use of mpreal with a
fixed precision.
* Document that cmake option -D BINDIR=OFF removes tools from the
default all target for make.
* WARNING: C++17 compliant compiler will be required for the next
release. Support for builds with Visual Studio 14 (2015) will
then stop.
--
Charles Karney <ka...@al...>
|
|
From: Charles K. <cha...@gm...> - 2024-12-28 21:21:59
|
Changes between 2.5 (released 2024-12-28) and 2.4 versions:
* New magnetic models provided
+ World Magnetic Model 2025, wmm2025; this covers the period
2025-2030. This is now the model returned by
MagneticModel::DefaultMagneticName and is default magnetic
model for MagneticField (replacing wmm2020 which is only valid
thru the end of 2024).
+ World Magnetic Model High Resolution 2025, wmmhr2025; this is a
high-resolution version of wmm2025 including terms up to degree
133 (as opposed to 12 for wmm2025).
+ International Geomagnetic Reference Field (14th generation),
igrf14, which approximates the main magnetic field of the earth
for the period 1900-2030.
* Update CMake's cmake_minimum_required to 3.17.0 (to facilitate
integration with Qt projects).
* For GEOGRAPHICLIB_PRECISION > 2, readarray treats doubles as
approximations to exact decimal constants.
--
Charles Karney <ka...@al...>
702 Prospect Ave
Princeton, NJ 08540-4037
|
|
From: Charles K. <cha...@gm...> - 2024-07-14 18:35:49
|
Changes between 2.4 (released 2024-07-14) and 2.3 versions:
* Math::sind, Math::sincosd, etc., now return accurate results for
arguments = 30d, 45d, 60d, ...
* Add Math::hypot3.
* Add EllipticFunction::am.
* Make constructor for AuxAngle explicit.
* Include notes for plate carree areas.
* C++14 compliant compiler required (this requirement tracks the
Boost Math library).
* CMake configuration changes
+ update cmake_minimum_required to 3.16.0.
+ exclude the tools and doc targets from the default build (make
all) if these components won't be installed (BINDIR or DOCDIR
set to OFF).
+ testprograms is now excluded from the default build and it now
depends on tools. Before running the test suite, build
testprograms, e.g., make testprograms test.
+ added a target libs to build only the static and/or shared
libraries.
+ document the use of CMake's FetchContent as an alternative to
find_package.
+ stop requiring that CMAKE_CROSSCOMPILING match with
find_package(GeographicLib).
* Internal code changes
+ stop using reserved identifiers (_N in the DST class and _R in
the Intersect class).
+ remove the workaround for the boost-quadmath bug with
setprecision(0).
+ GEOGRAPHICLIB_PANIC(msg) macro now takes a message argument.
--
Charles Karney <ka...@al...>
702 Prospect Ave
Princeton, NJ 08540-4037
|
|
From: Charles K. <cha...@gm...> - 2023-07-25 13:07:18
|
Changes between 2.3 (released 2023-07-25) and 2.2 versions:
* Add the Intersect class and the IntersectTool utility. The
methods are described in "Geodesic intersections",
https://arxiv.org/abs/yymm.nnnn (to appear 2023-08).
* Add typedefs Geodesic::LineClass, GeodesicExact::LineClass,
Rhumb::LineClass, GeodesicLine::BaseClass,
GeodesicLineExact::BaseClass, RhumbLine::BaseClass.
* Geodesic constructor accepts optional third argument exact, default
false. If true, then the calculations are delegated to
GeodesicExact. GeodSolve and Planimeter now use this simplified
interface.
* PolygonAreaExact is deprecated; use PolygonArea instead.
* Bug in Planimeter -Q (introduced in version 2.2) has been fixed.
* TransverseMercator constructor accepts optional arguments exact
and extendp (default false for both). If exact = true, then the
calculations are delegated to TransverseMercatorExact.
TransverseMercatorProj now uses this simplified interface.
* Minor fixes:
+ Fix documentation bug for TransverseMercatorProj (incorrectly
stated that -t for the extended domain was the default).
+ Remove unnecessary friend declarations for Ellipsoid in
AlbersEqualArea and TransverseMercator. (As of version 2.2,
Ellipsoid uses the AuxLatitude class for this functionality.)
+ Small change in EllipticFunction to speed up the default
contructor.
+ Remove workaround for boost 1.76 with enums (not needed for boost
1.78).
+ Remove unused header from NearestNeighbor.
--
Charles Karney <ka...@al...>
702 Prospect Ave
Princeton, NJ 08540-4037
|
|
From: Charles K. <cha...@gm...> - 2023-03-07 16:07:47
|
Changes between 2.2 (released 2023-03-07) and 2.1.2 versions:
* Completely redo Rhumb and RhumbLine classes to yield accurate
results for the course and the area even for very eccentric
ellipsoids:
+ these methods are accurate for 1/100 < b/a < 100 (the previous
methods for the course were limited to 1/4 < b/a < 4 for the
course and the area calculation was only valid for |f| < 0.01);
+ the meaning of the exact flag in the constructor is now more
straightforward: exact = false (the default) consistently uses
series expansions valid for |f| < 0.01; exact = true uses exact
equations for the course of the rhumb line and an accurate DFT
fit for the area computation;
+ the RhumbSolve(1) utiity accepts the -u to unroll the
longitudes for the results of direct calculations;
+ rhumb lines which include a pole as one of the endpoints are
treated properly (previously point at the pole were moved
slightly away from the pole);
+ this treatment of rhumb areas is described in polygons,
https://arxiv.org/abs/2303.03219.
* The -E option for Planimeter(1) is now a toggle switching on
exact treatment for geodesics (-G option), rhumb lines (-R
option), authlatic lines (-Q option). Previously -E has turned
on the exact treatment for geodesics.
* The online version of Planimeter now allows the ellipsoid to be
specified.
* The deprecated -l option for GeodSolve and RhumbSolve has been
removed.
* Add AuxAngle and AuxLatitude classes to perform accurate
conversions between auxiliary latitudes. The Ellipsoid class has
been mostly reimplimented in terms of the AuxLatitude class. The
DAuxLatitude class computes the divides differences of auxiliary
latitude. and implements additional divided difference formulas
needed by Rhumb.
* Created an "experimental" directory + namespace and moved the
JacobiConformal class there. Use the cmake target "experimental"
to build this directory.
--
Charles Karney <ch...@ka...>
702 Prospect Ave
Princeton, NJ 08540-4037
|
|
From: Charles K. <cha...@gm...> - 2022-12-13 15:52:36
|
Changes between 2.1.2 (released 2022-12-13) and 2.1.1 versions:
* Add MGRS::Decode to break an MGRS string into its components.
* Add definite integral overload for DST::integral. This is used in
GeodesicExact.
* Add example code examples/AuxLatitude.[hc]pp implementating the
AuxAngle and AuxLatitude classes. These classes implement the
methods documented in the paper "On auxiliary latitudes",
https://arxiv.org/abs/2212.05818. They are *not* part of
GeographicLib. See Auxiliary latitudes for more details.
* Minor cmake issues:
+ fix cross-compile build on Windows;
+ check cmake version for "cmake rm -rf";
+ move cmake_minimum_required to the beginning of the cmake file
and update minimum version to 3.13.0.
|
|
From: Charles K. <cha...@gm...> - 2022-07-25 16:13:34
|
Changes between 2.1.1 (released 2022-07-25) and 2.1 versions:
* The Planimeter utility used to accept polygon vertices as UTM/UPS
or MGRS coordinates. However, since these are converted to
latitude and longitude using the WGS84 ellipoid, this convention
is incompatible with the -e option to specify the ellipsoid. So
now, you have to provide the --geoconvert-input option to allow
vertices to be specified in this way.
* Fix sign error in DST::refine.
* Relax overly strict convergence test for inverse problem in
Geodesic and GeodesicExact.
* Minor:
+ Use lookup table for selecting number of points for DST in
GeodesicExact.
+ Relax one of the test thresholds in geodtest.cpp.
|
|
From: Charles K. <cha...@gm...> - 2022-06-09 15:08:39
|
Changes between 2.1 (released 2022-06-09) and 2.0 versions:
* Improve the accuracy of the area calculations in GeodesicExact
and the Planimeter utility with the -E option. This now gives
full double precision accuracy for b/a in [0.01, 100] or f in
[-99, 0.99]. (Previously the range for full accuracy was b/a in
[0.5, 2].) The method involves a direct computation of the
Fourier series for the integrand of area integral which then
allows the integral to be evaluated.
* Add a new class DST for doing discrete sine transforms. This is
mainly for "internal" use, to compute the area in GeodesicExact.
Internally, this uses the kissfft package by Mark Borgerding.
* Fix various warnings from Visual Studio about arithmetic involving
enums.
* Minor improvement in the logic for the geodesic inverse problem
to address a slow down that can occur with
GEOGRAPHICLIB_PRECISION = 5 due to the time it takes to
calculate, for example, sin(10^(10^8)) accurately.
--
Charles Karney <ch...@ka...>
Princeton, NJ
|
|
From: Charles K. <cha...@gm...> - 2022-05-06 17:39:25
|
Changes between 2.0 (released 2022-05-06) and 1.52 versions:
* Remove non C++ implementations from this package. These are now
managed as separate packages. See
https://geographiclib.sourceforge.io/doc/library.html#languages
* This allowed the cmake interface to be rationalized:
+ Replace GEOGRAPHICLIB_LIB_TYPE by BUILD_SHARED_LIBS (a standard
cmake variable) and BUILD_BOTH_LIBS.
+ Remove COMMON_INSTALL_PATH and replace with variables to
specify where various components are to be installed.
+ Remove BUILD_NETGEOGRAPHICLIB.
+ Remove legacy cmake config support (non-namespace).
+ make exampleprograms does a separate cmake configuration to
mimic how a user's program might find GeographicLib.
+ find_package (GeographicLib) now sets and checks the value of
GEOGRAPHICLIB_PRECISION.
+ Improve the separation of end-user and maintain cmake code.
* More careful treatment of +/-0d and +/-180d.
+ These behave consistently with taking the limits
- +/-0 means +/-eps as eps -> 0+
- +/-180 means +/-(180 - eps) as eps -> 0+
+ As a consequence, azimuths of +0d and +180d are reckoned to be
east-going, as far as tracking the longitude with
Geodesic::LONG_UNROLL and the area goes, while azimuths -0d and
-180d are reckoned to be west-going.
+ When computing longitude differences, if lat2 - lat1 = +/-180d
(mod 360d), then the sign is picked depending on the sign of
the difference.
+ The normal range for returned longitudes and azimuths is
[-180d, 180d].
* Programs in directory tests now allow testing to extend beyond
invocations of the utility programs.
* BUG FIXES:
+ Fixed bug where in the solution of the inverse geodesic problem
where with lat1 = 0 and lat2 = nan was treated as equatorial.
+ Fixed roundoff corner case in geodesic area computation (only
triggered with long double).
* Minor changes in code:
+ Use fmin, fmax, fabs instead of min, max, abs, where appropriate.
+ Parameterize the conversion units for degrees, minutes, seconds
as Math::qd, Math::dm, Math::ms.
+ Ellipsoid::MinorRadius() has be renamed Ellipsoid::PolarRadius().
+ Remove deprecated functions: XXX::MajorRadius, Utility::val, and
placeholders (Math::cbrt, etc.) for C++11 math functions.
+ Can specify the comment character in Utility::ParseLine.
+ Rename various internal identifiers to avoid reserved names.
+ Remove unused internal variable in RhumbLine.
+ The documentation for EllipticFunction specifies restrictions on
the arguments.
+ Put GeodesicExactC4.cpp back into GeodesicExact.cpp.
* Library file now called libGeographicLib.so, etc., instead of
libGeographic.so.
* The .NET version of GeographicLib has been removed.
--
Charles Karney <ch...@ka...>
Princeton, NJ
|
|
From: Charles K. <cha...@gm...> - 2021-06-22 14:01:09
|
Changes between 1.52 (released 2021-06-22) and 1.51 versions:
* Add MagneticModel::FieldGeocentric and
MagneticCircle::FieldGeocentric to return the field in geocentric
coordinates (thanks to Marcelo Banik de Padua).
* Document realistic errors for PolygonAreaT and Planimeter.
* Geodesic routines: be more aggressive in preventing negative s12
and m12 for short lines (all languages).
* Fix bug in AlbersEqualArea for extreme prolate ellipsoids (plus
general cleanup in the code).
* Thanks to Thomas Warner, a sample of wrapping the C++ library, so
it's accessible in Excel, is given in wrapper/Excel.
* Minor changes
+ Work around inaccuracies in hypot routines in Visual Studio
(win32), Python, and JavaScript.
+ Initialize reference argument to remquo (C++ and C).
+ Get ready to retire unused _exact in RhumbLine.
+ Declare RhumbLine copy constructor "= default".
+ Use C++11 "= delete" idiom to delete copy assignment and copy
constructors in RhumbLine, Geoid, GravityModel, MagneticModel.
+ Fix MGRS::Forward to work around aggressive optimization leading to
incorrect rounding.
+ Fix plain makefiles, Makefile.mk, so that PREFIX is handled
properly.
+ Make cmake's GeographicLib_LIBRARIES point to namespace versions.
* NOTE: In the next version (tentatively 2.0), I plan to split up
the git repository and the packaging of GeographicLib into
separate entities for each language. This will simplify
development and deployment of the library.
* WARNING: The .NET version of GeographicLib will not be supported
in the next version.
|
|
From: Charles K. <ch...@ka...> - 2020-11-22 15:38:25
|
Changes between 1.51 (released 2020-11-22) and 1.50.1 versions:
* C++11 compiler required for C++ library. As a consequence:
+ The workaround implementations for C++11 routines (Math::hypot,
Math::expm1, Math::log1p, Math::asinh, Math::atanh,
Math::copysign, Math::cbrt, Math::remainder, Math::remquo,
Math::round, Math::lround, Math::fma, Math::isfinite, and
Math::isnan) are now deprecated. Just use the versions in the
std:: namespace instead.
+ SphericalEngine class, fix the namespace for using streamoff.
+ Some templated functions, e.g., Math::degree(), now have default
template parameters, T = Math::real.
* C99 compiler required for C library.
* Reduce memory footprint in Java implementation.
* New form of Utility::ParseLine to allow the syntax "KEY = VAL".
* Add International Geomagnetic Reference Field (13th generation),
igrf13, which approximates the main magnetic field of the earth for
the period 1900-2025.
* More symbols allowed with DMS decoding in C++, JS, and cgi-bin
packages; see DMS::Decode.
* Fix bug in cgi-bin argument processing which causes "+" to be
misinterpreted.
* Required minium version of CMake is now 3.7.0 (released
2016-11-11). This is to work around a bug in find_package for
cmake 3.4 and 3.5.
|
|
From: Charles K. <ch...@ka...> - 2019-12-13 14:01:02
|
GeographicLib 1.50.1 (released 2019-12-13)
Changes between 1.50.1 (released 2019-12-13) and 1.50 versions:
* Add the World Magnetic Model 2020, wmm2020, covering the period
2020-2025. This is now the model returned by
MagneticModel::DefaultMagneticName and is default magnetic model
for MagneticField (replacing wmm2015v2 which is only valid thru
the end of 2019).
* Include float instantiations of those templated Math functions
which migrated to Math.cpp in version 1.50.
* WARNING: The next version of GeographicLib will require a C++11
compliant compiler. This means that the minimum version of Visual
Studio will be Visual Studio 12 2013. (This repeats the warning
given with version 1.50. It didn't apply to this version because
this is a minor update.)
|
|
From: Charles K. <ch...@ka...> - 2019-09-24 16:27:55
|
GeographicLib 1.50 (released 2019-09-24)
* BUG fixes:
+ Java + JavaScript implementations of PolygonArea::TestEdge
counted the pole encirclings wrong.
+ Fix typo in JavaScript implementation which affected unsigned
areas.
+ Adding edges to a polygon counted pole encirclings inconsistent
with the way the adding point counted them. This might have
caused an incorrect result if a polygon vertex had longitude
= 0. This affected all implementations except Fortran and
MATLAB).
+ GARS::Forward: fix BUG in handling of longitude = +/-180d.
+ Fix bug in Rhumb class and RhumbSolve(1) utiity which caused
incorrect area to be reported if an endpoint is at a pole.
Thanks to Natalia Sabourova for reporting this.
+ Fix bug in MATLAB routine mgrs_inv which resulted in incorrect
results for UPS zones with prec = -1.
+ In geodreckon.m geoddistance.m, suppress (innocuous) "warning:
division by zero" messages from Octave.
+ In python implementation, work around problems caused by
sin(inf) and fmod(inf) raising exceptions.
+ Geoid class, fix the use of streamoff.
* The PolygonArea class, the Planimeter utility, and their equivalents
in C, Fortran, MATLAB, Java, JavaScript, Python, and Maxima can now
handle arbitrarily complex polygons. In the case of
self-intersecting polygons the area is accumulated "algebraically",
e.g., the areas of the 2 loops in a figure-8 polygon will partially
cancel.
* Changes in gravity and magnetic model handling
+ SphericalEngine::coeff::readcoeffs takes new optional argument
truncate.
+ The constructors for GravityModel and MagneticModel allow the
maximum degree and order to be specified. The array of
coefficients will then be truncated if necessary.
+ GravityModel::Degree(), GravityModel::Order(),
MagneticModel::Degree(), MagneticModel::Order() return the
maximum degree and order of all the components of a GravityModel
or MagneticModel.
+ Gravity and MagneticField utilities accept -N and -M options to
to allow the maximum degree and order to be specified.
* The GeodSolve allows fractional distances to be entered as fractions
(with the -F flag).
* MajorRadius() methods are now called EquatorialRadius() for the C++,
Java, and .NET libraries. "Equatorial" is more descriptive in the
case of prolate ellipsoids. MajorRadius() is retained for backward
compatibility for C++ and Java but is deprecated.
* Minimum version updates:
+ CMake = 3.1.0, released 2014-12-15.
+ Minimum g++ version = 4.8.0, released 2013-03-22.
+ Visual Studio 10 2010 (haven't been able to check Visual Studio
2008 for a long time).
+ WARNING: The next version of GeographicLib will require a C++11
compliant compiler. This means that the minimum version of
Visual Studio will be Visual Studio 12 2013.
+ Minimum boost version = 1.64 needed for GEOGRAPHICLIB_PRECISION
= 4.
+ Java = 1.6; this allows the removal of epsilon, min, hypot,
log1p, copysign, cbrt from GeoMath.
* CMake updates:
+ Fine tune Visual Studio compatibility check in
find_package(GeographicLib); this allows GeographicLib compiled
with Visual Studio 14 2015 to be used with a project compiled
with Visual Studio 15 2017 and 16 2019.
+ Suppress warnings with dotnet build.
+ Change CMake target names and add an interface library (thanks
to Matthew Woehlke).
+ Remove pre-3.1.0 cruft and update the documentation to remove
the need to call include_dirctories.
+ Add _d suffix to example and test programs.
+ Changer installation path for binary installer to the Windows
default.
+ Add support for Intel compiler (for C++, C, Fortran). This
entails supplying the -fp-model precise flag to prevent the
compiler from incorrectly simplying (a + b) + c and 0.0 + x.
* Add version 2 of the World Magnetic Model 2015, wmm2015v2. This is
now the default magnetic model for MagneticField (replacing wmm2015
which is now deprecated). Coming in 2019-12: the wmm2020 model.
* The -f flag in the scripts geographiclib-get-geoids,
geographiclib-get-gravity, and geographiclib-get-magnetic, allows
you to load new models (not yet in the set defined by "all"). This
is in addition to its original role of allowing you to overwrite
existing models.
* Changes in math function support:
+ Move some of the functionality from Math.hpp to Math.cpp to make
compilation of package which depend on GeographicLib less
sensitive to the current compiler environment.
+ Add Math::remainder, Math::remquo, Math::round, and
Math::lround. Also add implementations of remainder, remquo to
C implementation.
+ Math::cbrt, Math::atanh, and Math::asinh now preserve the sign
of -0. (Also: C, Java, JavaScript, Python, MATLAB. Not
necessary: Fortran because sign is a built-in function.)
+ JavaScript: fall back to Math.hypot, Math.cbrt, Math.log1p,
Math.atanh if they are available.
* When parsing DMS strings ignore various non-breaking spaces (C++ and
JavaScript).
* Improve code coverage in the tests of geodesic algorithms (C++, C,
Java, JavaScript, Python, MATLAB, Fortran).
* Old deprecated NormalGravity::NormalGravity constructor removed.
* Additions to the documentation:
+ add documentation links to ge{distance,reckon}.m;
+ clarify which solution is returned for Geocentric::Reverse.
|
|
From: Charles K. <cha...@sr...> - 2019-05-07 19:12:03
|
There's a BUG in the PolygonArea::TestEdge routine in the Java
implementation of GeographicLib. The following patch fixes this:
diff --git
a/java/src/main/java/net/sf/geographiclib/PolygonArea.java
b/java/src/main/java/net/sf/geographiclib/PolygonArea.java
index 1e4ed1a1..b7379bcc 100644
--- a/java/src/main/java/net/sf/geographiclib/PolygonArea.java
+++ b/java/src/main/java/net/sf/geographiclib/PolygonArea.java
@@ -338,10 +338,10 @@ public class PolygonArea {
_earth.Direct(_lat1, _lon1, azi, false, s, _mask);
tempsum += g.S12;
crossings += transitdirect(_lon1, g.lon2);
+ crossings += transit(g.lon2, _lon0);
g = _earth.Inverse(g.lat2, g.lon2, _lat0, _lon0, _mask);
perimeter += g.s12;
tempsum += g.S12;
- crossings += transit(g.lon2, _lon0);
}
if ((crossings & 1) != 0)
This will be included in the next release (version 1.50).
|
|
From: Charles K. <ch...@ka...> - 2019-02-05 23:32:18
|
The World Magnetic Model wmm2015v2 is now available for use with GeographicLib. You can download it from https://sourceforge.net/projects/geographiclib/files/magnetic-distrib/ This "out of cycle" release is described at https://www.ncei.noaa.gov/news/world-magnetic-model-out-cycle-release https://www.nytimes.com/2019/02/04/science/north-magnetic-pole-model.html The original wmm2015 is still available, but this labeled "deprecated" by NOAA. GeographicLib needs no modification to use wmm2015v2; just install the model as described in https://geographiclib.sourceforge.io/html/magnetic.html#magneticinst but note that the geographiclib-get-magnetic script will complain that wmm2015v2 is an unknown model. With the next release of GeographicLib, the MagneticField utility will use wmm2015v2 as the default model. |
|
From: Charles K. <ch...@ka...> - 2017-10-05 15:04:03
|
Changes between 1.49 (released 2017-10-05) and 1.48 versions:
* Add the Enhanced Magnetic Model 2017, emm2017. This is valid for
2000 thru the end of 2021.
* Avoid potential problems with the order of initializations in DMS,
GARS, Geohash, Georef, MGRS, OSGB, SphericalEngine; this only would
have been an issue if GeographicLib objects were instantiated
globally. Now no GeographicLib initialization code should be run
prior to the entry of main().
* To support the previous fix, add an overload, Utility::lookup(const
char* s, char c).
* NearestNeighbor::Search throws an error if pts is the wrong size
(instead of merely returning no results).
* Use complex arithmetic for Clenshaw sums in TransverseMercator and
tranmerc_{fwd,inv}.m.
* Changes in cmake support:
+ fix compiler flags for GEOGRAPHICLIB_PRECISION = 4;
+ add CONVERT_WARNINGS_TO_ERRORS option (default OFF), if ON then
compiler warnings are treated as errors.
* Fix warnings about implicit conversions of doubles to bools in C++,
C, and JavaScript packages.
* Binary installers for Windows now use Visual Studio 14 2015.
|
|
From: Charles K. <cha...@sr...> - 2017-10-05 14:55:08
|
Changes between 1.49 (released 2017-10-05) and 1.48 versions:
* Add the Enhanced Magnetic Model 2017, emm2017. This is valid for
2000 thru the end of 2021.
* Avoid potential problems with the order of initializations in DMS,
GARS, Geohash, Georef, MGRS, OSGB, SphericalEngine; this only would
have been an issue if GeographicLib objects were instantiated
globally. Now no GeographicLib initialization code should be run
prior to the entry of main().
* To support the previous fix, add an overload, Utility::lookup(const
char* s, char c).
* NearestNeighbor::Search throws an error if pts is the wrong size
(instead of merely returning no results).
* Use complex arithmetic for Clenshaw sums in TransverseMercator and
tranmerc_{fwd,inv}.m.
* Changes in cmake support:
+ fix compiler flags for GEOGRAPHICLIB_PRECISION = 4;
+ add CONVERT_WARNINGS_TO_ERRORS option (default OFF), if ON then
compiler warnings are treated as errors.
* Fix warnings about implicit conversions of doubles to bools in C++,
C, and JavaScript packages.
* Binary installers for Windows now use Visual Studio 14 2015.
|
|
From: Charles K. <cha...@sr...> - 2017-04-09 14:07:30
|
Changes between 1.48 (released 2017-04-09) and 1.47 versions:
* The "official" URL for GeographicLib is now
https://geographiclib.sourceforge.io (instead of
http://geographiclib.sourceforge.net).
* The default range for longitude and azimuth is now (-180d, 180d],
instead of [-180d, 180d). This was already the case for the C++
library; now the change has been made to the other implementations
(C, Fortran, Java, JavaScript, Python, MATLAB, and Maxima).
* Changes to NearestNeighbor:
+ fix BUG in reading a NearestNeighbor object from a stream which
sometimes incorrectly caused a "Bad index" exception to be thrown;
+ add operator<<, operator>>, swap,
std::swap(NearestNeighbor&, NearestNeighbor&);
* Additions to the documentation:
+ add documentation on finding nearest neighbors;
+ normal gravity documentation is now on its own page and now has an
illustrative figure;
+ document the truncation error in the series for auxiliary
latitudes.
* Fix BUGS in MATLAB function geodreckon with mixed scalar and array
arguments.
* Workaround bug in math.fmod for Python 2.7 on 32-bit Windows
machines.
* Changes in cmake support:
+ add USE_BOOST_FOR_EXAMPLES option (default OFF), if ON search for
Boost libraries for building examples;
+ add APPLE_MULTIPLE_ARCHITECTURES option (default OFF), if ON build
for both i386 and x86_64 on Mac OS X systems;
+ don't add flag for C++11 for g++ 6.0 (since it's not needed).
* Fix compiler warnings with Visual Studio 2017 and for the C library.
|
|
From: Charles K. <cha...@sr...> - 2017-02-15 20:43:16
|
A file m4/pkg.m4 was missing from release 1.47. I've made a release of 1.47-patch1 to fix this problem. This only affects autoconf builds; you can ignore this if you use cmake. Only the source packages have been updated. Thanks to Sebastiaan Couwenberg for supplying the fix. |
|
From: Charles K. <cha...@sr...> - 2017-02-15 11:08:17
|
Changes between 1.47 (released 2017-02-15) and 1.46 versions:
* Add NearestNeighbor class.
* Improve accuracy of area calculation (fixing a flaw introduced in
version 1.46); fix applied in Geodesic, GeodesicExact, and the
implementations in C, Fortran, Java, JavaScript, Python, MATLAB, and
Maxima.
* Generalize NormalGravity to allow oblate and prolate ellipsoids. As
a consequence a new form of constructor has been introduced and the
old form is now deprecated (and because the signatures of the two
constructors are similar, the compiler will warn about the use of
the old one).
* Changes in Math class:
+ Math::sincosd, Math::sind, Math::cosd only return -0 for the case
sin(-0);
+ Math::atan2d and Math::AngNormalize return results in (-180deg,
180deg]; this may affect the longitudes and azimuth returned by
several other functions.
* Add Utility::trim() and Utility::val<T>(); Utility::num<T>() is now
DEPRECATED.
* Changes in cmake support:
+ remove support of PACKAGE_PATH and INSTALL_PATH in cmake
configuration;
+ fix to FindGeographicLib.cmake to make it work on Debian systems;
+ use $<TARGET_PDB_FILE:tgt> (cmake version >= 3.1);
+ use NAMESPACE for exported targets;
+ geographiclib-config.cmake exports GEOGRAPHICLIB_DATA,
GEOGRAPHICLIB_PRECISION, and GeographicLib_HIGHPREC_LIBRARIES.
* Add pkg-config support for cmake and autoconf builds.
* Minor fixes:
+ fix the order of declarations in C library, incorporating the
patches in version 1.46.1;
+ fix the packaging of the python library, incorporating the patches
in version 1.46.3;
+ restrict junit dependency in the Java package to testing scope
(thanks to Mick Killianey);
+ various behind-the-scenes fixes to EllipticFunction;
+ fix documentation and default install location for Windows binary
installers;
+ fix clang compiler warnings in GeodesicExactC4 and
TransverseMercator.
|
|
From: Charles K. <cha...@sr...> - 2016-02-15 01:59:09
|
Changes between 1.46 (released 2016-02-15) and 1.45 versions:
* The following BUGS have been fixed:
+ the -w flag to Planimeter(1) was being ignored;
+ in the Java package, the wrong longitude was being returned with
direct geodesic calculation with a negative distance when starting
point was at a pole (this bug was introduced in version 1.44);
+ in the JavaScript package, PolygonArea.TestEdge contained a
misspelling of a variable name and other typos (problem found by
threepointone).
* INCOMPATIBLE CHANGES:
+ make the -w flag (to swap the default order of latitude and
longitude) a toggle for all utility programs;
+ the -a option to GeodSolve(1) now toggles (instead of sets) arc
mode;
+ swap order coslon and sinlon arguments in CircularEngine class.
* Remove deprecated functionality:
+ remove gradient calculation from the Geoid class and GeoidEval(1)
(this was inaccurate and of dubious utility);
+ remove reciprocal flattening functions, InverseFlattening in many
classes and Constants::WGS84_r(); stop treating flattening > 1 as
the reciprocal flattening in constructors;
+ remove DMS::Decode(string), DMS::DecodeFraction,
EllipticFunction:m, EllipticFunction:m1, Math::extradigits,
Math::AngNormalize2, PolygonArea::TestCompute;
+ stop treating LONG_NOWRAP as an alias for LONG_UNROLL in Geodesic
(and related classes) and Rhumb;
+ stop treating full/schmidt as aliases for FULL/SCHMIDT in
SphericalEngine (and related classes);
+ remove qmake project file src/GeographicLib.pro because QtCreator
can handle cmake projects now;
+ remove deprecated Visual Studio 2005 project and solution files.
* Changes to GeodesicLine and GeodesicLineExact classes; these changes
(1) simplify the process of computing waypoints on a geodesic given
two endpoints and (2) allow a GeodesicLine to be defined which is
consistent with the solution of the inverse problem (in particular
Geodesic::InverseLine the specification of south-going lines which
pass the poles in a westerly direction by setting sin alpha_1 = -0):
+ the class stores the distance s13 and arc length a13 to a
reference point 3; by default these quantities are NaNs;
+ GeodesicLine::SetDistance (and GeodesicLine::SetArc) specify the
distance (and arc length) to point 3;
+ GeodesicLine::Distance (and GeodesicLine::Arc) return the distance
(and arc length) to point 3;
+ new methods Geodesic::InverseLine and Geodesic::DirectLine return
a GeodesicLine with the reference point 3 defined as point 2 of
the corresponding geodesic calculation;
+ these changes are also included in the C, Java, JavaScript, and
Python packages.
* Other changes to the geodesic routines:
+ more accurate solution of the inverse problem when longitude
difference is close to 180deg (also in C, Fortran, Java,
JavaScript, Python, MATLAB, and Maxima packages);
+ more accurate calculation of lon2 in the inverse calculation with
LONG_UNROLL (also in Java, JavaScript, Python packages).
* Changes to GeodSolve(1) utility:
+ the -I and -D options now specify geodesic line calculation via
the standard inverse or direct geodesic problems;
+ rename -l flag to -L to parallel the new -I and -D flags (-l is is
retained for backward compatibility but is deprecated), and
similarly for RhumbSolve(1);
+ the -F flag (in conjunction with the -I or -D flags) specifies
that distances read on standard input are fractions of s13 or a13;
+ the -a option now toggles arc mode (noted above);
+ the -w option now toggles longitude first mode (noted above).
* Changes to Math class:
+ Math::copysign added;
+ add overloaded version of Math::AngDiff which returns the error in
the difference. This allows a more accurate treatment of inverse
geodesic problem when lon12 is close to 180deg;
+ Math::AngRound now converts tiny negative numbers to -0 (instead
of +0), however -0 is still converted to +0.
* Add -S and -T options to GeoConvert(1).
* Add Sphinx documentation for Python package.
* Samples of wrapping the C++ library, so it's accessible in other
languages, are given in wrapper/C, wrapper/python, and
wrapper/matlab.
* Binary installers for Windows now use Visual Studio 12 2013.
* Remove top-level pom.xml from release (it was specific to SRI).
* A reminder: because of the JavaScript changes introduced in version
1.45, you should remove the following installation directories from
your system:
+ Windows: ${CMAKE_INSTALL_PREFIX}/doc/scripts
+ Others: ${CMAKE_INSTALL_PREFIX}/share/doc/GeographicLib/scripts
|
|
From: Charles K. <cha...@sr...> - 2015-09-30 12:42:38
|
Changes between 1.45 (released 2015-09-30) and 1.44 versions:
* Fix BUG in solution of inverse geodesic caused by misbehavior of
some versions of Visual Studio on Windows (fmod(-0.0, 360.0) returns
+0.0 instead of -0.0) and Octave (sind(-0.0) returns +0.0 instead of
-0.0). These bugs were exposed because max(-0.0, +0.0) returns -0.0
for some languages.
* Geodesic::Inverse now correctly returns NaNs if one of the latitudes
is a NaN.
* Changes to JavaScript package:
+ thanks to help from Yurij Mikhalevich, it is a now a node package
that can be installed with npm;
+ make install now installs the node package in
lib/node_modules/geographiclib;
+ add unit tests using mocha;
+ add documentation via JSDoc;
+ fix bug Geodesic.GenInverse (this bug, introduced in version 1.44,
resulted in the wrong azimuth being reported for points at the
pole).
* Changes to Java package:
+ add implementation of ellipsoidal Gnomonic projection (courtesy of
Sebastian Mattheis);
+ add unit tests using JUnit;
+ Math.toRadians and Math.toDegrees are used instead of
GeoMath.degree (which is now removed), as a result...
+ Java version 1.2 (released 1998-12) or later is now required.
* Changes to Python package:
+ add unit tests using the unittest framework;
+ fixed bug in normalization of the area.
* Changes to MATLAB package:
+ fix array size mismatch in geoddistance by avoiding calls to
subfunctions with zero-length arrays;
+ fix tranmerc_{fwd,inv} so that they work with arrays and mixed
array/scalar arguments;
+ work around Octave problem which causes mgrs_fwd to return garbage
with prec = 10 or 11;
+ add geographiclib_test.m to run a test suite.
* Behavior of substituting 1/f for f if f > 1 is now deprecated. This
behavior has been removed from the JavaScript, C, and Python
implementations (it was never documented). Maxima, MATLAB, and
Fortran implementations never included this behavior.
* Other changes:
+ fix bug, introduced in version 1.42, in the C++ implementation to
the computation of area which causes NaNs to be returned in the
case of a sphere;
+ fixed bug, introduced in version 1.44, in the detection of C++11
math functions in configure.ac;
+ throw error on non-convergence in Gnomonic::Reverse if
GEOGRAPHICLIB_PRECISION > 3;
+ add geod_polygon_clear to C library;
+ turn illegal latitudes into NaNs for Fortran library;
+ add test suites for the C and Fortran libraries.
|
|
From: Charles K. <cha...@sr...> - 2015-08-14 22:07:11
|
Changes between 1.44 (released 2015-08-14) and 1.43 versions:
* Various changes to improve accuracy, e.g., by minimizing round-off
errors:
+ Add Math::sincosd, Math::sind, Math::cosd which take their
arguments in degrees. These functions do exact range reduction
and thus they obey exactly the elementary properties of the
trigonometric functions, e.g., sin 9d = cos 81d =
- sin 123456789d.
+ Math::AngNormalize now works for any angles, instead of angles in
the range [-540d, 540d); the function Math::AngNormalize2 is now
deprecated.
+ This means that there is now no restriction on longitudes and
azimuths; any values can be used.
+ Improve the accuracy of Math::atan2d.
+ DMS::Decode avoids unnecessary round-off errors; thus 7:33:36 and
7.56 result in identical values. DMS::Encode rounds ties to even.
These changes have also been made to DMS.js.
+ More accurate rounding in MGRS::Reverse and mgrs_inv.m; this
change only makes a difference at sub-meter precisions.
+ With MGRS::Forward and mgrs_fwd.m, ensure that digits in lower
precision results match those at higher precision; as a result,
strings of trailing 9s are less likely to be generated. This
change only makes a difference at sub-meter precisions.
+ Replace the series for A2 in the Geodesic class with one with
smaller truncation errors.
+ Geodesic::Inverse sets s12 to zero for coincident points at pole
(instead of returning a tiny quantity).
+ Math::LatFix returns its argument if it is in [-90d, 90d]; if not,
it returns NaN.
+ Using Math::LatFix, routines which don't check their arguments now
interpret a latitude outside the legal range of [-90d, 90d] as a
NaN; such routines will return NaNs instead of finite but
incorrect results; caution: code that (dangerously) relied on the
"reasonable" results being returned for values of the latitude
outside the allowed range will now malfunction.
* All the utility programs accept the -w option to swap the
latitude-longitude order on input and output (and where appropriate
on the command-line arguments). CartConvert now accepts the -p
option to set the precision; now all of the utilities except
GeoidEval accept -p.
* Add classes for GARS, the Global Area Reference System, and for
Georef, the World Geographic Reference System.
* Changes to DMS::Decode and DMS.js:
+ tighten up the rules:
o 30:70.0 and 30:60 are illegal (minutes and second must be
strictly less than 60), however
o 30:60.0 and 30:60. are legal (floating point 60 is OK, since it
might have been generated by rounding 59.99...);
+ generalize a+b concept, introduced in version 1.42, to any number
of pieces; thus 8+0:40-0:0:10 is interpreted as 8:39:50.
* Documentation fixes:
+ update man pages to refer to GeoConvert(1) on handling of
geographic coordinates;
+ document limitations of the series used for TransverseMercator;
+ hide the documentation of the computation of the gradient of the
geoid height (now deprecated) in the Geoid class;
+ warn about the possible misinterpretation of 7.0E+1 by
DMS::Decode;
+ swaplatlong optional argument of DMS::DecodeLatLon and various
functions in the GeoCoords class is now called longfirst;
+ require Doxygen 1.8.7 or later.
* More systematic treatment of version numbers:
+ Python: __init__.py defines __version__ and __version_info__;
+ JavaScript:
o Math.js defines Constants.version and Constants.version_string;
o version number included as comment in packed script
geographiclib.js;
o geod-calc.html and geod-google.html report the version number;
o http://geographiclib.sourceforge.net/scripts/ gives access to
earlier versions of geographiclib.js as geographiclib-m.nn.js;
+ Fortran: add geover subroutine to return version numbers;
+ Maxima: geodesic.mac defines geod_version;
+ CGI scripts: these report the version numbers of the utilities.
* BUG FIXES:
+ NormalGravity now works properly for a sphere (omega = f = J2 =
0), instead of returning NaNs (problem found by htallon);
+ CassiniSoldner::Forward and cassini_fwd.m now returns the correct
azimuth for points at the pole.
* MATLAB-specific fixes:
+ mgrs_fwd now treats treats prec > 11 as prec = 11;
+ illegal letter combinations are now correctly detected by
mgrs_inv;
+ fixed bug where mgrs_inv returned the wrong results for prec = 0
strings and center = 0;
+ mgrs_inv now decodes prec = 11 strings properly;
+ routines now return array results with the right shape;
+ routines now properly handle mixed scalar and array arguments.
* Add Accumulator<T>::operator*=(T y).
* Geohash uses "invalid" instead of "nan" when the latitude or
longitude is a nan.
|