PostGIS  3.3.9dev-r@@SVN_REVISION@@

◆ is_literal_valid()

static int is_literal_valid ( const char *  literal)
static

Shortest allowed literal: containing cardinal direction > cardinal direction + degree with 3 digits no cardinal direction > degree with 3 digits

The variable "coord_start" stores the position where the coordinates start (0 or 1), so that the script can identify where each literal element begins to validate its content.

The first three characters represent the degrees and they must be numeric.

Decimal degrees are encoded with after the 3rd character with either a dot or a comma. Only one decimal separator is allowed.

Definition at line 114 of file lwgeom_in_marc21.c.

114  {
115 
116  int num_dec_sep;
117  int coord_start;
118  int literal_length;
119 
120  if(literal == NULL) return LW_FALSE;
121 
122  literal_length = strlen(literal);
123 
124  POSTGIS_DEBUGF(2, "is_literal_valid called (%s)", literal);
125 
126  if (literal_length < 3) return LW_FALSE;
127 
128  coord_start = 0;
129  num_dec_sep = 0;
130 
140  if (literal[0] == 'N' || literal[0] == 'E' || literal[0] == 'S' || literal[0] == 'W' || literal[0] == '+' || literal[0] == '-') {
141 
142  if (literal_length < 4) {
143  POSTGIS_DEBUGF(3, " invalid literal length (%d): \"%s\"", literal_length, literal);
144  return LW_FALSE;
145  }
146 
147  coord_start = 1;
148  }
149 
150  for (int j = coord_start; j < literal_length; j++) {
151 
152  if (!isdigit(literal[j])) {
153 
154 
155  if (j < 3) {
156 
161  POSTGIS_DEBUGF(3," invalid character '%c' at the degrees section: \"%s\"", literal[j], literal);
162  return LW_FALSE;
163 
164  }
165 
170  if (literal[j] == '.' || literal[j] == ',') {
171 
172  num_dec_sep++;
173 
174  if (num_dec_sep > 1) return LW_FALSE;
175 
176  } else {
177  POSTGIS_DEBUGF(3, " invalid character '%c' in %d: \"%s\"", literal[j], j, literal);
178  return LW_FALSE;
179 
180  }
181 
182  }
183 
184  }
185 
186  POSTGIS_DEBUGF(2, "=> is_literal_valid returns LW_TRUE for \"%s\"", literal);
187  return LW_TRUE;
188 
189 }
#define LW_FALSE
Definition: liblwgeom.h:109
#define LW_TRUE
Return types for functions with status returns.
Definition: liblwgeom.h:108

References LW_FALSE, and LW_TRUE.

Referenced by parse_marc21().

Here is the caller graph for this function: