[Proj] Using Proj.4 to compress a 10-parameter Molodensky-Badekas datum shift into 7 parameters
Mikael Rittri
Mikael.Rittri at carmenta.com
Mon Oct 18 04:06:03 PDT 2010
Noel and Oscar,
I have followed your conversation. Thanks for your interest.
Noel wrote:
> I've coded this example in Matlab and agree with your final results
> > 66d4'54.705"W 9d34'49.001"N 180.499
>
> > Nevertheless, I disagree with your first intermediate computation
> > 2464278.090 -5783490.207 974643.507
>
> My intermediate results are
> => 2464278.08979296 -5783490.39620226 974642.385933922
>
> These are decimetric differences. Too much. Concerned, I computed
> the same in a commercial offering, Blue Marble Geographic Calculator.
> Blue Marble agrees with Matlab to the 4 decimal places I happened to
> have the precision set. So, I believe that Proj.4 is wrong in this case.
> You might consider writing a bug report. (BTW, these differences have
> nothing to do the use of a single, small-angle rotation matrix versus
> 3 concatenated single-angle matrices as done by ESRI.)
I noticed that Oscar got the same results as you. So I tried with
Carmenta Engine, and I, too, got the same results as you and Oscar,
apart from a 2.5 mm difference (probably caused by our using three
concatenated single-angle matrices).
As I started to write a bug report to Proj.4, I thought I would
run the following code in C++:
double dx = 0.0;
double dy = 0.0;
double dz = 0.0;
double arcsecToRadians = 3.141592653589793 / (180. * 60. * 60.);
double rx = 5.226 * arcsecToRadians;
double ry = 1.238 * arcsecToRadians;
double rz = -2.381 * arcsecToRadians;
double scaleFactor = 1.0 - 5.109e-6;
double xin = 2464351.59;
double yin = -5783466.61;
double zin = 974809.81;
double xout = scaleFactor * ( 1.0 * xin - rz * yin + ry * zin) + dx;
double yout = scaleFactor * ( rz * xin + 1.0 * yin - rx * zin) + dy;
double zout = scaleFactor * ( -ry * xin + rx * yin + 1.0 * zin) + dz;
which is my (personal) interpretation of the Position Vector Transformation
(as described in EPSG Guidance Note 7.2, section 2.4.3.2.1, pages 109-110.)
To my surprise, now I got
xout: 2464278.0897929627
yout: -5783490.2071627714
zout: 974643.50748968683
which agrees with cs2cs, but not with Noel/Oscar/Carmenta Engine ...
So I had to cancel my bug report.
Now I am just completely confused. Does my C++ code above contain
some misunderstanding of the Position Vector Transformation,
a misunderstanding that is also present in the cs2cs implementation?
Or is cs2cs correct after all?
Mikael Rittri
Carmenta AB
Sweden
http://www.carmenta.com
-----Original Message-----
From: proj-bounces at lists.maptools.org [mailto:proj-bounces at lists.maptools.org] On Behalf Of Noel Zinn (cc)
Sent: den 15 oktober 2010 20:57
To: PROJ.4 and general Projections Discussions
Subject: Re: [Proj] Using Proj.4 to compress a 10-parameter Molodensky-Badekas datum shift into 7 parameters
[ see http://lists.maptools.org/pipermail/proj/2010-October/005441.html ]
More information about the Proj
mailing list