PostGIS  3.3.9dev-r@@SVN_REVISION@@

◆ gml_is_srs_axis_order_gis_friendly()

static int gml_is_srs_axis_order_gis_friendly ( int32_t  srid)
static

Return 1 if the SRS definition from the authority has a GIS friendly order, that is easting,northing.

This is typically true for most projected CRS (but not all!), and this is false for EPSG geographic CRS.

Definition at line 422 of file lwgeom_in_gml.c.

423 {
424  char *srtext;
425  char query[256];
426  int is_axis_order_gis_friendly, err;
427 
428  if (SPI_OK_CONNECT != SPI_connect ())
429  lwpgerror("gml_is_srs_axis_order_gis_friendly: could not connect to SPI manager");
430 
431  sprintf(query, "SELECT srtext \
432  FROM spatial_ref_sys WHERE srid='%d'", srid);
433 
434  err = SPI_exec(query, 1);
435  if (err < 0) lwpgerror("gml_is_srs_axis_order_gis_friendly: error executing query %d", err);
436 
437  /* No entry in spatial_ref_sys */
438  if (SPI_processed <= 0)
439  {
440  SPI_finish();
441  return -1;
442  }
443 
444  srtext = SPI_getvalue(SPI_tuptable->vals[0], SPI_tuptable->tupdesc, 1);
445 
446  is_axis_order_gis_friendly = 1;
447  if (srtext && srtext[0] != '\0')
448  {
449  char* ptr;
450  char* srtext_horizontal = (char*) malloc(strlen(srtext) + 1);
451  strcpy(srtext_horizontal, srtext);
452 
453  /* Remove the VERT_CS part if we are in a COMPD_CS */
454  ptr = strstr(srtext_horizontal, ",VERT_CS[");
455  if (ptr)
456  *ptr = '\0';
457 
458  if( strstr(srtext_horizontal, "AXIS[") == NULL &&
459  strstr(srtext_horizontal, "GEOCCS[") == NULL )
460  {
461  /* If there is no axis definition, then due to how GDAL < 3
462  * generated the WKT, this means that the axis order is not
463  * GIS friendly */
464  is_axis_order_gis_friendly = 0;
465  }
466  else if( strstr(srtext_horizontal,
467  "AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST]") != NULL )
468  {
469  is_axis_order_gis_friendly = 0;
470  }
471  else if( strstr(srtext_horizontal,
472  "AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST]") != NULL )
473  {
474  is_axis_order_gis_friendly = 0;
475  }
476  else if( strstr(srtext_horizontal,
477  "AXIS[\"geodetic latitude (Lat)\",north,ORDER[1]") != NULL )
478  {
479  is_axis_order_gis_friendly = 0;
480  }
481 
482  free(srtext_horizontal);
483  }
484  SPI_finish();
485 
486  return is_axis_order_gis_friendly;
487 }
void * malloc(YYSIZE_T)
void free(void *)

References free(), and malloc().

Referenced by parse_gml_srs().

Here is the call graph for this function:
Here is the caller graph for this function: