| 1581 | */ |
| 1582 | |
| 1583 | xmlNodePtr msGML3BoundedBy(xmlNsPtr psNs, double minx, double miny, double maxx, double maxy, const char *psEpsg) { |
| 1584 | xmlNodePtr psNode = NULL, psSubNode = NULL, psSubSubNode = NULL; |
| 1585 | char *pszTmp = NULL; |
| 1586 | char *pszTmp2 = NULL; |
| 1587 | char *pszEpsg = NULL; |
| 1588 | size_t bufferSize = 0; |
| 1589 | |
| 1590 | psNode = xmlNewNode(psNs, BAD_CAST "boundedBy"); |
| 1591 | psSubNode = xmlNewChild(psNode, NULL, BAD_CAST "Envelope", NULL); |
| 1592 | |
| 1593 | if (psEpsg) { |
| 1594 | bufferSize = strlen(psEpsg)+1; |
| 1595 | pszEpsg = (char*) msSmallMalloc(bufferSize); |
| 1596 | snprintf(pszEpsg, bufferSize, "%s", psEpsg); |
| 1597 | msStringToLower(pszEpsg); |
| 1598 | pszTmp = msStringConcatenate(pszTmp, "urn:ogc:crs:"); |
| 1599 | pszTmp = msStringConcatenate(pszTmp, pszEpsg); |
| 1600 | xmlNewProp(psSubNode, BAD_CAST "srsName", BAD_CAST pszTmp); |
| 1601 | free(pszEpsg); |
| 1602 | free(pszTmp); |
| 1603 | pszTmp = msIntToString(2); |
| 1604 | xmlNewProp(psSubNode, BAD_CAST "srsDimension", BAD_CAST pszTmp); |
| 1605 | free(pszTmp); |
| 1606 | } |
| 1607 | |
| 1608 | pszTmp = msDoubleToString(minx, MS_TRUE); |
| 1609 | pszTmp = msStringConcatenate(pszTmp, " "); |
| 1610 | pszTmp2 = msDoubleToString(miny, MS_TRUE); |
| 1611 | pszTmp = msStringConcatenate(pszTmp, pszTmp2); |
| 1612 | psSubSubNode = xmlNewChild(psSubNode, NULL, BAD_CAST "lowerCorner", BAD_CAST pszTmp); |
| 1613 | free(pszTmp); |
| 1614 | free(pszTmp2); |
| 1615 | |
| 1616 | pszTmp = msDoubleToString(maxx, MS_TRUE); |
| 1617 | pszTmp = msStringConcatenate(pszTmp, " "); |
| 1618 | pszTmp2 = msDoubleToString(maxy,MS_TRUE); |
| 1619 | pszTmp = msStringConcatenate(pszTmp, pszTmp2); |
| 1620 | psSubSubNode = xmlNewChild(psSubNode, NULL, BAD_CAST "upperCorner", BAD_CAST pszTmp); |
| 1621 | free(pszTmp); |
| 1622 | free(pszTmp2); |
| 1623 | return psNode; |
| 1624 | } |
| 1625 | |
| 1626 | /** |
| 1627 | *msGML3Point() |
no test coverage detected