[PROJ] Use of EPSG codes in proj_create()

Oliver Eichler oliver.eichler at dspsolutions.de
Tue Apr 2 11:08:46 PDT 2019


Thanks for the answer! :D

But I still wonder what is the best way to get the same functionality as 
with pj_transform(). It might not have been the most standard conform 
thing but it did the job quite good and consistent. Now it seems to be 
that everyone needs to write a beast that analyzes the axis ordering, 
analyzes the coordinate format, fix all input to match requirements, do 
the conversion and normalize all output.

It's a good thing for sure to have all these functions separately to use 
them in an optimized way if possible. But on the other hand side a high 
level function like pj_transform() that simply hides all the details 
behind a very simple and generic interface would be nice to have, too.

Or do I miss the obvious?

Oliver


Am 2019-04-02 12:44, schrieb Even Rouault:
> On mardi 2 avril 2019 10:38:45 CEST Oliver Eichler wrote:
>> Hi,
>> 
>> I am working on the transition of QMapShack from version 4 to version 
>> 5
>> API. So far so good. There is only on thing that breaks. The use of 
>> EPSG
>> codes for projection strings.
>> 
>> That's what I try to do:
>> 
>>      // used PROJ version: 6.0.0
>>      // PJ * pj = proj_create(PJ_DEFAULT_CTX, "EPSG:3395");      // 
>> [1]
>> result for x and y is inf
>>      PJ * pj = proj_create(PJ_DEFAULT_CTX, "+proj=merc");        // 
>> [2]
>> result is expected one
>>      // PJ * pj = proj_create(PJ_DEFAULT_CTX, "+init=EPSG:3395") // 
>> [3]
>> pj is nullptr
>>      PJ_COORD pt = {11 * DEG_TO_RAD, 48 * DEG_TO_RAD};
>>      size_t s = proj_trans_generic(pj, PJ_FWD,
>>                                  &pt.xy.x, 0, 1,
>>                                  &pt.xy.y, 0, 1,
>>                                  0,0,0,
>>                                  0,0,0);
>> 
> 
> With PROJ 6, [1] instanciates a CRS object, not a coordinate 
> transformation.
> So proj_trans_generic() will return an error on it. You'd rather want 
> to use
> proj_create_crs_to_crs() with in the source CRS a geographic CRS and as 
> target
> CRS, "EPSG:3395". The coordinates passed and returned to/from
> proj_trans_generic will have to follow the axis order and units of the 
> source
> and target CRS
> See 
> https://proj4.org/faq.html#why-is-the-axis-ordering-in-proj-not-consistent
> 
> [2] matches the PROJ 5 behaviour, and creates a coordinate operation 
> using the
> merc method. Input units and axis order is longitude, latitude in 
> radians.
> 
> [3] is a deprecated syntax in PROJ 6. The reason is that older versions 
> of
> PROJ didn't respect the EPSG axis order in a lot of situations, and we 
> didn't
> want that to go on when using the new API.
> 
> Even


More information about the PROJ mailing list