PostGIS 3.0.6dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ 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
#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.
LWGEOM * lwgeom_from_hexwkb(const char *hexwkb, const char check)
Definition lwin_wkb.c:857
#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: