PostGIS  3.0.6dev-r@@SVN_REVISION@@

◆ geography_in()

Datum geography_in ( PG_FUNCTION_ARGS  )

Definition at line 136 of file geography_inout.c.

137 {
138  char *str = PG_GETARG_CSTRING(0);
139  /* Datum geog_oid = PG_GETARG_OID(1); Not needed. */
140  int32 geog_typmod = -1;
141  LWGEOM_PARSER_RESULT lwg_parser_result;
142  LWGEOM *lwgeom = NULL;
143  GSERIALIZED *g_ser = NULL;
144 
145  if ( (PG_NARGS()>2) && (!PG_ARGISNULL(2)) ) {
146  geog_typmod = PG_GETARG_INT32(2);
147  }
148 
149  lwgeom_parser_result_init(&lwg_parser_result);
150 
151  /* Empty string. */
152  if ( str[0] == '\0' )
153  ereport(ERROR,(errmsg("parse error - invalid geometry")));
154 
155  /* WKB? Let's find out. */
156  if ( str[0] == '0' )
157  {
158  /* TODO: 20101206: No parser checks! This is inline with current 1.5 behavior, but needs discussion */
160  /* Error out if something went sideways */
161  if ( ! lwgeom )
162  ereport(ERROR,(errmsg("parse error - invalid geometry")));
163  }
164  /* WKT then. */
165  else
166  {
167  if ( lwgeom_parse_wkt(&lwg_parser_result, str, LW_PARSER_CHECK_ALL) == LW_FAILURE )
168  PG_PARSER_ERROR(lwg_parser_result);
169 
170  lwgeom = lwg_parser_result.geom;
171  }
172 
173  /* Error on any SRID != default */
174  srid_check_latlong(fcinfo, lwgeom->srid);
175 
176  /* Convert to gserialized */
177  g_ser = gserialized_geography_from_lwgeom(lwgeom, geog_typmod);
178 
179  /* Clean up temporary object */
180  lwgeom_free(lwgeom);
181 
182 
183  PG_RETURN_POINTER(g_ser);
184 }
GSERIALIZED * gserialized_geography_from_lwgeom(LWGEOM *lwgeom, int32 geog_typmod)
#define LW_PARSER_CHECK_ALL
Definition: liblwgeom.h:2061
LWGEOM * lwgeom_from_hexwkb(const char *hexwkb, const char check)
Definition: lwin_wkb.c:849
#define LW_FAILURE
Definition: liblwgeom.h:110
void lwgeom_free(LWGEOM *geom)
Definition: lwgeom.c:1138
#define LW_PARSER_CHECK_NONE
Definition: liblwgeom.h:2060
void lwgeom_parser_result_init(LWGEOM_PARSER_RESULT *parser_result)
Definition: lwin_wkt.c:880
int lwgeom_parse_wkt(LWGEOM_PARSER_RESULT *parser_result, char *wktstr, int parse_flags)
Parse a WKT geometry string into an LWGEOM structure.
#define str(s)
unsigned int int32
Definition: shpopen.c:273
int32_t srid
Definition: liblwgeom.h:446
Parser result structure: returns the result of attempting to convert (E)WKT/(E)WKB to LWGEOM.
Definition: liblwgeom.h:2068

References struct_lwgeom_parser_result::geom, gserialized_geography_from_lwgeom(), LW_FAILURE, LW_PARSER_CHECK_ALL, LW_PARSER_CHECK_NONE, lwgeom_free(), lwgeom_from_hexwkb(), lwgeom_parse_wkt(), lwgeom_parser_result_init(), LWGEOM::srid, and str.

Here is the call graph for this function: