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

◆ parse_gml_coord()

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

Parse gml:coord.

Definition at line 722 of file lwgeom_in_gml.c.

723{
724 xmlNodePtr xyz;
725 POINTARRAY *dpa;
726 bool x,y,z;
727 xmlChar *c;
728 POINT4D p;
729
730 /* HasZ?, !HasM, 1 Point */
731 dpa = ptarray_construct_empty(1, 0, 1);
732
733 x = y = z = false;
734 for (xyz = xnode->children ; xyz != NULL ; xyz = xyz->next)
735 {
736 if (xyz->type != XML_ELEMENT_NODE) continue;
737 if (!is_gml_namespace(xyz, false)) continue;
738
739 if (is_gml_element(xyz, "X"))
740 {
741 if (x) gml_lwpgerror("invalid GML representation", 21);
742 c = xmlNodeGetContent(xyz);
743 p.x = parse_gml_double((char *) c, true, true);
744 x = true;
745 xmlFree(c);
746 }
747 else if (is_gml_element(xyz, "Y"))
748 {
749 if (y) gml_lwpgerror("invalid GML representation", 22);
750 c = xmlNodeGetContent(xyz);
751 p.y = parse_gml_double((char *) c, true, true);
752 y = true;
753 xmlFree(c);
754 }
755 else if (is_gml_element(xyz, "Z"))
756 {
757 if (z) gml_lwpgerror("invalid GML representation", 23);
758 c = xmlNodeGetContent(xyz);
759 p.z = parse_gml_double((char *) c, true, true);
760 z = true;
761 xmlFree(c);
762 }
763 }
764 /* Check dimension consistancy */
765 if (!x || !y) gml_lwpgerror("invalid GML representation", 24);
766 if (!z) *hasz = false;
767
769
770 return dpa; /* ptarray_clone_deep(dpa); */
771}
#define LW_FALSE
Definition liblwgeom.h:108
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)
static bool is_gml_element(xmlNodePtr xn, const char *gml_name)
double x
Definition liblwgeom.h:400
double z
Definition liblwgeom.h:400
double y
Definition liblwgeom.h:400

References gml_lwpgerror(), is_gml_element(), is_gml_namespace(), LW_FALSE, parse_gml_double(), ptarray_append_point(), ptarray_construct_empty(), POINT4D::x, POINT4D::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: