PostGIS  3.1.6dev-r@@SVN_REVISION@@

◆ parse_gml()

static LWGEOM * parse_gml ( xmlNodePtr  xnode,
bool *  hasz,
int *  root_srid 
)
static

Parse GML.

Definition at line 2031 of file lwgeom_in_gml.c.

2032 {
2033  xmlNodePtr xa = xnode;
2034  gmlSrs srs;
2035 
2036  /* Scroll forward to the root node */
2037  while (xa != NULL &&
2038  (xa->type != XML_ELEMENT_NODE || !is_gml_namespace(xa, false)))
2039  {
2040  xa = xa->next;
2041  }
2042 
2043  if (xa == NULL) gml_lwpgerror("invalid GML representation", 55);
2044 
2045  parse_gml_srs(xa, &srs);
2046  if (*root_srid == SRID_UNKNOWN && srs.srid != SRID_UNKNOWN)
2047  {
2048  *root_srid = srs.srid;
2049  }
2050 
2051  if (is_gml_element(xa, "Point"))
2052  return parse_gml_point(xa, hasz, root_srid);
2053 
2054  if (is_gml_element(xa, "LineString"))
2055  return parse_gml_line(xa, hasz, root_srid);
2056 
2057  if (is_gml_element(xa, "Curve"))
2058  return parse_gml_curve(xa, hasz, root_srid);
2059 
2060  if (is_gml_element(xa, "LinearRing"))
2061  return parse_gml_linearring(xa, hasz, root_srid);
2062 
2063  if (is_gml_element(xa, "Polygon"))
2064  return parse_gml_polygon(xa, hasz, root_srid);
2065 
2066  if (is_gml_element(xa, "Triangle"))
2067  return parse_gml_triangle(xa, hasz, root_srid);
2068 
2069  if (is_gml_element(xa, "Surface"))
2070  return parse_gml_surface(xa, hasz, root_srid);
2071 
2072  if (is_gml_element(xa, "MultiPoint"))
2073  return parse_gml_mpoint(xa, hasz, root_srid);
2074 
2075  if (is_gml_element(xa, "MultiLineString"))
2076  return parse_gml_mline(xa, hasz, root_srid);
2077 
2078  if (is_gml_element(xa, "MultiCurve"))
2079  return parse_gml_mcurve(xa, hasz, root_srid);
2080 
2081  if (is_gml_element(xa, "MultiPolygon"))
2082  return parse_gml_mpoly(xa, hasz, root_srid);
2083 
2084  if (is_gml_element(xa, "MultiSurface"))
2085  return parse_gml_msurface(xa, hasz, root_srid);
2086 
2087  if (is_gml_element(xa, "PolyhedralSurface"))
2088  return parse_gml_psurface(xa, hasz, root_srid);
2089 
2090  if (is_gml_element(xa, "Tin") ||
2091  is_gml_element(xa, "TriangulatedSurface"))
2092  return parse_gml_tin(xa, hasz, root_srid);
2093 
2094  if (is_gml_element(xa, "MultiGeometry"))
2095  return parse_gml_coll(xa, hasz, root_srid);
2096 
2097  gml_lwpgerror("invalid GML representation", 56);
2098  return NULL; /* Never reach */
2099 }
#define SRID_UNKNOWN
Unknown SRID value.
Definition: liblwgeom.h:229
static LWGEOM * parse_gml_surface(xmlNodePtr xnode, bool *hasz, int *root_srid)
Parse GML Surface (3.1.1)
static LWGEOM * parse_gml_msurface(xmlNodePtr xnode, bool *hasz, int *root_srid)
Parse GML MultiSurface (3.1.1)
static LWGEOM * parse_gml_psurface(xmlNodePtr xnode, bool *hasz, int *root_srid)
Parse GML PolyhedralSurface (3.1.1) Nota: It's not part of SF-2.
static LWGEOM * parse_gml_coll(xmlNodePtr xnode, bool *hasz, int *root_srid)
Parse GML MultiGeometry (2.1.2, 3.1.1)
static LWGEOM * parse_gml_mcurve(xmlNodePtr xnode, bool *hasz, int *root_srid)
Parse GML MultiCurve (3.1.1)
static bool is_gml_namespace(xmlNodePtr xnode, bool is_strict)
Return false if current element namespace is not a GML one Return true otherwise.
static void parse_gml_srs(xmlNodePtr xnode, gmlSrs *srs)
Parse gml srsName attribute.
static LWGEOM * parse_gml_polygon(xmlNodePtr xnode, bool *hasz, int *root_srid)
Parse GML Polygon (2.1.2, 3.1.1)
static LWGEOM * parse_gml_line(xmlNodePtr xnode, bool *hasz, int *root_srid)
Parse GML lineString (2.1.2, 3.1.1)
static LWGEOM * parse_gml_mpoly(xmlNodePtr xnode, bool *hasz, int *root_srid)
Parse GML MultiPolygon (2.1.2, 3.1.1)
static LWGEOM * parse_gml_curve(xmlNodePtr xnode, bool *hasz, int *root_srid)
Parse GML Curve (3.1.1)
static void gml_lwpgerror(char *msg, __attribute__((__unused__)) int error_code)
Definition: lwgeom_in_gml.c:81
static LWGEOM * parse_gml_mpoint(xmlNodePtr xnode, bool *hasz, int *root_srid)
Parse gml:MultiPoint (2.1.2, 3.1.1)
static LWGEOM * parse_gml_point(xmlNodePtr xnode, bool *hasz, int *root_srid)
Parse GML point (2.1.2, 3.1.1)
static LWGEOM * parse_gml_tin(xmlNodePtr xnode, bool *hasz, int *root_srid)
Parse GML Tin (and TriangulatedSurface) (3.1.1)
static LWGEOM * parse_gml_triangle(xmlNodePtr xnode, bool *hasz, int *root_srid)
Parse GML Triangle (3.1.1)
static LWGEOM * parse_gml_mline(xmlNodePtr xnode, bool *hasz, int *root_srid)
Parse gml:MultiLineString (2.1.2, 3.1.1)
static bool is_gml_element(xmlNodePtr xn, const char *gml_name)
static LWGEOM * parse_gml_linearring(xmlNodePtr xnode, bool *hasz, int *root_srid)
Parse GML LinearRing (3.1.1)

References gml_lwpgerror(), is_gml_element(), is_gml_namespace(), parse_gml_coll(), parse_gml_curve(), parse_gml_line(), parse_gml_linearring(), parse_gml_mcurve(), parse_gml_mline(), parse_gml_mpoint(), parse_gml_mpoly(), parse_gml_msurface(), parse_gml_point(), parse_gml_polygon(), parse_gml_psurface(), parse_gml_srs(), parse_gml_surface(), parse_gml_tin(), parse_gml_triangle(), struct_gmlSrs::srid, and SRID_UNKNOWN.

Referenced by lwgeom_from_gml(), parse_gml_coll(), parse_gml_mcurve(), parse_gml_mline(), parse_gml_mpoint(), parse_gml_mpoly(), and parse_gml_msurface().

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