GetCapabilities.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  1. <?php
  2. Lib::loadClass('Api_WfsException');
  3. Lib::loadClass('Api_WfsGeomTypeConverter');
  4. Lib::loadClass('Api_WfsNs');
  5. Lib::loadClass('Request');
  6. Lib::loadClass('Core_AclHelper');
  7. Lib::loadClass('Core_XmlWriter');
  8. class Api_Wfs_GetCapabilities {
  9. public function getCapabilitiesXml($wfsServerUrl, $serviceTitle, $serviceDescription, $aclList) {
  10. // if (V::get('DBG_ACL', '', $_GET)) {
  11. // {
  12. // echo "Core_AclHelper::getCustomAclList = [" . "\n";
  13. // foreach (Core_AclHelper::getCustomAclList() as $typeName) {
  14. // echo "|\t{$typeName}" . "\n";
  15. // }
  16. // echo "]// .EOF Core_AclHelper::getCustomAclList" . "\n";
  17. // }
  18. //
  19. // $fullTblAclList = $this->_usrAcl->getTablesAcl();
  20. // print_r($fullTblAclList);
  21. // die("\n" . '.EOF - DBG_ACL');
  22. // }
  23. header('Content-type: application/xml; charset=utf-8');
  24. $xmlWriter = new Core_XmlWriter();
  25. if (!$xmlWriter) throw new HttpException("Error no XMLWriter", 404);
  26. $xmlWriter->openUri('php://output');
  27. $xmlWriter->setIndent(true);
  28. $xmlWriter->startDocument('1.0','UTF-8');
  29. $xmlWriter->startElement('WFS_Capabilities');
  30. $xmlWriter->writeAttribute('xmlns', 'http://www.opengis.net/wfs');
  31. $xmlWriter->writeAttribute('xmlns:ogc', 'http://www.opengis.net/ogc');
  32. $xmlWriter->writeAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
  33. foreach (Api_WfsNs::getNsList() as $uri => $prefix) {
  34. $xmlWriter->writeAttribute("xmlns:{$prefix}", $uri);
  35. }
  36. $schemaLocations = [];
  37. //$schemaLocations[] = 'http://www.opengis.net/wfs http://webgis.regione.sardegna.it:80/geoserver/schemas/wfs/1.0.0/WFS-capabilities.xsd';// @from http://webgis.regione.sardegna.it/geoserver/ows?service=WFS&request=GetCapabilities
  38. if (!empty($schemaLocations)) $xmlWriter->writeAttribute('xsi:schemaLocation', implode(' ', $schemaLocations));
  39. $xmlWriter->writeAttribute('version', "1.0.0");
  40. $xmlWriter->h('Service', [
  41. ['Name', "WFS"],
  42. ['Title', $serviceTitle],
  43. ['Abstract', $serviceDescription],
  44. ['Keywords', "WFS, WMS"],
  45. ['OnlineResource', $wfsServerUrl],
  46. ['Fees', "NONE"],
  47. ['AccessConstraints', "NONE"],
  48. ]);
  49. $xmlWriter->h('Capability', [
  50. [ 'Request', [
  51. [ 'GetCapabilities', [
  52. [ 'DCPType', [
  53. [ 'HTTP', [
  54. [ 'Get', [ 'onlineResource' => "{$wfsServerUrl}?REQUEST=GetCapabilities" ], null ]
  55. ] ]
  56. ] ],
  57. [ 'DCPType', [
  58. [ 'HTTP', [
  59. [ 'Post', [ 'onlineResource' => "{$wfsServerUrl}" ], null ]
  60. ] ]
  61. ] ],
  62. ] ]
  63. ] ]
  64. ]);
  65. $xmlWriter->h('DescribeFeatureType', [
  66. [ 'SchemaDescriptionLanguage', [
  67. [ 'XMLSCHEMA', null ]
  68. ] ],
  69. [ 'DCPType', [
  70. [ 'HTTP', [
  71. [ 'Get', ['onlineResource' => "{$wfsServerUrl}?REQUEST=DescribeFeatureType"], null ]
  72. ] ]
  73. ] ],
  74. [ 'DCPType', [
  75. [ 'HTTP', [
  76. [ 'Post', ['onlineResource' => "{$wfsServerUrl}"], null ]
  77. ] ]
  78. ] ],
  79. ]);
  80. $xmlWriter->h('GetFeature', [
  81. [ 'ResultFormat', [
  82. 'WFSKMLOutputFormat',
  83. 'GML2',
  84. 'GML3',
  85. 'SHAPE-ZIP',
  86. 'CSV',
  87. 'JSON',
  88. ] ],
  89. [ 'DCPType', [
  90. [ 'HTTP', [
  91. [ 'Get', ['onlineResource' => "{$wfsServerUrl}?REQUEST=GetFeature"], null ]
  92. ] ]
  93. ] ],
  94. [ 'DCPType', [
  95. [ 'HTTP', [
  96. [ 'Post', ['onlineResource' => "{$wfsServerUrl}"], null ]
  97. ] ]
  98. ] ],
  99. ]);
  100. $xmlWriter->h('Transaction', [
  101. [ 'DCPType', [
  102. [ 'HTTP', [
  103. [ 'Get', ['onlineResource' => "{$wfsServerUrl}?REQUEST=Transaction"], null ]
  104. ] ]
  105. ] ],
  106. [ 'DCPType', [
  107. [ 'HTTP', [
  108. [ 'Post', ['onlineResource' => "{$wfsServerUrl}"], null ]
  109. ] ]
  110. ] ],
  111. ]);
  112. $xmlWriter->h('LockFeature', [
  113. [ 'DCPType', [
  114. [ 'HTTP', [
  115. [ 'Get', ['onlineResource' => "{$wfsServerUrl}?REQUEST=LockFeature"], null ]
  116. ] ]
  117. ] ],
  118. [ 'DCPType', [
  119. [ 'HTTP', [
  120. [ 'Post', ['onlineResource' => "{$wfsServerUrl}"], null ]
  121. ] ]
  122. ] ],
  123. ]);
  124. $xmlWriter->h('GetFeatureWithLock', [
  125. [ 'ResultFormat', [
  126. 'GML2'
  127. ] ],
  128. [ 'DCPType', [
  129. [ 'HTTP', [
  130. [ 'Get', ['onlineResource' => "{$wfsServerUrl}?REQUEST=GetFeatureWithLock"], null ]
  131. ] ]
  132. ] ],
  133. [ 'DCPType', [
  134. [ 'HTTP', [
  135. [ 'Post', ['onlineResource' => "{$wfsServerUrl}"], null ]
  136. ] ]
  137. ] ],
  138. ]);
  139. $featureTypeNodes = [];
  140. foreach ($aclList as $tblAcl) {
  141. $ns = Core_AclHelper::parseNamespaceUrl($tblAcl->getNamespace());
  142. DBG::log(['ns'=>$ns, 'acl_ns'=>$tblAcl->getNamespace(), 'cls'=>get_class($tblAcl)], 'array', "tblAcl [".$tblAcl->getID()."]");
  143. $dataSourceName = 'default_db';// TODO: $tblAcl->getSourceName()
  144. $prefix = "p5_{$dataSourceName}";
  145. $featureTypeNodes[] = [ 'FeatureType', [ "xmlns:{$prefix}" => Api_WfsNs::getNsUri($prefix) ], [
  146. [ 'Name', "p5_" . "{$ns['prefix']}:{$ns['name']}" ], // TODO: remove 'p5_' prefix
  147. [ 'Title', $tblAcl->getRawLabel() ],
  148. [ 'Abstract', $tblAcl->getRawOpis() ],
  149. [ 'Keywords', implode(', ', [ $tblAcl->getID(), $tblAcl->getName(), $tblAcl->getRawLabel() ]) ],
  150. [ 'SRS', 'EPSG:4326' ],
  151. [ 'LatLongBoundingBox', [
  152. 'minx' => "8.12328509871721",
  153. 'miny' => "38.8575126897477",
  154. 'maxx' => "9.838674658246807",
  155. 'maxy' => "41.31378404137082"], null ]
  156. ] ];
  157. }
  158. foreach (Core_AclHelper::getCustomAclList() as $typeName) {
  159. list($prefix, $name) = explode(':', $typeName);
  160. $featureTypeNodes[] = [ 'FeatureType', [ "xmlns:{$prefix}" => Api_WfsNs::getNsUri($prefix) ], [
  161. [ 'Name', "{$prefix}:{$name}" ],
  162. [ 'Title', $name ],
  163. [ 'Abstract', $name ],
  164. [ 'Keywords', $name ],
  165. [ 'SRS', 'EPSG:4326' ],
  166. ] ];
  167. }
  168. $xmlWriter->startElement('FeatureTypeList');
  169. $xmlWriter->h('Operations', ['Query', 'Insert', 'Update', 'Delete', 'Lock']);
  170. if (DBG::isActive()) {
  171. DBG::log(array_map(function ($feature) {
  172. return "{$feature[2][0][1]}, ".array_values($feature[1])[0];
  173. }, $featureTypeNodes), 'array', "\$featureTypeNodes");
  174. }
  175. foreach ($featureTypeNodes as $node) {
  176. $xmlWriter->h($node);
  177. }
  178. $xmlWriter->endElement();// FeatureTypeList
  179. $xmlWriter->h('ogc:Filter_Capabilities', [
  180. [ 'ogc:Spatial_Capabilities', [
  181. [ 'ogc:Spatial_Operators', [
  182. 'ogc:Disjoint',
  183. 'ogc:Equals',
  184. 'ogc:DWithin',
  185. 'ogc:Beyond',
  186. 'ogc:Intersect',
  187. 'ogc:Touches',
  188. 'ogc:Crosses',
  189. 'ogc:Within',
  190. 'ogc:Contains',
  191. 'ogc:Overlaps',
  192. 'ogc:BBOX',
  193. ] ]
  194. ] ],
  195. [ 'ogc:Scalar_Capabilities', [
  196. 'ogc:Logical_Operators',
  197. [ 'ogc:Comparison_Operators', [
  198. 'ogc:Simple_Comparisons',
  199. 'ogc:Between',
  200. 'ogc:Like',
  201. 'ogc:NullCheck',
  202. ] ],
  203. [ 'ogc:Arithmetic_Operators', [
  204. 'ogc:Simple_Arithmetic',
  205. [ 'ogc:Functions', [
  206. [ 'ogc:Function_Names', [
  207. [ 'ogc:Function_Name', ['nArgs'=>"1"], "abs" ],
  208. [ 'ogc:Function_Name', ['nArgs'=>"1"], "abs_2" ],
  209. [ 'ogc:Function_Name', ['nArgs'=>"1"], "abs_3" ],
  210. [ 'ogc:Function_Name', ['nArgs'=>"1"], "abs_4" ],
  211. [ 'ogc:Function_Name', ['nArgs'=>"1"], "acos" ],
  212. [ 'ogc:Function_Name', ['nArgs'=>"2"], "AddCoverages" ],
  213. [ 'ogc:Function_Name', ['nArgs'=>"4"], "Aggregate" ],
  214. [ 'ogc:Function_Name', ['nArgs'=>"1"], "Area" ],
  215. [ 'ogc:Function_Name', ['nArgs'=>"1"], "area2" ],
  216. [ 'ogc:Function_Name', ['nArgs'=>"3"], "AreaGrid" ],
  217. [ 'ogc:Function_Name', ['nArgs'=>"1"], "asin" ],
  218. [ 'ogc:Function_Name', ['nArgs'=>"1"], "atan" ],
  219. [ 'ogc:Function_Name', ['nArgs'=>"2"], "atan2" ],
  220. [ 'ogc:Function_Name', ['nArgs'=>"14"], "BarnesSurface" ],
  221. [ 'ogc:Function_Name', ['nArgs'=>"3"], "between" ],
  222. [ 'ogc:Function_Name', ['nArgs'=>"1"], "boundary" ],
  223. [ 'ogc:Function_Name', ['nArgs'=>"1"], "boundaryDimension" ],
  224. [ 'ogc:Function_Name', ['nArgs'=>"1"], "Bounds" ],
  225. [ 'ogc:Function_Name', ['nArgs'=>"2"], "buffer" ],
  226. [ 'ogc:Function_Name', ['nArgs'=>"3"], "BufferFeatureCollection" ],
  227. [ 'ogc:Function_Name', ['nArgs'=>"3"], "bufferWithSegments" ],
  228. [ 'ogc:Function_Name', ['nArgs'=>"7"], "Categorize" ],
  229. [ 'ogc:Function_Name', ['nArgs'=>"1"], "ceil" ],
  230. [ 'ogc:Function_Name', ['nArgs'=>"1"], "Centroid" ],
  231. [ 'ogc:Function_Name', ['nArgs'=>"2"], "classify" ],
  232. [ 'ogc:Function_Name', ['nArgs'=>"2"], "Clip" ],
  233. [ 'ogc:Function_Name', ['nArgs'=>"1"], "CollectGeometries" ],
  234. [ 'ogc:Function_Name', ['nArgs'=>"1"], "Collection_Average" ],
  235. [ 'ogc:Function_Name', ['nArgs'=>"1"], "Collection_Bounds" ],
  236. [ 'ogc:Function_Name', ['nArgs'=>"0"], "Collection_Count" ],
  237. [ 'ogc:Function_Name', ['nArgs'=>"1"], "Collection_Max" ],
  238. [ 'ogc:Function_Name', ['nArgs'=>"1"], "Collection_Median" ],
  239. [ 'ogc:Function_Name', ['nArgs'=>"1"], "Collection_Min" ],
  240. [ 'ogc:Function_Name', ['nArgs'=>"1"], "Collection_Sum" ],
  241. [ 'ogc:Function_Name', ['nArgs'=>"1"], "Collection_Unique" ],
  242. [ 'ogc:Function_Name', ['nArgs'=>"1"], "Concatenate" ],
  243. [ 'ogc:Function_Name', ['nArgs'=>"2"], "contains" ],
  244. [ 'ogc:Function_Name', ['nArgs'=>"7"], "Contour" ],
  245. [ 'ogc:Function_Name', ['nArgs'=>"2"], "convert" ],
  246. [ 'ogc:Function_Name', ['nArgs'=>"1"], "convexHull" ],
  247. [ 'ogc:Function_Name', ['nArgs'=>"1"], "cos" ],
  248. [ 'ogc:Function_Name', ['nArgs'=>"1"], "Count" ],
  249. [ 'ogc:Function_Name', ['nArgs'=>"2"], "CropCoverage" ],
  250. [ 'ogc:Function_Name', ['nArgs'=>"2"], "crosses" ],
  251. [ 'ogc:Function_Name', ['nArgs'=>"2"], "dateFormat" ],
  252. [ 'ogc:Function_Name', ['nArgs'=>"2"], "dateParse" ],
  253. [ 'ogc:Function_Name', ['nArgs'=>"2"], "difference" ],
  254. [ 'ogc:Function_Name', ['nArgs'=>"1"], "dimension" ],
  255. [ 'ogc:Function_Name', ['nArgs'=>"2"], "disjoint" ],
  256. [ 'ogc:Function_Name', ['nArgs'=>"2"], "disjoint3D" ],
  257. [ 'ogc:Function_Name', ['nArgs'=>"2"], "distance" ],
  258. [ 'ogc:Function_Name', ['nArgs'=>"2"], "distance3D" ],
  259. [ 'ogc:Function_Name', ['nArgs'=>"1"], "double2bool" ],
  260. [ 'ogc:Function_Name', ['nArgs'=>"1"], "endAngle" ],
  261. [ 'ogc:Function_Name', ['nArgs'=>"1"], "endPoint" ],
  262. [ 'ogc:Function_Name', ['nArgs'=>"1"], "env" ],
  263. [ 'ogc:Function_Name', ['nArgs'=>"1"], "envelope" ],
  264. [ 'ogc:Function_Name', ['nArgs'=>"2"], "EqualInterval" ],
  265. [ 'ogc:Function_Name', ['nArgs'=>"2"], "equalsExact" ],
  266. [ 'ogc:Function_Name', ['nArgs'=>"3"], "equalsExactTolerance" ],
  267. [ 'ogc:Function_Name', ['nArgs'=>"2"], "equalTo" ],
  268. [ 'ogc:Function_Name', ['nArgs'=>"1"], "exp" ],
  269. [ 'ogc:Function_Name', ['nArgs'=>"1"], "exteriorRing" ],
  270. [ 'ogc:Function_Name', ['nArgs'=>"3"], "Feature" ],
  271. [ 'ogc:Function_Name', ['nArgs'=>"1"], "floor" ],
  272. [ 'ogc:Function_Name', ['nArgs'=>"1"], "geometryType" ],
  273. [ 'ogc:Function_Name', ['nArgs'=>"1"], "geomFromWKT" ],
  274. [ 'ogc:Function_Name', ['nArgs'=>"1"], "geomLength" ],
  275. [ 'ogc:Function_Name', ['nArgs'=>"2"], "getGeometryN" ],
  276. [ 'ogc:Function_Name', ['nArgs'=>"1"], "getX" ],
  277. [ 'ogc:Function_Name', ['nArgs'=>"1"], "getY" ],
  278. [ 'ogc:Function_Name', ['nArgs'=>"1"], "getz" ],
  279. [ 'ogc:Function_Name', ['nArgs'=>"2"], "greaterEqualThan" ],
  280. [ 'ogc:Function_Name', ['nArgs'=>"2"], "greaterThan" ],
  281. [ 'ogc:Function_Name', ['nArgs'=>"5"], "Grid" ],
  282. [ 'ogc:Function_Name', ['nArgs'=>"7"], "Heatmap" ],
  283. [ 'ogc:Function_Name', ['nArgs'=>"0"], "id" ],
  284. [ 'ogc:Function_Name', ['nArgs'=>"2"], "IEEEremainder" ],
  285. [ 'ogc:Function_Name', ['nArgs'=>"3"], "if_then_else" ],
  286. [ 'ogc:Function_Name', ['nArgs'=>"11"], "in10" ],
  287. [ 'ogc:Function_Name', ['nArgs'=>"3"], "in2" ],
  288. [ 'ogc:Function_Name', ['nArgs'=>"4"], "in3" ],
  289. [ 'ogc:Function_Name', ['nArgs'=>"5"], "in4" ],
  290. [ 'ogc:Function_Name', ['nArgs'=>"6"], "in5" ],
  291. [ 'ogc:Function_Name', ['nArgs'=>"7"], "in6" ],
  292. [ 'ogc:Function_Name', ['nArgs'=>"8"], "in7" ],
  293. [ 'ogc:Function_Name', ['nArgs'=>"9"], "in8" ],
  294. [ 'ogc:Function_Name', ['nArgs'=>"10"], "in9" ],
  295. [ 'ogc:Function_Name', ['nArgs'=>"2"], "InclusionFeatureCollection" ],
  296. [ 'ogc:Function_Name', ['nArgs'=>"1"], "int2bbool" ],
  297. [ 'ogc:Function_Name', ['nArgs'=>"1"], "int2ddouble" ],
  298. [ 'ogc:Function_Name', ['nArgs'=>"1"], "interiorPoint" ],
  299. [ 'ogc:Function_Name', ['nArgs'=>"2"], "interiorRingN" ],
  300. [ 'ogc:Function_Name', ['nArgs'=>"3"], "Interpolate" ],
  301. [ 'ogc:Function_Name', ['nArgs'=>"2"], "intersection" ],
  302. [ 'ogc:Function_Name', ['nArgs'=>"7"], "IntersectionFeatureCollection" ],
  303. [ 'ogc:Function_Name', ['nArgs'=>"2"], "intersects" ],
  304. [ 'ogc:Function_Name', ['nArgs'=>"2"], "intersects3D" ],
  305. [ 'ogc:Function_Name', ['nArgs'=>"1"], "isClosed" ],
  306. [ 'ogc:Function_Name', ['nArgs'=>"0"], "isCoverage" ],
  307. [ 'ogc:Function_Name', ['nArgs'=>"1"], "isEmpty" ],
  308. [ 'ogc:Function_Name', ['nArgs'=>"2"], "isLike" ],
  309. [ 'ogc:Function_Name', ['nArgs'=>"1"], "isNull" ],
  310. [ 'ogc:Function_Name', ['nArgs'=>"2"], "isometric" ],
  311. [ 'ogc:Function_Name', ['nArgs'=>"1"], "isRing" ],
  312. [ 'ogc:Function_Name', ['nArgs'=>"1"], "isSimple" ],
  313. [ 'ogc:Function_Name', ['nArgs'=>"1"], "isValid" ],
  314. [ 'ogc:Function_Name', ['nArgs'=>"3"], "isWithinDistance" ],
  315. [ 'ogc:Function_Name', ['nArgs'=>"3"], "isWithinDistance3D" ],
  316. [ 'ogc:Function_Name', ['nArgs'=>"2"], "Jenks" ],
  317. [ 'ogc:Function_Name', ['nArgs'=>"1"], "length" ],
  318. [ 'ogc:Function_Name', ['nArgs'=>"2"], "lessEqualThan" ],
  319. [ 'ogc:Function_Name', ['nArgs'=>"2"], "lessThan" ],
  320. [ 'ogc:Function_Name', ['nArgs'=>"1"], "list" ],
  321. [ 'ogc:Function_Name', ['nArgs'=>"1"], "log" ],
  322. [ 'ogc:Function_Name', ['nArgs'=>"4"], "LRSGeocode" ],
  323. [ 'ogc:Function_Name', ['nArgs'=>"5"], "LRSMeasure" ],
  324. [ 'ogc:Function_Name', ['nArgs'=>"5"], "LRSSegment" ],
  325. [ 'ogc:Function_Name', ['nArgs'=>"2"], "max" ],
  326. [ 'ogc:Function_Name', ['nArgs'=>"2"], "max_2" ],
  327. [ 'ogc:Function_Name', ['nArgs'=>"2"], "max_3" ],
  328. [ 'ogc:Function_Name', ['nArgs'=>"2"], "max_4" ],
  329. [ 'ogc:Function_Name', ['nArgs'=>"2"], "min" ],
  330. [ 'ogc:Function_Name', ['nArgs'=>"2"], "min_2" ],
  331. [ 'ogc:Function_Name', ['nArgs'=>"2"], "min_3" ],
  332. [ 'ogc:Function_Name', ['nArgs'=>"2"], "min_4" ],
  333. [ 'ogc:Function_Name', ['nArgs'=>"1"], "mincircle" ],
  334. [ 'ogc:Function_Name', ['nArgs'=>"1"], "minimumdiameter" ],
  335. [ 'ogc:Function_Name', ['nArgs'=>"1"], "minrectangle" ],
  336. [ 'ogc:Function_Name', ['nArgs'=>"2"], "modulo" ],
  337. [ 'ogc:Function_Name', ['nArgs'=>"2"], "MultiplyCoverages" ],
  338. [ 'ogc:Function_Name', ['nArgs'=>"3"], "Nearest" ],
  339. [ 'ogc:Function_Name', ['nArgs'=>"1"], "not" ],
  340. [ 'ogc:Function_Name', ['nArgs'=>"2"], "notEqualTo" ],
  341. [ 'ogc:Function_Name', ['nArgs'=>"2"], "numberFormat" ],
  342. [ 'ogc:Function_Name', ['nArgs'=>"5"], "numberFormat2" ],
  343. [ 'ogc:Function_Name', ['nArgs'=>"1"], "numGeometries" ],
  344. [ 'ogc:Function_Name', ['nArgs'=>"1"], "numInteriorRing" ],
  345. [ 'ogc:Function_Name', ['nArgs'=>"1"], "numPoints" ],
  346. [ 'ogc:Function_Name', ['nArgs'=>"1"], "octagonalenvelope" ],
  347. [ 'ogc:Function_Name', ['nArgs'=>"3"], "offset" ],
  348. [ 'ogc:Function_Name', ['nArgs'=>"2"], "overlaps" ],
  349. [ 'ogc:Function_Name', ['nArgs'=>"1"], "parameter" ],
  350. [ 'ogc:Function_Name', ['nArgs'=>"1"], "parseBoolean" ],
  351. [ 'ogc:Function_Name', ['nArgs'=>"1"], "parseDouble" ],
  352. [ 'ogc:Function_Name', ['nArgs'=>"1"], "parseInt" ],
  353. [ 'ogc:Function_Name', ['nArgs'=>"1"], "parseLong" ],
  354. [ 'ogc:Function_Name', ['nArgs'=>"0"], "pi" ],
  355. [ 'ogc:Function_Name', ['nArgs'=>"4"], "PointBuffers" ],
  356. [ 'ogc:Function_Name', ['nArgs'=>"2"], "pointN" ],
  357. [ 'ogc:Function_Name', ['nArgs'=>"7"], "PointStacker" ],
  358. [ 'ogc:Function_Name', ['nArgs'=>"6"], "PolygonExtraction" ],
  359. [ 'ogc:Function_Name', ['nArgs'=>"2"], "pow" ],
  360. [ 'ogc:Function_Name', ['nArgs'=>"1"], "property" ],
  361. [ 'ogc:Function_Name', ['nArgs'=>"1"], "PropertyExists" ],
  362. [ 'ogc:Function_Name', ['nArgs'=>"2"], "Quantile" ],
  363. [ 'ogc:Function_Name', ['nArgs'=>"3"], "Query" ],
  364. [ 'ogc:Function_Name', ['nArgs'=>"0"], "random" ],
  365. [ 'ogc:Function_Name', ['nArgs'=>"5"], "RangeLookup" ],
  366. [ 'ogc:Function_Name', ['nArgs'=>"1"], "RasterAsPointCollection" ],
  367. [ 'ogc:Function_Name', ['nArgs'=>"4"], "RasterZonalStatistics" ],
  368. [ 'ogc:Function_Name', ['nArgs'=>"5"], "Recode" ],
  369. [ 'ogc:Function_Name', ['nArgs'=>"2"], "RectangularClip" ],
  370. [ 'ogc:Function_Name', ['nArgs'=>"2"], "relate" ],
  371. [ 'ogc:Function_Name', ['nArgs'=>"3"], "relatePattern" ],
  372. [ 'ogc:Function_Name', ['nArgs'=>"3"], "Reproject" ],
  373. [ 'ogc:Function_Name', ['nArgs'=>"1"], "rint" ],
  374. [ 'ogc:Function_Name', ['nArgs'=>"1"], "round" ],
  375. [ 'ogc:Function_Name', ['nArgs'=>"1"], "round_2" ],
  376. [ 'ogc:Function_Name', ['nArgs'=>"1"], "roundDouble" ],
  377. [ 'ogc:Function_Name', ['nArgs'=>"6"], "ScaleCoverage" ],
  378. [ 'ogc:Function_Name', ['nArgs'=>"4"], "sdo_nn" ],
  379. [ 'ogc:Function_Name', ['nArgs'=>"2"], "setCRS" ],
  380. [ 'ogc:Function_Name', ['nArgs'=>"3"], "Simplify" ],
  381. [ 'ogc:Function_Name', ['nArgs'=>"1"], "sin" ],
  382. [ 'ogc:Function_Name', ['nArgs'=>"3"], "Snap" ],
  383. [ 'ogc:Function_Name', ['nArgs'=>"1"], "sqrt" ],
  384. [ 'ogc:Function_Name', ['nArgs'=>"2"], "StandardDeviation" ],
  385. [ 'ogc:Function_Name', ['nArgs'=>"1"], "startAngle" ],
  386. [ 'ogc:Function_Name', ['nArgs'=>"1"], "startPoint" ],
  387. [ 'ogc:Function_Name', ['nArgs'=>"1"], "strCapitalize" ],
  388. [ 'ogc:Function_Name', ['nArgs'=>"2"], "strConcat" ],
  389. [ 'ogc:Function_Name', ['nArgs'=>"2"], "strEndsWith" ],
  390. [ 'ogc:Function_Name', ['nArgs'=>"2"], "strEqualsIgnoreCase" ],
  391. [ 'ogc:Function_Name', ['nArgs'=>"2"], "strIndexOf" ],
  392. [ 'ogc:Function_Name', ['nArgs'=>"2"], "strLastIndexOf" ],
  393. [ 'ogc:Function_Name', ['nArgs'=>"1"], "strLength" ],
  394. [ 'ogc:Function_Name', ['nArgs'=>"2"], "strMatches" ],
  395. [ 'ogc:Function_Name', ['nArgs'=>"3"], "strPosition" ],
  396. [ 'ogc:Function_Name', ['nArgs'=>"4"], "strReplace" ],
  397. [ 'ogc:Function_Name', ['nArgs'=>"2"], "strStartsWith" ],
  398. [ 'ogc:Function_Name', ['nArgs'=>"3"], "strSubstring" ],
  399. [ 'ogc:Function_Name', ['nArgs'=>"2"], "strSubstringStart" ],
  400. [ 'ogc:Function_Name', ['nArgs'=>"1"], "strToLowerCase" ],
  401. [ 'ogc:Function_Name', ['nArgs'=>"1"], "strToUpperCase" ],
  402. [ 'ogc:Function_Name', ['nArgs'=>"1"], "strTrim" ],
  403. [ 'ogc:Function_Name', ['nArgs'=>"3"], "strTrim2" ],
  404. [ 'ogc:Function_Name', ['nArgs'=>"2"], "StyleCoverage" ],
  405. [ 'ogc:Function_Name', ['nArgs'=>"2"], "symDifference" ],
  406. [ 'ogc:Function_Name', ['nArgs'=>"1"], "tan" ],
  407. [ 'ogc:Function_Name', ['nArgs'=>"1"], "toDegrees" ],
  408. [ 'ogc:Function_Name', ['nArgs'=>"1"], "toRadians" ],
  409. [ 'ogc:Function_Name', ['nArgs'=>"2"], "touches" ],
  410. [ 'ogc:Function_Name', ['nArgs'=>"1"], "toWKT" ],
  411. [ 'ogc:Function_Name', ['nArgs'=>"2"], "Transform" ],
  412. [ 'ogc:Function_Name', ['nArgs'=>"2"], "union" ],
  413. [ 'ogc:Function_Name', ['nArgs'=>"2"], "UnionFeatureCollection" ],
  414. [ 'ogc:Function_Name', ['nArgs'=>"2"], "Unique" ],
  415. [ 'ogc:Function_Name', ['nArgs'=>"2"], "UniqueInterval" ],
  416. [ 'ogc:Function_Name', ['nArgs'=>"6"], "VectorToRaster" ],
  417. [ 'ogc:Function_Name', ['nArgs'=>"3"], "VectorZonalStatistics" ],
  418. [ 'ogc:Function_Name', ['nArgs'=>"1"], "vertices" ],
  419. [ 'ogc:Function_Name', ['nArgs'=>"2"], "within" ],
  420. ] ],
  421. ] ],
  422. ] ],
  423. ] ],
  424. ]);
  425. $xmlWriter->endElement();// WFS_Capabilities
  426. $xmlWriter->endDocument();
  427. exit;
  428. }
  429. }