Parse gml:posList.
849{
850 xmlChar *dimension, *gmlposlist;
851 char *poslist, *p;
852 int dim, gml_dim;
855 bool digit;
856
857
858 dimension =
gmlGetProp(xnode,
"srsDimension");
859 if (dimension == NULL)
861 if (dimension == NULL) dim = 2;
862 else
863 {
864 dim = atoi((char *) dimension);
865 xmlFree(dimension);
866 if (dim < 2 || dim > 3)
gml_lwpgerror(
"invalid GML representation", 27);
867 }
868 if (dim == 2) *hasz = false;
869
870
871 gmlposlist = xmlNodeGetContent(xnode);
872 poslist = (char *) gmlposlist;
873
874
876
877
878
879
880 while (isspace(*poslist)) poslist++;
881 for (p=poslist, gml_dim=0, digit=false ; *poslist ; poslist++)
882 {
883 if (isdigit(*poslist)) digit = true;
884 if (digit && (*poslist == ' ' || *(poslist+1) == '\0'))
885 {
886 if (*poslist == ' ') *poslist = '\0';
887
888 gml_dim++;
892
893 if (gml_dim == dim)
894 {
895
897 pt.
x = pt.
y = pt.
z = pt.
m = 0.0;
898 gml_dim = 0;
899 }
900 else if (*(poslist+1) == '\0')
902
903 p = poslist+1;
904 digit = false;
905 }
906 }
907
908 xmlFree(gmlposlist);
909
910 return dpa;
911}
POINTARRAY * ptarray_construct_empty(char hasz, char hasm, uint32_t maxpoints)
Create a new POINTARRAY with no points.
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,...
#define LW_TRUE
Return types for functions with status returns.
static xmlChar * gmlGetProp(xmlNodePtr xnode, const char *charProp)
Retrieve a GML property from a node or NULL otherwise Respect namespaces if presents in the node elem...
static double parse_gml_double(char *d, bool space_before, bool space_after)
Parse a string supposed to be a double.
static void gml_lwpgerror(char *msg, __attribute__((__unused__)) int error_code)