PostGIS  3.4.0dev-r@@SVN_REVISION@@

◆ parse_gml_coord()

static POINTARRAY* parse_gml_coord ( xmlNodePtr  xnode,
bool *  hasz 
)
static

Parse gml:coord.

Definition at line 690 of file lwgeom_in_gml.c.

691 {
692  xmlNodePtr xyz;
693  POINTARRAY *dpa;
694  bool x,y,z;
695  xmlChar *c;
696  POINT4D p = {0};
697 
698  /* HasZ?, !HasM, 1 Point */
699  dpa = ptarray_construct_empty(1, 0, 1);
700 
701  x = y = z = false;
702  for (xyz = xnode->children ; xyz != NULL ; xyz = xyz->next)
703  {
704  if (xyz->type != XML_ELEMENT_NODE) continue;
705  if (!is_gml_namespace(xyz, false)) continue;
706 
707  if (!strcmp((char *) xyz->name, "X"))
708  {
709  if (x) gml_lwpgerror("invalid GML representation", 21);
710  c = xmlNodeGetContent(xyz);
711  p.x = parse_gml_double((char *) c, true, true);
712  x = true;
713  xmlFree(c);
714  }
715  else if (!strcmp((char *) xyz->name, "Y"))
716  {
717  if (y) gml_lwpgerror("invalid GML representation", 22);
718  c = xmlNodeGetContent(xyz);
719  p.y = parse_gml_double((char *) c, true, true);
720  y = true;
721  xmlFree(c);
722  }
723  else if (!strcmp((char *) xyz->name, "Z"))
724  {
725  if (z) gml_lwpgerror("invalid GML representation", 23);
726  c = xmlNodeGetContent(xyz);
727  p.z = parse_gml_double((char *) c, true, true);
728  z = true;
729  xmlFree(c);
730  }
731  }
732  /* Check dimension consistancy */
733  if (!x || !y) gml_lwpgerror("invalid GML representation", 24);
734  if (!z) *hasz = false;
735 
736  ptarray_append_point(dpa, &p, LW_FALSE);
737 
738  return dpa; /* ptarray_clone_deep(dpa); */
739 }
#define LW_FALSE
Definition: liblwgeom.h:94
POINTARRAY * ptarray_construct_empty(char hasz, char hasm, uint32_t maxpoints)
Create a new POINTARRAY with no points.
Definition: ptarray.c:59
int ptarray_append_point(POINTARRAY *pa, const POINT4D *pt, int allow_duplicates)
Append a point to the end of an existing POINTARRAY If allow_duplicate is LW_FALSE,...
Definition: ptarray.c:147
static double parse_gml_double(char *d, bool space_before, bool space_after)
Parse a string supposed to be a double.
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 gml_lwpgerror(char *msg, __attribute__((__unused__)) int error_code)
Definition: lwgeom_in_gml.c:81
double x
Definition: liblwgeom.h:414
double z
Definition: liblwgeom.h:414
double y
Definition: liblwgeom.h:414

References gml_lwpgerror(), is_gml_namespace(), LW_FALSE, parse_gml_double(), ptarray_append_point(), ptarray_construct_empty(), POINT4D::x, pixval::x, POINT4D::y, pixval::y, and POINT4D::z.

Referenced by parse_gml_data().

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