| 1794 | } |
| 1795 | |
| 1796 | shapeObj *FLTGetShape(FilterEncodingNode *psFilterNode, double *pdfDistance, |
| 1797 | int *pnUnit) |
| 1798 | { |
| 1799 | char **tokens = NULL; |
| 1800 | int nTokens = 0; |
| 1801 | FilterEncodingNode *psNode = psFilterNode; |
| 1802 | char *szUnitStr = NULL; |
| 1803 | char *szUnit = NULL; |
| 1804 | |
| 1805 | if (psNode) |
| 1806 | { |
| 1807 | if (psNode->eType == FILTER_NODE_TYPE_SPATIAL && psNode->psRightNode) |
| 1808 | psNode = psNode->psRightNode; |
| 1809 | |
| 1810 | if (psNode->eType == FILTER_NODE_TYPE_GEOMETRY_POINT || |
| 1811 | psNode->eType == FILTER_NODE_TYPE_GEOMETRY_LINE || |
| 1812 | psNode->eType == FILTER_NODE_TYPE_GEOMETRY_POLYGON) |
| 1813 | { |
| 1814 | |
| 1815 | if (psNode->pszValue && pdfDistance) |
| 1816 | { |
| 1817 | /* |
| 1818 | sytnax expected is "distance;unit" or just "distance" |
| 1819 | if unit is there syntax is "URI#unit" (eg http://..../#m) |
| 1820 | or just "unit" |
| 1821 | */ |
| 1822 | tokens = msStringSplit(psNode->pszValue,';', &nTokens); |
| 1823 | if (tokens && nTokens >= 1) |
| 1824 | { |
| 1825 | *pdfDistance = atof(tokens[0]); |
| 1826 | |
| 1827 | if (nTokens == 2 && pnUnit) |
| 1828 | { |
| 1829 | szUnitStr = msStrdup(tokens[1]); |
| 1830 | msFreeCharArray(tokens, nTokens); |
| 1831 | nTokens = 0; |
| 1832 | tokens = msStringSplit(szUnitStr,'#', &nTokens); |
| 1833 | msFree(szUnitStr); |
| 1834 | if (tokens && nTokens >= 1) |
| 1835 | { |
| 1836 | if (nTokens ==1) |
| 1837 | szUnit = tokens[0]; |
| 1838 | else |
| 1839 | szUnit = tokens[1]; |
| 1840 | |
| 1841 | if (strcasecmp(szUnit,"m") == 0 || |
| 1842 | strcasecmp(szUnit,"meters") == 0 ) |
| 1843 | *pnUnit = MS_METERS; |
| 1844 | else if (strcasecmp(szUnit,"km") == 0 || |
| 1845 | strcasecmp(szUnit,"kilometers") == 0) |
| 1846 | *pnUnit = MS_KILOMETERS; |
| 1847 | else if (strcasecmp(szUnit,"NM") == 0 || |
| 1848 | strcasecmp(szUnit,"nauticalmiles") == 0) |
| 1849 | *pnUnit = MS_NAUTICALMILES; |
| 1850 | else if (strcasecmp(szUnit,"mi") == 0 || |
| 1851 | strcasecmp(szUnit,"miles") == 0) |
| 1852 | *pnUnit = MS_MILES; |
| 1853 | else if (strcasecmp(szUnit,"in") == 0 || |
no test coverage detected