<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Thanks Noel. It seems to be a bit more complex (they use both 3D and 2D
transformations from appendixes B and C), but essentially you are
right.  <br>
<br>
I'm sorry to not have given the URL of this Ordnance Survey publication:<br>
<br>
<a class="moz-txt-link-freetext" href="http://www.ordnancesurvey.co.uk/oswebsite/gps/docs/A_Guide_to_Coordinate_Systems_in_Great_Britain.pdf">http://www.ordnancesurvey.co.uk/oswebsite/gps/docs/A_Guide_to_Coordinate_Systems_in_Great_Britain.pdf</a><br>
<br>
This booklet ( I would advise everyone to print it out: it's very good)
also answered my question about how different lat-lon values are
computed for different Datums (p. 16). Essentially, one initial point
is chosen with reference to the the center, orientation, size and shape
of the chosen ellipsoid,  and with that a coordinate system is defined 
in which all other points on the earth have unique coordinates.
Different datums give different parameters for the initial control
point, and so for the whole coordinate system.  I still don't get the
relationship between these values and astronomical lat-lon values
though.<br>
<br>
This also makes clear to me a discussion on this list about the
difference between the DATUM and ELLPS parameters in PROJ. As explained
on p. 16 of the OS book, an ellipse has three sets of parameters:
origin (x,y,z), rotation (around the x,y,z axes), and size (minor and
major axes). The original ELLPS parameter only takes the third one into
account: size, aka minor and major axis, while assuming that origin and
rotation are the same. To transform both origin and rotation of the
ellipsoid (but not its size), a so called Helmert transformation is
used, needing seven parameters: three for the origin, three for the
rotation, and one additional scale parameter (p. 32). Essentially, this
is what the seven-number +TOWGS84 parameter in PROJ does. Also, there
is a formula to transform both the origin and the size of the ellipsoid
(but not the rotation): the Molodensky transformation (p. 34). I guess
that this is the three-number +TOWGS84 parameter in PROJ, used for
origin-translation only. There seems to be no one-for-all formula for a
direct transformation of all three features of an ellipsoid: origin,
rotation and size.<br>
<br>
This may be the source of confusion in PROJ: the +ELLPS parameter
transforms only the size of the ellipsoid, the +TOWGS84 parameter
transforms the origin and rotation of the ellipsoid, and the +DATUM
parameter transform all three features: origin, rotation and size. The
+DATUM parameter is not a single transformation however: it is just
shorthand for +ELLPS=... +TOWGS84=... Although from a mathematical and
programming point of view there is nothing wrong with this, PROJ's
terminology is confusing: +TOWGS84 does not transform to the WGS84
datum: it just transforms origin and rotation between two arbitrary
ellipsoids. To transform to the WGS84 Datum you still need the
+ELLPS=WGS84 parameter. From a generalized point of view, the +DATUM
parameter is unnecessary. It would be much more precise to always
specify both the +ELLPS and the +TOWGS84 ("Helmert") parameters. I can
understand why the DATUM solution was chosen, as almost all datum
transforms are from and to the WGS84 datum, but it obscures the more
general issue. Same goes for the decision to disregard the +ELLPS
parameter in PROJ when no further DATUM information is given
(<a class="moz-txt-link-freetext" href="http://lists.maptools.org/pipermail/proj/2009-January/004303.html">http://lists.maptools.org/pipermail/proj/2009-January/004303.html</a>),
although there too I understand the immediate cause for this. And
finally, the "nadgrids=@null"  would become superfluous with the more
general approach: always specify two transformations for a datum shift,
and one for an ellipsoid transformation. <br>
<br>
I agree with Gerald Evenden on most of his remarks about the separation
of ellipsoid and datum computations: there seems to be no complete
analytical transformation formula for ellipsoids as there is in planar
geometry, it is always a two-step procedure. Having said that, I
nevertheless think that the complete procedure can be easily
implementend within PROJ. It's more a matter of terminology than of
mathematics.<br>
<br>
So at last I have seen the light in this matter, although after
considerable head-scratching. If I am wrong though, please let the list
know. There is an enormous amount of knowledge about this matter on
this list, and I am just a simple historian (medievalist) who happens
to have worked a lot with old maps and had to learn something about
programming in the meantime. I still don't know much about geodesy, but
I have been surprised how much you need to know about the exact form of
the earth and its geoid to get an exact georeference: that was
definitely not part of our curriculum.  Yet, and this is a fundamental
point for me, this precision should be aimed at. Theoretically,
precisions of one to five meters should be possible for large scale
maps, and I believe that I can get very far in that direction with
PROJ, GDAL and the answers from this list. A lot of Internet
cartography lacks this final precision, not only with historical maps,
but also e.g. in the case of Google maps (there have been extensive
discussions about Google's accuracy on this list). It's relatively easy
to put lots and lots of maps on the Internet, but it is enormously
difficult to get them as precise as they could (and should) be. Fifty
meters just isn't good enough. Personally, I find it worthwile (and
terrifically interesting) to aim at this maximum precision, and it will
certainly pay back, but only in the long run. In that same long run
however, much of the rubbish that is now on Internet can be happily
thrown away.<br>
<br>
And if someone on this list needs help with his or her medieval
charters, I would be happy to assist :-)<br>
<br>
Jan<br>
<br>
<br>
Noel Zinn wrote:
<blockquote cite="mid:17FF2DF8C6C548349088C7DA44C94DB3@PowerSpec"
 type="cite">
  <meta http-equiv="Content-Type" content="text/html; ">
  <meta name="Generator" content="Microsoft Word 11 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><o:SmartTagType
 namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="City">
  <o:SmartTagType
 namespaceuri="urn:schemas-microsoft-com:office:smarttags"
 name="country-region"><o:SmartTagType
 namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="place">
  <o:SmartTagType
 namespaceuri="urn:schemas-microsoft-com:office:smarttags"
 name="PersonName"><!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]-->
  <style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";
        color:black;}
