[Proj] C++ code for exact Transverse Mercator Projection
Charles Karney
ckarney at sarnoff.com
Wed Sep 17 08:35:09 EDT 2008
Gerald I. Evenden wrote:
> On Tuesday 16 September 2008 5:51:06 pm Charles Karney wrote:
>
>> This is just a straightforward implementation of transformations
>> given by Lee in his 1976 monograph. The resulting code is quite
>> fast. I haven't done detailing timing on it. However I estimate
>> that it's no more than a "few" times slower than a standard series
>> solution (a la Krueger).
The timing for the forward+reverse transformation is about 2.5 times
slower than my implementation of the Krueger-style series to sixth order
in e^2. On my 2.6GHz Intel machine, the time for a forward+reverse
transform is 12us (g++ -O3 version 4.3.0).
> Your claim that the all the code in your procedure is going to come
> within a '"few" times' of the following:
** SNIP **
No I wasn't claiming a few times relative to tmerc but relative to the
Krueger series methods such as you've implemented as etmerc, ftmerc,
ktmerc. I believe that these latter methods have substantially smaller
errors than tmerc and so are a more appropriate basis for comparison.
Based on the timing I quote above I would be surprised if the exact
method is as much as 10 times slower than the Krueger series. However
even if it were 100 times slower, I still believe that this is a useful
contribution being (as far as I can tell) the only published code for
the exact projection which covers the whole globe. (Dozier's code is
published; but it fails in several areas. Others apparently have
working codes but have not published them.)
(Incidentally the timing comparison I cite above includes convergence
and scale calculations on both the forward and reverse transformations.)
> Right now I am trying to get the c++ routines to compile but I can see
> this may take a bit. First problem was reference to
> '/GeographicLib/*.hpp' which file structure no longer exists in this
> distribution.
Did you include "-I.." in the compile/link line as documented at the top
of test program? Here are the commands needed to compile and run the
test program...
$ tar xfz TransverseMercatorExact.tgz
$ cd GeographicLib
$ g++ -g -O3 -I.. -o TransverseMercatorTest \
TransverseMercatorTest.cpp TransverseMercatorExact.cpp \
Constants.cpp EllipticFunction.cpp
$ ./TransverseMercatorTest -h
TransverseMercatorTest [-r]
Read lines with latitutde and longitude (or easting and northing if
-r is specified) from stdin and print latitude, longitude, easting,
northing, convergence and scale. WGS84 ellipsoid assumed, central
meridian = 0, UTM central scale, and false easting and false
northing are zero.
$ echo 1 89 | ./TransverseMercatorTest
1 89 23941118.301 8283847.395 80.3736 15.4177
> The distribution was not ready for prime time. ;-)
This is surely possible. In fact, I just noticed a blunder in the
convergence calculation for the reverse transform. (I converted to
degrees twice.) The fixed version is now posted.
--
Charles Karney <charles at karney.com>
702 Prospect Ave, Princeton, NJ 08540-4037
URL: http://charles.karney.info
Tel: +1 609 497 4662 (H)
+1 609 734 2312 (W)
More information about the Proj
mailing list