Hi Even 

Thanks for your kind and developed answer. 
I've tried with the EPSG equivalents: ( [ 
https://www.sandre.eaufrance.fr/jeu-de-donnees/projection-des-coordonn%C3%A9es?lang=fr
 | 
https://www.sandre.eaufrance.fr/jeu-de-donnees/projection-des-coordonnées?lang=fr
 ] ) 



echo 0 56.000000 0 | ./cs2cs +from EPSG:4807 +to EPSG:3034 




But the result doesn't make any sense: 




-1640975.39 10099142.17 0.00 




Is there something with the units that is not correct maybe? 







This works well: 

echo 0 56.000000 0 | PROJ_NETWORK=ON ./cs2cs -d 3 "NTF geographiques Paris (gr) 
+ NGF-IGN69 height" IGNF:ETRS89LCC --3d 







and I have a few questions about it: 




1) the result remains unchanged if I remove or put PROJ_NETWORK to OFF. What 
does it do exactly? 


2) Does the string " NTF geographiques Paris (gr) + NGF-IGN69 height" 
correspond to an entry in the CRS database proj.db or is it interpreted as a 
compounded system because PROJ parses the string? There is no simple code like 
EPSG or IGNF related to it? Can we create one easily? 




3) Where can I see where this crs"NTF geographiques Paris (gr) + NGF-IGN69 
height" is defined in the sql commands used to build it? 


Nicolas Bellaiche 







De: "Even Rouault" <[email protected]> 
À: "Nicolas Bellaiche" <[email protected]>, "proj" 
<[email protected]> 
Envoyé: Dimanche 18 Février 2024 15:16:44 
Objet: Re: [PROJ] Help needed for a cs2cs pipeline with shift grids 



Nicolas, 

I believe the Helmert transformation is used when using IGNF codes, because the 
IGNF database has only recorded the use of the ntf_r93 grid for NTF to RGF93, 
but not for NTF to ETRS89 (by the way, just reiterating that IGN is more than 
welcome to take over on maintenance & updates of the IGNF part of the PROJ 
database). And when transforming between 2 IGNF codes, PROJ by default will 
only consider transformations in the IGNF domain. But if you use EPSG codes, 
then ntf_r93 is available to transforme between NTF and ETRS89. 

To get a vertical transformation, you also need to use 3D CRS. 


For example 


projinfo -s "NTF geographiques Paris (gr) + NGF-IGN69 height" -t IGNF:ETRS89LCC 
--3d --spatial-test intersects 


reports the following pipeline: 


unknown id, axis order change (2D) + NTF (Paris) to NTF (1) + NTF to RGF93 v1 
(1) + Inverse of RGF93 v1 to NGF-IGN69 height (1) + RGF93 v1 to ETRS89 (1) + 
axis order change (geographic3D horizontal) + ETRS89 LAMBERT CONFORMAL CONIC, 
1.6 m, France - mainland onshore., at least one grid missing 

PROJ string: 
+proj=pipeline 
+step +proj=unitconvert +xy_in=grad +xy_out=rad 
+step +inv +proj=longlat +ellps=clrk80ign +pm=paris 
+step +proj=push +v_3 
+step +proj=cart +ellps=clrk80ign 
+step +proj=xyzgridshift +grids=fr_ign_gr3df97a.tif +grid_ref=output_crs 
+ellps=GRS80 
+step +inv +proj=cart +ellps=GRS80 
+step +proj=pop +v_3 
+step +proj=vgridshift +grids=fr_ign_RAF18.tif +multiplier=1 
+step +proj=lcc +lat_0=52 +lon_0=10 +lat_1=35 +lat_2=65 +x_0=4000000 
+y_0=2800000 +ellps=GRS80 





Here, as there's a mix of objects from different authorities (IGNF and EPSG), 
then EPSG transformations are considered, hence you get the gr3df97a grid. 


$ echo 0 56.000000 0 | PROJ_NETWORK=ON bin/cs2cs -d 3 "NTF geographiques Paris 
(gr) + NGF-IGN69 height" IGNF:ETRS89LCC --3d 
3474789.997 2655359.291 43.644 

which is the application of the above pipeline: 


$ echo 0 56.000000 0 | PROJ_NETWORK=ON bin/cct -d 3 +proj=pipeline +step 
+proj=unitconvert +xy_in=grad +xy_out=rad +step +inv +proj=longlat 
+ellps=clrk80ign +pm=paris +step +proj=push +v_3 +step +proj=cart 
+ellps=clrk80ign +step +proj=xyzgridshift +grids=fr_ign_gr3df97a.tif 
+grid_ref=output_crs +ellps=GRS80 +step +inv +proj=cart +ellps=GRS80 +step 
+proj=pop +v_3 +step +proj=vgridshift +grids=fr_ign_RAF18.tif +multiplier=1 
+step +proj=lcc +lat_0=52 +lon_0=10 +lat_1=35 +lat_2=65 +x_0=4000000 
+y_0=2800000 +ellps=GRS80 



If you want to get exactly the below pipeline, you'll have to tweak proj.db to 
create a compound CRS for "NTF geographiques Paris (gr) + NGF-IGN69 height", 
and then create a custom record in other_transformation for the transformation 
between this compound CRS and (a 3D projected CRS derived from) IGNF:ETRS89LCC. 
Cf data/sql/other_transformation_custom.sql for potential inspiration 

Even 



Le 15/02/2024 à 19:46, Nicolas Bellaiche via PROJ a écrit : 



Hi there, 

I try to make a conversion using shiftgrids from IGNF: NTFP to IGNF:ETRS89LCC. 
By default, it seems that it uses the helmert approximation between the 2 crs 
and i cannot figure out how to use the grid fr_ign_ntf_r93. 

So far i've found how to create a pipeline that works with cct, but i'd like to 
have a code that represents the crs and be able to go to different destination 
crs with the cs2cs application. Any idea? 

(helmert approx + no geoid with the standard codes) 


echo 0 56 0 | ./cs2cs + from IGNF:NTFP +to IGNF:ETRS89LCC 

result : 3474788.21 2655358.23 0.00 




(correct pipeline) 

echo 0 56.000000 0 | PROJ_DEBUG=3 ./cct +proj=pipeline +step +proj=unitconvert 
+xy_in=grad +xy_out=rad +step +inv +proj=longlat +ellps=clrk80ign +pm=paris 
+step +proj=hgridshift +grids=fr_ign_ntf_r93.tif +step +inv +proj=vgridshift 
+grids=RAF09.gtx +step +proj=lcc +lat_0=52 +lon_0=10 +lat_1=35 +lat_2=65 
+x_0=4000000 +y_0=2800000 +ellps=GRS80 




result : 3474789.9972 2655359.2908 43.6421 inf 




reference from THE official IGN/SGN dataset: 

3474789.997 2655359.291 43.642 







Thanks a lot for your help, 




Nicolas Bellaiche 


_______________________________________________
PROJ mailing list [ mailto:[email protected] | [email protected] ] [ 
https://lists.osgeo.org/mailman/listinfo/proj | 
https://lists.osgeo.org/mailman/listinfo/proj ] 



-- [ http://www.spatialys.com/ | http://www.spatialys.com ] My software is 
free, but my time generally not. 

_______________________________________________
PROJ mailing list
[email protected]
https://lists.osgeo.org/mailman/listinfo/proj

Reply via email to