[PROJ] Transforming between ITRF realizations

Even Rouault even.rouault at spatialys.com
Fri May 3 11:58:32 PDT 2019


On vendredi 3 mai 2019 13:01:01 CEST Alan Snow wrote:
> Hi Trey,
> 
> I tried it with pyproj and I got one answer:
> >>> from pyproj import Transformer
> >>> trans = Transformer.from_pipeline("+init=ITRF2000:ITRF93")
> >>> trans.transform(-117.61748, 59.4967, 329.396)
> 
> (-111.83893294174032, 59.90053033616967, 330.56817290107665)
> 
> Then I used the `cct` tool and it seems to be slightly different:
> $ cct --version
> cct: Rel. 6.1.0, September 1st, 2019
> $ cct +init=ITRF2000:ITRF93
> -117.61748, 59.4967, 329.396
>     -117.6048        59.5032      329.3751           inf
> 
> Do you have a result you are expecting?

None of the above make sense (not sure why you don't get the same result as 
pyproj as with cct. You must perform some additional conversion: unit ?). For 
transformations between ITRF realizations, the difference between the input 
and output coordinates should be very small (typically of the order of one 
metre or less, ie in the range of 1e-6 to 1e-5 degree)

The +init=ITRF2000:ITRF93 definition uses a +proj=helmert operation which 
operates in the cartesian/geocentric coordinate space. So you need to convert 
from geographic to geocentric coordinates first.

$ echo "-117.61748, 59.4967, 329.396" | src/cct -d 7 +proj=pipeline \
  +step +proj=unitconvert +xy_in=deg +xy_out=rad \
  +step +proj=cart +ellps=GRS80 \
  +step +init=ITRF2000:ITRF93 \
  +step +inv +proj=cart +ellps=GRS80 \
  +step +proj=unitconvert +xy_in=rad +xy_out=deg

 -117.6174799     59.4967002   329.3845529           inf

Note also that being a time-dependent operation, you should generally supply 
the observation time as a 4th coordinate. If you do not do so, +proj=helmert 
will assume that the observation time is the same as the +t_epoch parameter, 
here 1988.

You can also get the same result with PROJ 6 using the EPSG dataset with:

echo "59.4967 -117.61748 329.396 1988" | src/cs2cs -f "%.7f" ITRF2000 ITRF93
59.4967002	-117.6174799 329.3845529 1988

ITRF2000 will resolve to EPSG:7909 (ITRF2000 Geographic3D CRS) and ITRF93 to 
EPSG:7905 (ITRF93 Geographic3D CRS).
Note the lat, long order due to using EPSG definitions.
The explicit 1988 here is needed since otherwise it would default to 0 (bug I 
just fixed in PROJ master / 6.1dev)

Even

-- 
Spatialys - Geospatial professional services
http://www.spatialys.com


More information about the PROJ mailing list