h1
        {margin-top:6.0pt;
        margin-right:0in;
        margin-bottom:6.0pt;
        margin-left:.5in;
        text-indent:-.25in;
        page-break-after:avoid;
        mso-list:l0 level1 lfo2;
        font-size:12.0pt;
        font-family:Arial;
        color:black;}
h2
        {margin-top:6.0pt;
        margin-right:0in;
        margin-bottom:6.0pt;
        margin-left:.75in;
        text-indent:-.25in;
        page-break-after:avoid;
        mso-list:l1 level1 lfo4;
        font-size:14.0pt;
        font-family:Arial;
        color:black;
        font-style:italic;}
p.MsoBodyText2, li.MsoBodyText2, div.MsoBodyText2
        {margin-top:0in;
        margin-right:0in;
        margin-bottom:6.0pt;
        margin-left:0in;
        line-height:200%;
        font-size:12.0pt;
        font-family:"Times New Roman";
        color:black;}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:purple;
        text-decoration:underline;}
pre
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:Arial;
        color:navy;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
        {page:Section1;}
 /* List Definitions */
 @list l0
        {mso-list-id:1302539220;
        mso-list-type:hybrid;
        mso-list-template-ids:1400028960 1556136038 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-style-link:"Heading 1";
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1
        {mso-list-id:2076705572;
        mso-list-type:hybrid;
        mso-list-template-ids:2072013344 127926764 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l1:level1
        {mso-level-number-format:alpha-lower;
        mso-level-style-link:"Heading 2";
        mso-level-tab-stop:.75in;
        mso-level-number-position:left;
        margin-left:.75in;
        text-indent:-.25in;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
-->
  </style><!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
  </o:SmartTagType></o:SmartTagType></o:SmartTagType></o:SmartTagType>
  <div class="Section1">
  <p class="MsoNormal"><font color="navy" face="Arial" size="2"><span
 style="font-size: 10pt; font-family: Arial; color: navy;">Jan,<o:p></o:p></span></font></p>
  <p class="MsoNormal"><font color="navy" face="Arial" size="2"><span
 style="font-size: 10pt; font-family: Arial; color: navy;"><o:p> </o:p></span></font></p>
  <p class="MsoNormal"><font color="navy" face="Arial" size="2"><span
 style="font-size: 10pt; font-family: Arial; color: navy;">Not derived
from *projected* coordinates (i.e.
3D => 2D) at all.  The Ordnance Survey have taken you on a tour from
one 3D space (lat/lon/height) to another 3D space (what we’re calling
geocentric Cartesian coordinates X/Y/Z, also known as ECEF) and back to
the
original 3D space (lat/lon/height, but referenced to a different
ellipsoid).  So you’ve never left three dimensions even though the
Ordnance Survey suggested that you toss datum B ellipsoid height.<o:p></o:p></span></font></p>
  <p class="MsoNormal"><font color="navy" face="Arial" size="2"><span
 style="font-size: 10pt; font-family: Arial; color: navy;"><o:p> </o:p></span></font></p>
  <p class="MsoNormal"><font color="navy" face="Arial" size="2"><span
 style="font-size: 10pt; font-family: Arial; color: navy;">You’ve
previously asked about an
ellipsoid switch.  If nothing happens in the geocentric Cartesian
domain
(ECEF is so much easier to write!), that is, no translations at the
geocenter
in X, Y or Z and no rotations about any of these axes and no scale
change, then
you’ve *<b><span style="font-weight: bold;">just</span></b>* switched
ellipsoids.  Nevertheless, the resulting change in ellipsoid height is
an
important clue that you’re not *<b><span style="font-weight: bold;">on</span></b>*
the new ellipsoid.  Once the ellipsoid height is tossed, the point at
that
lat/lon on the new ellipsoid with zero height is a different point than
that
you started with.<o:p></o:p></span></font></p>
  <p class="MsoNormal"><font color="navy" face="Arial" size="2"><span
 style="font-size: 10pt; font-family: Arial; color: navy;"><o:p> </o:p></span></font></p>
  <p class="MsoNormal"><font color="navy" face="Arial" size="2"><span
 style="font-size: 10pt; font-family: Arial; color: navy;">Noel Zinn<o:p></o:p></span></font></p>
  <p class="MsoNormal"><font color="navy" face="Arial" size="2"><span
 style="font-size: 10pt; font-family: Arial; color: navy;"><o:p> </o:p></span></font></p>
  <div>
  <div class="MsoNormal" style="text-align: center;" align="center"><font
 color="black" face="Times New Roman" size="3"><span
 style="font-size: 12pt; color: windowtext;">
  <hr tabindex="-1" align="center" size="2" width="100%"></span></font></div>
  <p class="MsoNormal"><b><font color="black" face="Tahoma" size="2"><span
 style="font-size: 10pt; font-family: Tahoma; color: windowtext; font-weight: bold;">From:</span></font></b><font
 color="black" face="Tahoma" size="2"><span
 style="font-size: 10pt; font-family: Tahoma; color: windowtext;">
<a class="moz-txt-link-abbreviated" href="mailto:proj-bounces@lists.maptools.org">proj-bounces@lists.maptools.org</a>
[<a class="moz-txt-link-freetext" href="mailto:proj-bounces@lists.maptools.org">mailto:proj-bounces@lists.maptools.org</a>] <b><span
 style="font-weight: bold;">On
Behalf Of </span></b>Jan Hartmann<br>
  <b><span style="font-weight: bold;">Sent:</span></b> Friday, February
06, 2009
8:19 AM<br>
  <b><span style="font-weight: bold;">To:</span></b> <st1:PersonName
 w:st="on">PROJ.4 and general Projections Discussions</st1:PersonName><br>
  <b><span style="font-weight: bold;">Subject:</span></b> Re: [Proj]
Lat-Lon values
under different ellipsoides</span></font><font color="black"><span
 style="color: windowtext;"><o:p></o:p></span></font></p>
  </div>
  <p class="MsoNormal"><font color="black" face="Times New Roman"
 size="3"><span style="font-size: 12pt;"><o:p> </o:p></span></font></p>
  <p class="MsoNormal"><font color="black" face="Times New Roman"
 size="3"><span style="font-size: 12pt;">As an addition, look how the
British Ordnance survey
solves the problem of converting Lat-Lon values from one ellipse to
another:<br>
  <br>
" To summarise: for a simple datum change of latitude and longitude
coordinates from datum A to datum B, first convert to Cartesian
coordinates
(formulae in annexe B) taking all ellipsoid heights as zero and using
the
ellipsoid parameters of datum A; then apply a Helmert transformation
from datum
A to datum B using equation (3); finally convert back to latitude and
longitude
using the ellipsoid parameters of datum B (formulae in annexe C),
discarding
the datum B ellipsoid height. "<br>
  <br>
This would mean that different lat-lon values for different ellipsoids
are
*derived* from projected coordinates, not the other way round, as I
thought. I
still don't get the relationship between those computed lat-lon values
and the
astronomical ones though.<br>
  <br>
Jan<br>
  <br>
Frank Warmerdam wrote: <o:p></o:p></span></font></p>
  <pre wrap=""><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">Jan Hartmann wrote:<o:p></o:p></span></font></pre>
  <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">  <o:p></o:p></span></font></pre>
  <blockquote style="margin-top: 5pt; margin-bottom: 5pt;" type="cite">
    <pre wrap=""><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">Hi,<o:p></o:p></span></font></pre>
    <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;"><o:p> </o:p></span></font></pre>
    <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">This is something I have long been banging my head against. I think it <o:p></o:p></span></font></pre>
    <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">is a bug, but I am not sure. If I take a lat-lon value, computed on a <o:p></o:p></span></font></pre>
    <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">particular ellipsoid, and convert it to the lat-lon value on another <o:p></o:p></span></font></pre>
    <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">ellipsoid, I should get a different value, right? (e.g. cs2cs <o:p></o:p></span></font></pre>
    <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">+proj=longlat +ELLPS=bessel +to +proj=longlat +ELLPS=WGS84). PROJ4 <o:p></o:p></span></font></pre>
    <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">always gives the same value, but I have an extensive list of coordinates <o:p></o:p></span></font></pre>
    <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">of church towers in the <st1:country-region
 w:st="on"><st1:place w:st="on">Netherlands</st1:place></st1:country-region> with their lat-lon values in 1850, <o:p></o:p></span></font></pre>
    <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">based an a slightly smaller ellipsoid than we use nowadays, and the <o:p></o:p></span></font></pre>
    <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">lat-lon of the same towers derived from our modern RD-system, based on <o:p></o:p></span></font></pre>
    <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">the Bessel-ellipsoid, and without the WGS84 correction. There is a <o:p></o:p></span></font></pre>
    <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">systematic difference of about 50 meters. If I do the same computation <o:p></o:p></span></font></pre>
    <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">with the projected coordinates, I get the correct answer. Moreover, in <o:p></o:p></span></font></pre>
    <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">that case the transformation changes when I change the <o:p></o:p></span></font></pre>
    <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">ellipse-parameter, something that does not happen with lat-lon coordinates.<o:p></o:p></span></font></pre>
    <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;"><o:p> </o:p></span></font></pre>
    <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">So, is this a bug in PROJ? If so, can someone with geodetic experience <o:p></o:p></span></font></pre>
    <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">here explain to me how people can get different lat-lon values for the <o:p></o:p></span></font></pre>
    <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">same point, based on astronomical measurements?<o:p></o:p></span></font></pre>
    <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">    <o:p></o:p></span></font></pre>
  </blockquote>
  <pre wrap=""><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;"><o:p> </o:p></span></font></pre>
  <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">Jan,<o:p></o:p></span></font></pre>
  <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;"><o:p> </o:p></span></font></pre>
  <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">As of PROJ 4.6.0, the policy is to not attempt any conversion of lat/long<o:p></o:p></span></font></pre>
  <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">values between coordinate systems where only an ellipsoid is given.  So, to<o:p></o:p></span></font></pre>
  <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">get a datum shift it is now necessary to provide some sort of datum<o:p></o:p></span></font></pre>
  <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">shift information for both the source and destination coordinate systems.<o:p></o:p></span></font></pre>
  <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;"><o:p> </o:p></span></font></pre>
  <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">This is a deliberate change of policy to avoid lots of other complaints in<o:p></o:p></span></font></pre>
  <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">the past.<o:p></o:p></span></font></pre>
  <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;"><o:p> </o:p></span></font></pre>
  <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">I would suggest using something appropriate like +datum=<st1:City
 w:st="on"><st1:place w:st="on">potsdam</st1:place></st1:City> for your<o:p></o:p></span></font></pre>
  <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">Bessel data, and +datum=WGS84 instead of +ELLPS=WGS84.<o:p></o:p></span></font></pre>
  <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;"><o:p> </o:p></span></font></pre>
  <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">Best regards,<o:p></o:p></span></font></pre>
  <pre><font color="black" face="Courier New" size="2"><span
 style="font-size: 10pt;">  <o:p></o:p></span></font></pre>
  </div>
  <pre wrap="">
<hr size="4" width="90%">
_______________________________________________
Proj mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Proj@lists.maptools.org">Proj@lists.maptools.org</a>
<a class="moz-txt-link-freetext" href="http://lists.maptools.org/mailman/listinfo/proj">http://lists.maptools.org/mailman/listinfo/proj</a></pre>
</blockquote>
</body>
</html>