/ FLTParseGMLEnvelope */ / Utility function to parse a gml:Enevelop (used for SOS and FE1.1)*/ /
| 3253 | /* Utility function to parse a gml:Enevelop (used for SOS and FE1.1)*/ |
| 3254 | /************************************************************************/ |
| 3255 | int FLTParseGMLEnvelope(CPLXMLNode *psRoot, rectObj *psBbox, char **ppszSRS) |
| 3256 | { |
| 3257 | CPLXMLNode *psChild=NULL; |
| 3258 | CPLXMLNode *psUpperCorner=NULL, *psLowerCorner=NULL; |
| 3259 | char *pszLowerCorner=NULL, *pszUpperCorner=NULL; |
| 3260 | int bValid = 0; |
| 3261 | char **tokens; |
| 3262 | int n; |
| 3263 | |
| 3264 | if (psRoot && psBbox && psRoot->eType == CXT_Element && |
| 3265 | EQUAL(psRoot->pszValue,"Envelope")) |
| 3266 | { |
| 3267 | /*Get the srs if available*/ |
| 3268 | if (ppszSRS) |
| 3269 | { |
| 3270 | psChild = psRoot->psChild; |
| 3271 | while (psChild != NULL) |
| 3272 | { |
| 3273 | if (psChild->eType == CXT_Attribute && psChild->pszValue && |
| 3274 | EQUAL(psChild->pszValue, "srsName") && psChild->psChild && |
| 3275 | psChild->psChild->pszValue) |
| 3276 | { |
| 3277 | *ppszSRS = msStrdup(psChild->psChild->pszValue); |
| 3278 | break; |
| 3279 | } |
| 3280 | psChild = psChild->psNext; |
| 3281 | } |
| 3282 | } |
| 3283 | psLowerCorner = CPLSearchXMLNode(psRoot, "lowerCorner"); |
| 3284 | psUpperCorner = CPLSearchXMLNode(psRoot, "upperCorner"); |
| 3285 | |
| 3286 | if (psLowerCorner && psUpperCorner && EQUAL(psLowerCorner->pszValue,"lowerCorner") && |
| 3287 | EQUAL(psUpperCorner->pszValue,"upperCorner")) |
| 3288 | { |
| 3289 | /*get the values*/ |
| 3290 | psChild = psLowerCorner->psChild; |
| 3291 | while (psChild != NULL) { |
| 3292 | if (psChild->eType != CXT_Text) |
| 3293 | psChild = psChild->psNext; |
| 3294 | else |
| 3295 | break; |
| 3296 | } |
| 3297 | if (psChild && psChild->eType == CXT_Text) |
| 3298 | pszLowerCorner = psChild->pszValue; |
| 3299 | |
| 3300 | psChild = psUpperCorner->psChild; |
| 3301 | while (psChild != NULL) { |
| 3302 | if (psChild->eType != CXT_Text) |
| 3303 | psChild = psChild->psNext; |
| 3304 | else |
| 3305 | break; |
| 3306 | } |
| 3307 | if (psChild && psChild->eType == CXT_Text) |
| 3308 | pszUpperCorner = psChild->pszValue; |
| 3309 | |
| 3310 | if (pszLowerCorner && pszUpperCorner) { |
| 3311 | tokens = msStringSplit(pszLowerCorner, ' ', &n); |
| 3312 | if (tokens && n >= 2) { |
no test coverage detected