216{
217 PJ *pj_sub = NULL;
218 if (proj_get_type(pj_crs) == PJ_TYPE_COMPOUND_CRS)
219 {
220
221 pj_sub = proj_crs_get_sub_crs(NULL, pj_crs, 0);
222 if (!pj_sub)
223 lwerror(
"%s: proj_crs_get_sub_crs(0) returned NULL", __func__);
224 }
225 else if (proj_get_type(pj_crs) == PJ_TYPE_BOUND_CRS)
226 {
227 pj_sub = proj_get_source_crs(NULL, pj_crs);
228 if (!pj_sub)
229 lwerror(
"%s: proj_get_source_crs returned NULL", __func__);
230 }
231 else
232 {
233
234 pj_sub = proj_crs_get_coordinate_system(NULL, pj_crs);
235 if (pj_sub)
236 return pj_sub;
237 }
238
239
240
241
242
243 if (!pj_sub)
244 lwerror(
"%s: %s", __func__, proj_errno_string(proj_context_errno(NULL)));
245
246
247 int pj_type = proj_get_type(pj_sub);
248 if (pj_type == PJ_TYPE_GEOGRAPHIC_2D_CRS || pj_type == PJ_TYPE_PROJECTED_CRS)
249 {
250 PJ *pj_2d = proj_crs_get_coordinate_system(NULL, pj_sub);
251 proj_destroy(pj_sub);
252 return pj_2d;
253 }
254
255
256 if (pj_type == PJ_TYPE_COMPOUND_CRS || pj_type == PJ_TYPE_BOUND_CRS)
258
259
260 lwerror(
"%s: un-handled CRS sub-type: %s", __func__, pj_type);
261 return NULL;
262}
void lwerror(const char *fmt,...)
Write a notice out to the error handler.