459 const int32_t srid_to = 4326;
461 PJ_TYPE types[1] = {PJ_TYPE_PROJECTED_CRS};
462 PROJ_CRS_INFO **crs_list_ptr, **crs_list;
464 PJ_CONTEXT *ctx = NULL;
466 PROJ_CRS_LIST_PARAMETERS *params = proj_get_crs_list_parameters_create();
467 params->types = types;
468 params->typesCount = 1;
469 params->crs_area_of_use_contains_bbox =
true;
470 params->bbox_valid =
true;
471 params->allow_deprecated =
false;
473 #if POSTGIS_PROJ_VERSION >= 81
474 params->celestial_body_name =
"Earth";
477 if (srid_from != srid_to)
480 if (lwproj_lookup(srid_from, srid_to, &pj) ==
LW_FAILURE)
481 elog(ERROR,
"%s: Lookup of SRID %u => %u transform failed",
482 __func__, srid_from, srid_to);
487 params->west_lon_degree = gbox.
xmin;
488 params->south_lat_degree = gbox.
ymin;
489 params->east_lon_degree = gbox.
xmax;
490 params->north_lat_degree = gbox.
ymax;
492 crs_list = crs_list_ptr = proj_get_crs_info_list_from_database(
493 ctx, auth_name, params, &crs_count);
497 while (crs_list && *crs_list)
500 PROJ_CRS_INFO *crs = *crs_list++;
504 double height = crs->north_lat_degree - crs->south_lat_degree;
505 double width = crs->east_lon_degree - crs->west_lon_degree;
507 width = 360 - (crs->west_lon_degree - crs->east_lon_degree);
508 area = width * height;
523 proj_crs_info_list_destroy(crs_list_ptr);
524 proj_get_crs_list_parameters_destroy(params);
int32_t lwgeom_get_srid(const LWGEOM *geom)
Return SRID number.
int box3d_transform(GBOX *box, LWPROJ *pj)
const GBOX * lwgeom_get_bbox(const LWGEOM *lwgeom)
Get a non-empty geometry bounding box, computing and caching it if not already there.
static void srs_state_memcheck(struct srs_data *state)
static int srs_entry_cmp(const void *a, const void *b)
struct srs_entry * entries