diff --git a/content/docs/0.9.8/geo/functions.html b/content/docs/0.9.8/geo/functions.html
new file mode 100644
index 0000000..66aef9b
--- /dev/null
+++ b/content/docs/0.9.8/geo/functions.html
@@ -0,0 +1,1556 @@
+<!DOCTYPE html>
+<!--
+ | Generated by Apache Maven Doxia Site Renderer 1.8.1 from src/site/markdown/geo/functions.md at 2022-05-12
+ | Rendered using Apache Maven Fluido Skin 1.7
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <meta name="Date-Revision-yyyymmdd" content="20220512" />
+    <meta http-equiv="Content-Language" content="en" />
+    <title>AsterixDB &#x2013; Support the standard GIS objects (DRAFT)</title>
+    <link rel="stylesheet" href="../css/apache-maven-fluido-1.7.min.css" />
+    <link rel="stylesheet" href="../css/site.css" />
+    <link rel="stylesheet" href="../css/print.css" media="print" />
+    <script type="text/javascript" src="../js/apache-maven-fluido-1.7.min.js"></script>
+
+  </head>
+  <body class="topBarDisabled">
+    <div class="container-fluid">
+      <div id="banner">
+        <div class="pull-left"><a href=".././" id="bannerLeft"><img src="../images/asterixlogo.png"  alt="AsterixDB"/></a></div>
+        <div class="pull-right"></div>
+        <div class="clear"><hr/></div>
+      </div>
+
+      <div id="breadcrumbs">
+        <ul class="breadcrumb">
+        <li id="publishDate">Last Published: 2022-05-12</li>
+      <li id="projectVersion" class="pull-right">Version: 0.9.8</li>
+      <li class="pull-right"><a href="../index.html" title="Documentation Home">Documentation Home</a></li>
+        </ul>
+      </div>
+      <div class="row-fluid">
+        <div id="leftColumn" class="span2">
+          <div class="well sidebar-nav">
+    <ul class="nav nav-list">
+      <li class="nav-header">Get Started - Installation</li>
+    <li><a href="../ncservice.html" title="Option 1: using NCService"><span class="none"></span>Option 1: using NCService</a></li>
+    <li><a href="../ansible.html" title="Option 2: using Ansible"><span class="none"></span>Option 2: using Ansible</a></li>
+    <li><a href="../aws.html" title="Option 3: using Amazon Web Services"><span class="none"></span>Option 3: using Amazon Web Services</a></li>
+      <li class="nav-header">AsterixDB Primer</li>
+    <li><a href="../sqlpp/primer-sqlpp.html" title="Using SQL++"><span class="none"></span>Using SQL++</a></li>
+      <li class="nav-header">Data Model</li>
+    <li><a href="../datamodel.html" title="The Asterix Data Model"><span class="none"></span>The Asterix Data Model</a></li>
+      <li class="nav-header">Queries</li>
+    <li><a href="../sqlpp/manual.html" title="The SQL++ Query Language"><span class="none"></span>The SQL++ Query Language</a></li>
+    <li><a href="../SQLPP.html" title="Raw SQL++ Grammar"><span class="none"></span>Raw SQL++ Grammar</a></li>
+    <li><a href="../sqlpp/builtins.html" title="Builtin Functions"><span class="none"></span>Builtin Functions</a></li>
+      <li class="nav-header">API/SDK</li>
+    <li><a href="../api.html" title="HTTP API"><span class="none"></span>HTTP API</a></li>
+    <li><a href="../csv.html" title="CSV Output"><span class="none"></span>CSV Output</a></li>
+      <li class="nav-header">Advanced Features</li>
+    <li><a href="../aql/externaldata.html" title="Accessing External Data"><span class="none"></span>Accessing External Data</a></li>
+    <li><a href="../feeds.html" title="Data Ingestion with Feeds"><span class="none"></span>Data Ingestion with Feeds</a></li>
+    <li><a href="../udf.html" title="User Defined Functions"><span class="none"></span>User Defined Functions</a></li>
+    <li><a href="../sqlpp/filters.html" title="Filter-Based LSM Index Acceleration"><span class="none"></span>Filter-Based LSM Index Acceleration</a></li>
+    <li><a href="../sqlpp/fulltext.html" title="Support of Full-text Queries"><span class="none"></span>Support of Full-text Queries</a></li>
+    <li><a href="../sqlpp/similarity.html" title="Support of Similarity Queries"><span class="none"></span>Support of Similarity Queries</a></li>
+    <li><a href="../geo/quickstart.html" title="GIS Support Overview"><span class="none"></span>GIS Support Overview</a></li>
+    <li class="active"><a href="#"><span class="none"></span>GIS Functions</a></li>
+    <li><a href="../interval_join.html" title="Support of Interval Joins"><span class="none"></span>Support of Interval Joins</a></li>
+    <li><a href="../spatial_join.html" title="Support of Spatial Joins"><span class="none"></span>Support of Spatial Joins</a></li>
+    <li><a href="../sqlpp/arrayindex.html" title="Support of Array Indexes"><span class="none"></span>Support of Array Indexes</a></li>
+      <li class="nav-header">Deprecated</li>
+    <li><a href="../aql/primer.html" title="AsterixDB Primer: Using AQL"><span class="none"></span>AsterixDB Primer: Using AQL</a></li>
+    <li><a href="../aql/manual.html" title="Queries: The Asterix Query Language (AQL)"><span class="none"></span>Queries: The Asterix Query Language (AQL)</a></li>
+    <li><a href="../aql/builtins.html" title="Queries: Builtin Functions (AQL)"><span class="none"></span>Queries: Builtin Functions (AQL)</a></li>
+</ul>
+          <hr />
+          <div id="poweredBy">
+            <div class="clear"></div>
+            <div class="clear"></div>
+            <div class="clear"></div>
+            <div class="clear"></div>
+<a href=".././" title="AsterixDB" class="builtBy"><img class="builtBy"  alt="AsterixDB" src="../images/asterixlogo.png"    /></a>
+            </div>
+          </div>
+        </div>
+        <div id="bodyColumn"  class="span10" >
+<!--
+ ! Licensed to the Apache Software Foundation (ASF) under one
+ ! or more contributor license agreements.  See the NOTICE file
+ ! distributed with this work for additional information
+ ! regarding copyright ownership.  The ASF licenses this file
+ ! to you under the Apache License, Version 2.0 (the
+ ! "License"); you may not use this file except in compliance
+ ! with the License.  You may obtain a copy of the License at
+ !
+ !   http://www.apache.org/licenses/LICENSE-2.0
+ !
+ ! Unless required by applicable law or agreed to in writing,
+ ! software distributed under the License is distributed on an
+ ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ! KIND, either express or implied.  See the License for the
+ ! specific language governing permissions and limitations
+ ! under the License.
+ !-->
+<h1>Support the standard GIS objects (DRAFT)</h1>
+<div class="section">
+<h2><a name="Table_of_Contents"></a><a name="toc" id="toc">Table of Contents</a></h2>
+<ul>
+
+<li><a href="#Introduction">Introduction</a></li>
+<li><a href="#construction">Construction functions</a></li>
+<li><a href="#primitive">Primitive functions</a></li>
+<li><a href="#predicate">Spatial Predicate</a></li>
+<li><a href="#analysis">Spatial Analysis</a></li>
+<li><a href="#aggregate">Spatial Aggregates</a></li>
+</ul></div>
+<div class="section">
+<h2><a name="Introduction" id="Introduction">Introduction</a></h2>
+<p>To support standard GIS objects in AsterixDB, you need to use the <tt>geometry</tt> data type as follows.</p>
+
+<div>
+<div>
+<pre class="source">DROP dataverse GeoJSON if exists;
+CREATE  dataverse GeoJSON;
+
+USE GeoJSON;
+
+CREATE TYPE GeometryType AS{
+  id : int,
+  myGeometry : geometry
+};
+
+CREATE DATASET Geometries (GeometryType) PRIMARY KEY id;
+</pre></div></div>
+
+<p>Please note that even though the <a class="externalLink" href="http://desktop.arcgis.com/en/arcmap/10.3/manage-data/using-sql-with-gdbs/what-is-an-srid.htm">SRID</a> input is supported for certain functions and is represented internally in the correct manner the serialized result (printed in the output) displays the SRID as 4326 always because of the limitations in Esri API.</p></div>
+<div class="section">
+<h2><a name="Construction_functions"></a><a name="construction" id="construction">Construction functions</a></h2>
+<p>The Geometry datatype can be created by the constructor functions.</p>
+<div class="section">
+<h3><a name="st_make_point"></a>st_make_point</h3>
+<ul>
+
+<li>
+
+<p>Creates a 2D,3DZ or 4D point geometry.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Create a 2D point at coordinates (x,y) = (-71, 42)</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_make_point(-71, 42);
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;Point&quot;,&quot;coordinates&quot;:[-71,42],&quot;crs&quot;:{&quot;type&quot;:&quot;name&quot;,&quot;properties&quot;:{&quot;name&quot;:&quot;EPSG:4326&quot;}}}
+</pre></div></div>
+</li>
+<li>Example:</li>
+<li>Create a 3D point at coordinates (x,y,z) = (1,2,1.59)</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_make_point(1,2,1.59);
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;Point&quot;,&quot;coordinates&quot;:[1,2,1.59],&quot;crs&quot;:{&quot;type&quot;:&quot;name&quot;,&quot;properties&quot;:{&quot;name&quot;:&quot;EPSG:4326&quot;}}}
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_geom_from_text"></a>st_geom_from_text</h3>
+<ul>
+
+<li>
+
+<p>Return a specified ST_Geometry value from Well-Known Text representation (WKT).</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Create a LineString geometry from the WKT format.</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_geom_from_text(&quot;LINESTRING(1 2,3 4,5 6)&quot;);
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;LineString&quot;,&quot;coordinates&quot;:[[1,2],[3,4],[5,6]],&quot;crs&quot;:{&quot;type&quot;:&quot;name&quot;,&quot;properties&quot;:{&quot;name&quot;:&quot;EPSG:4326&quot;}}}
+</pre></div></div>
+</li>
+<li>Example:</li>
+<li>Create a MultiLineString geometry from the WKT format.</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_geom_from_text('MULTILINESTRING((1 2,3 4,5 6),(7 8,9 10))');
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;MultiLineString&quot;,&quot;coordinates&quot;:[[[1,2],[3,4],[5,6]],[[7,8],[9,10]]],&quot;crs&quot;:null}
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_geom_from_wkb"></a>st_geom_from_wkb</h3>
+<ul>
+
+<li>
+
+<p>Creates a geometry instance from a Well-Known Binary geometry representation (WKB) and optional SRID.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_geom_from_wkb(hex(&quot;010100000000000000000000400000000000001440&quot;));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;Point&quot;,&quot;coordinates&quot;:[2,5],&quot;crs&quot;:{&quot;type&quot;:&quot;name&quot;,&quot;properties&quot;:{&quot;name&quot;:&quot;EPSG:4326&quot;}}}
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_geom_from_geojson"></a>st_geom_from_geojson</h3>
+<ul>
+
+<li>
+
+<p>Creates a geometry instance from its GeoJSON representation</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_geom_from_geojson({&quot;type&quot;:&quot;Point&quot;,&quot;coordinates&quot;:[2,5],&quot;crs&quot;:{&quot;type&quot;:&quot;name&quot;,&quot;properties&quot;:{&quot;name&quot;:&quot;EPSG:4326&quot;}}});
+</pre></div></div>
+</li>
+<li>
+
+<p>Result:</p>
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;Point&quot;,&quot;coordinates&quot;:[2,5],&quot;crs&quot;:{&quot;type&quot;:&quot;name&quot;,&quot;properties&quot;:{&quot;name&quot;:&quot;EPSG:4326&quot;}}}
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_make_envelope"></a>st_make_envelope</h3>
+<ul>
+
+<li>
+
+<p>Creates a rectangular Polygon formed from the given minimums and maximums. Input values must be in SRS specified by the SRID.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_make_envelope(10, 10, 11, 11, 4326);
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;Polygon&quot;,&quot;coordinates&quot;:[[[10,10],[11,10],[11,11],[10,11],[10,10]]],&quot;crs&quot;:{&quot;type&quot;:&quot;name&quot;,&quot;properties&quot;:{&quot;name&quot;:&quot;EPSG:4326&quot;}}}
+</pre></div></div>
+</li>
+</ul></div></div>
+<div class="section">
+<h2><a name="Primitive_functions"></a><a name="primitive" id="primitive">Primitive functions</a></h2>
+<p>There are primitive functions that take as input geometry/es and return a primitive type.</p>
+<div class="section">
+<h3><a name="st_area"></a>st_area</h3>
+<ul>
+
+<li>
+
+<p>Return the area of the surface if it is a Polygon or MultiPolygon. For geometry, a 2D Cartesian area is determined with units specified by the SRID. For geography, area is determined on a curved surface with units in square meters.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_area(st_geom_from_text('POLYGON((7 2,4 9,3 6,2.6 7,8 16))'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">26.500000000000007
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_coord_dim"></a>st_coord_dim</h3>
+<ul>
+
+<li>
+
+<p>Return the coordinate dimension of the Geometry value.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_coord_dim(st_make_point(1,2));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">2
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_dimension"></a>st_dimension</h3>
+<ul>
+
+<li>
+
+<p>Return the inherent dimension of this Geometry object, which must be less than or equal to the coordinate dimension.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_dimension(st_geom_from_text('GEOMETRYCOLLECTION(LINESTRING(1 1,0 0),POINT(0 0))'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">1
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="geometry_type"></a>geometry_type</h3>
+<ul>
+
+<li>
+
+<p>Return the type of the geometry as a string. Eg: &#x2018;LINESTRING&#x2019;, &#x2018;POLYGON&#x2019;, &#x2018;MULTIPOINT&#x2019;, etc.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">geometry_type(st_geom_from_text('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">&quot;LineString&quot;
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_m"></a>st_m</h3>
+<ul>
+
+<li>
+
+<p>Return the M coordinate of the point, or NULL if not available. Input must be a point.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_m(st_make_point(1, 2, 3, 4));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">4.0
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_n_points"></a>st_n_points</h3>
+<ul>
+
+<li>
+
+<p>Return the number of points (vertexes) in a geometry.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_n_points(st_geom_from_text('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">4
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_n_rings"></a>st_n_rings</h3>
+<ul>
+
+<li>
+
+<p>If the geometry is a polygon or multi-polygon return the number of rings.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_n_rings(st_geom_from_text('POLYGON((10.689 -25.092, 34.595 -20.170, 38.814 -35.639, 13.502 -39.155, 10.689 -25.092))'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">1
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_num_geometries"></a>st_num_geometries</h3>
+<ul>
+
+<li>
+
+<p>If geometry is a GEOMETRYCOLLECTION (or MULTI*) return the number of geometries, for single geometries will return 1, otherwise return NULL.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_num_geometries(st_geom_from_text('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">1
+</pre></div></div>
+</li>
+<li>Example:</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_num_geometries(st_geom_from_text('GEOMETRYCOLLECTION(MULTIPOINT(-2 3 , -2 2), LINESTRING(5 5 ,10 10), POLYGON((-7 4.2,-7.1 5,-7.1 4.3,-7 4.2)))'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">3
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_num_interiorRings"></a>st_num_interiorRings</h3>
+<ul>
+
+<li>
+
+<p>Return the number of interior rings of a polygon geometry.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+</ul>
+<p><img src="../images/linestring.png" alt="Image of interiorRings" /> * Command:</p>
+
+<div>
+<div>
+<pre class="source">    st_num_interior_rings(st_geom_from_text(&quot;POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10),(20 30, 35 35, 30 20, 20 30))&quot;));
+</pre></div></div>
+
+<ul>
+
+<li>Result:
+
+<div>
+<div>
+<pre class="source">1
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_x"></a>st_x</h3>
+<ul>
+
+<li>
+
+<p>Return the X coordinate of the point, or NULL if not available. Input must be a point.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_x(st_make_point(1, 2, 3, 4));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">1.0
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_y"></a>st_y</h3>
+<ul>
+
+<li>
+
+<p>Return the Y coordinate of the point, or NULL if not available. Input must be a point.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_y(st_make_point(1, 2, 3, 4));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">1.0
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_x_max"></a>st_x_max</h3>
+<ul>
+
+<li>
+
+<p>Return X maximum of a bounding box 2d or 3d or a geometry.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_x_max(st_geom_from_text('POLYGON((10.689 -25.092, 34.595 -20.170, 38.814 -35.639, 13.502 -39.155, 10.689 -25.092))'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">38.814
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_x_min"></a>st_x_min</h3>
+<ul>
+
+<li>Return X minimum of a bounding box 2d or 3d or a geometry.</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_y_max"></a>st_y_max</h3>
+<ul>
+
+<li>Return Y maximum of a bounding box 2d or 3d or a geometry.</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_y_min"></a>st_y_min</h3>
+<ul>
+
+<li>Return Y minimum of a bounding box 2d or 3d or a geometry.</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_z"></a>st_z</h3>
+<ul>
+
+<li>Return the Z coordinate of the point, or NULL if not available. Input must be a point.</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_z_max"></a>st_z_max</h3>
+<ul>
+
+<li>Return Z maximum of a bounding box 2d or 3d or a geometry.</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_z_min"></a>st_z_min</h3>
+<ul>
+
+<li>Return Z minimum of a bounding box 2d or 3d or a geometry.</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_as_binary"></a>st_as_binary</h3>
+<ul>
+
+<li>
+
+<p>Return the Well-Known Binary (WKB) representation of the geometry/geography without SRID meta data.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_as_binary(st_geom_from_geojson({&quot;type&quot;:&quot;Point&quot;,&quot;coordinates&quot;:[2,5],&quot;crs&quot;:{&quot;type&quot;:&quot;name&quot;,&quot;properties&quot;:{&quot;name&quot;:&quot;EPSG:4326&quot;}}}));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">&quot;010100000000000000000000400000000000001440&quot;
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_as_geojson"></a>st_as_geojson</h3>
+<ul>
+
+<li>
+
+<p>Return the geometry as a GeoJSON element.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_as_geojson(st_geom_from_text('POLYGON((10.689 -25.092, 34.595 -20.170, 38.814 -35.639, 13.502 -39.155, 10.689 -25.092))'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">&quot;{\&quot;type\&quot;:\&quot;Polygon\&quot;,\&quot;coordinates\&quot;:[[[10.689,-25.092],[13.502,-39.155],[38.814,-35.639],[34.595,-20.17],[10.689,-25.092]]],\&quot;crs\&quot;:{\&quot;type\&quot;:\&quot;name\&quot;,\&quot;properties\&quot;:{\&quot;name\&quot;:\&quot;EPSG:4326\&quot;}}}&quot;
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_distance"></a>st_distance</h3>
+<ul>
+
+<li>
+
+<p>For geometry type Return the 2D Cartesian distance between two geometries in projected units (based on spatial ref). For geography type defaults to return minimum geodesic distance between two geographies in meters.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_distance(st_geom_from_text('POINT(-72.1235 42.3521)'),st_geom_from_text('LINESTRING(-72.1260 42.45, -72.123 42.1546)'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">0.0015056772638282166
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_length"></a>st_length</h3>
+<ul>
+
+<li>
+
+<p>Return the 2D length of the geometry if it is a LineString or MultiLineString. geometry are in units of spatial reference and geography are in meters (default spheroid).</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_length(st_geom_from_text('LINESTRING(-72.1260 42.45, -72.1240 42.45666, -72.123 42.1546)'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">0.30901547439030225
+</pre></div></div>
+</li>
+</ul></div></div>
+<div class="section">
+<h2><a name="Spatial_Predicate"></a><a name="predicate" id="predicate">Spatial Predicate</a></h2>
+<p>Spatial predicate functions test for a relationship between two geometries and return a Boolean value (true/false).</p>
+<div class="section">
+<h3><a name="st_intersects"></a>st_intersects</h3>
+<ul>
+
+<li>
+
+<p>Return TRUE if the Geometries/Geography &#x201c;spatially intersect in 2D&#x201d;.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_intersects(st_geom_from_text('POINT(0 0)'), st_geom_from_text('LINESTRING ( 0 0, 0 2 )'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">true
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_isclosed"></a>st_isclosed</h3>
+<ul>
+
+<li>
+
+<p>Return TRUE if the LINESTRING&#x2019;s start and end points are coincident.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_is_closed(st_geom_from_text('LINESTRING(0 0, 0 1, 1 1, 0 0)'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">true
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_iscollection"></a>st_iscollection</h3>
+<ul>
+
+<li>
+
+<p>Return TRUE if the argument is a collection (MULTI*, GEOMETRYCOLLECTION, &#x2026;)</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_is_collection(st_geom_from_text('MULTIPOINT EMPTY'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">true
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_is_empty"></a>st_is_empty</h3>
+<ul>
+
+<li>
+
+<p>Return true if this Geometry is an empty geometrycollection, polygon, point etc.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_is_empty(st_geom_from_text('POLYGON EMPTY'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">true
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_is_ring"></a>st_is_ring</h3>
+<ul>
+
+<li>
+
+<p>Return TRUE if this LINESTRING is both closed and simple.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_is_ring(st_geom_from_text('LINESTRING(0 0, 0 1, 1 1, 1 0, 0 0)'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">true
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_is_simple"></a>st_is_simple</h3>
+<ul>
+
+<li>
+
+<p>Return (TRUE) if this Geometry has no anomalous geometric points, such as self intersection or self tangency.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_is_simple(st_geom_from_text('LINESTRING(1 1,2 2,2 3.5,1 3,1 2,2 1)'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">false
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_contains"></a>st_contains</h3>
+<ul>
+
+<li>
+
+<p>Return true if and only if no points of B lie in the exterior of A, and at least one point of the interior of B lies in the interior of A.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_contains(st_geom_from_text('LINESTRING(1 1,-1 -1,2 3.5,1 3,1 2,2 1)'), st_make_point(-1, -1));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">true
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_crosses"></a>st_crosses</h3>
+<ul>
+
+<li>
+
+<p>Return TRUE if the supplied geometries have some, but not all, interior points in common.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_crosses(st_geom_from_text('LINESTRING(1 1,2 2,3 3,4 4, 5 5,6 6)'), st_geom_from_text('LINESTRING(0 2,1 2,2 2,3 2,4 2,5 2)'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">true
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_disjoint"></a>st_disjoint</h3>
+<ul>
+
+<li>
+
+<p>Return TRUE if the Geometries do not &#x201c;spatially intersect&#x201d; - if they do not share any space together.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_disjoint(st_geom_from_text('LINESTRING(1 1,2 2,3 3,4 4, 5 5,6 6)'), st_geom_from_text('POINT(0 0)'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">true
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_equals"></a>st_equals</h3>
+<ul>
+
+<li>
+
+<p>Return true if the given geometries represent the same geometry. Directionality is ignored.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_equals(st_geom_from_text('LINESTRING(0 0, 10 10)'), st_geom_from_text('LINESTRING(0 0, 5 5, 10 10)'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">true
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_overlaps"></a>st_overlaps</h3>
+<ul>
+
+<li>
+
+<p>Return TRUE if the Geometries share space, are of the same dimension, but are not completely contained by each other.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_overlaps(st_geom_from_text('LINESTRING(1 1,2 2,3 3,4 4, 5 5,6 6)'), st_geom_from_text('LINESTRING(0 2,1 2,2 2,3 3,4 2,5 2)'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">true
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_relate"></a>st_relate</h3>
+<ul>
+
+<li>
+
+<p>Return true if this Geometry is spatially related to anotherGeometry, by testing for intersections between the Interior, Boundary and Exterior of the two geometries as specified by the values in the intersectionMatrixPattern.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_relate(st_geom_from_text('LINESTRING(1 2, 3 4)'), st_geom_from_text('LINESTRING(5 6, 7 8)'), &quot;FF1FF0102&quot;);
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">true
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_touches"></a>st_touches</h3>
+<ul>
+
+<li>
+
+<p>Return TRUE if the geometries have at least one point in common, but their interiors do not intersect.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_touches(st_geom_from_text('LINESTRING(0 0, 1 1, 0 2)'), st_geom_from_text('POINT(0 2)'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">true
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_within"></a>st_within</h3>
+<ul>
+
+<li>Return true if the geometry A is completely inside geometry B.</li>
+</ul></div></div>
+<div class="section">
+<h2><a name="Spatial_Analysis"></a><a name="analysis" id="analysis">Spatial Analysis</a></h2>
+<p>Spatial analysis functions take as input one or more geometries and return a geometry as output.</p>
+<div class="section">
+<h3><a name="st_union"></a>st_union</h3>
+<ul>
+
+<li>
+
+<p>Return a geometry that represents the point set union of the Geometries.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_union(st_geom_from_text('LINESTRING(0 0, 1 1, 0 2)'), st_geom_from_text('POINT(0 2)'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;LineString&quot;,&quot;coordinates&quot;:[[0,0],[1,1],[0,2]],&quot;crs&quot;:{&quot;type&quot;:&quot;name&quot;,&quot;properties&quot;:{&quot;name&quot;:&quot;EPSG:4326&quot;}}}
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_boundary"></a>st_boundary</h3>
+<ul>
+
+<li>
+
+<p>Return the closure of the combinatorial boundary of this Geometry.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_boundary(st_geom_from_text('POLYGON((1 1,0 0, -1 1, 1 1))'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;MultiLineString&quot;,&quot;coordinates&quot;:[[[1,1],[-1,1],[0,0],[1,1]]],&quot;crs&quot;:null}
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_end_point"></a>st_end_point</h3>
+<ul>
+
+<li>
+
+<p>Return the last point of a LINESTRING or CIRCULARLINESTRING geometry as a POINT.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_end_point(st_geom_from_text('LINESTRING(1 1, 2 2, 3 3)'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;Point&quot;,&quot;coordinates&quot;:[3,3],&quot;crs&quot;:{&quot;type&quot;:&quot;name&quot;,&quot;properties&quot;:{&quot;name&quot;:&quot;EPSG:4326&quot;}}}
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_envelope"></a>st_envelope</h3>
+<ul>
+
+<li>
+
+<p>Return a geometry representing the double precision (float8) bounding box of the supplied geometry.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_envelope(st_geom_from_text('LINESTRING(1 1, 2 2, 3 3)'));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;Polygon&quot;,&quot;coordinates&quot;:[[[1,1],[3,1],[3,3],[1,3],[1,1]]],&quot;crs&quot;:{&quot;type&quot;:&quot;name&quot;,&quot;properties&quot;:{&quot;name&quot;:&quot;EPSG:4326&quot;}}}
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_exterior_ring"></a>st_exterior_ring</h3>
+<ul>
+
+<li>
+
+<p>Return a line string representing the exterior ring of the POLYGON geometry. Return NULL if the geometry is not a polygon. Will not work with MULTIPOLYGON.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_exterior_ring(st_geom_from_text(&quot;POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10),(20 30, 35 35, 30 20, 20 30))&quot;));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;LineString&quot;,&quot;coordinates&quot;:[[35,10],[45,45],[15,40],[10,20],[35,10]],&quot;crs&quot;:{&quot;type&quot;:&quot;name&quot;,&quot;properties&quot;:{&quot;name&quot;:&quot;EPSG:4326&quot;}}}
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_geometry_n"></a>st_geometry_n</h3>
+<ul>
+
+<li>
+
+<p>Return the 1-based Nth geometry if the geometry is a GEOMETRYCOLLECTION, (MULTI)POINT, (MULTI)LINESTRING, MULTICURVE or (MULTI)POLYGON, POLYHEDRALSURFACE. Otherwise, return NULL.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_geometry_n(st_geom_from_text('GEOMETRYCOLLECTION(MULTIPOINT(-2 3 , -2 2),LINESTRING(5 5 ,10 10),POLYGON((-7 4.2,-7.1 5,-7.1 4.3,-7 4.2)))'),2);
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;Polygon&quot;,&quot;coordinates&quot;:[[[-7,4.2],[-7.1,5],[-7.1,4.3],[-7,4.2]]],&quot;crs&quot;:{&quot;type&quot;:&quot;name&quot;,&quot;properties&quot;:{&quot;name&quot;:&quot;EPSG:4326&quot;}}}
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_interior_ring_n"></a>st_interior_ring_n</h3>
+<ul>
+
+<li>
+
+<p>Return the Nth interior linestring ring of the polygon geometry. Return NULL if the geometry is not a polygon or the given N is out of range.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_interior_ring_n(st_geom_from_text(&quot;POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10),(20 30, 35 35, 30 20, 20 30))&quot;), 0);
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;LineString&quot;,&quot;coordinates&quot;:[[20,30],[35,35],[30,20],[20,30]],&quot;crs&quot;:{&quot;type&quot;:&quot;name&quot;,&quot;properties&quot;:{&quot;name&quot;:&quot;EPSG:4326&quot;}}}
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_point_n"></a>st_point_n</h3>
+<ul>
+
+<li>
+
+<p>Return the Nth point in the first LineString or circular LineString in the geometry. Negative values are counted backwards from the end of the LineString. Return NULL if there is no linestring in the geometry.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_point_n(st_geom_from_text(&quot;LINESTRING(1 1, 2 2, 3 3)&quot;), 1);
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;Point&quot;,&quot;coordinates&quot;:[2,2],&quot;crs&quot;:{&quot;type&quot;:&quot;name&quot;,&quot;properties&quot;:{&quot;name&quot;:&quot;EPSG:4326&quot;}}}
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_start_point"></a>st_start_point</h3>
+<ul>
+
+<li>
+
+<p>Return the first point of a LINESTRING geometry as a POINT.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_start_point(st_geom_from_text(&quot;LINESTRING(1 1, 2 2, 3 3)&quot;));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;Point&quot;,&quot;coordinates&quot;:[1,1],&quot;crs&quot;:{&quot;type&quot;:&quot;name&quot;,&quot;properties&quot;:{&quot;name&quot;:&quot;EPSG:4326&quot;}}}
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_difference"></a>st_difference</h3>
+<ul>
+
+<li>
+
+<p>Return a geometry that represents that part of geometry A that does not intersect with geometry B.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_difference(st_geom_from_text(&quot;LINESTRING(1 1, 2 2, 3 3)&quot;), st_geom_from_text(&quot;POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10),(20 30, 35 35, 30 20, 20 30))&quot;));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;LineString&quot;,&quot;coordinates&quot;:[[1,1],[2,2],[3,3]],&quot;crs&quot;:{&quot;type&quot;:&quot;name&quot;,&quot;properties&quot;:{&quot;name&quot;:&quot;EPSG:4326&quot;}}}
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_intersection"></a>st_intersection</h3>
+<ul>
+
+<li>
+
+<p>Return a geometry that represents the shared portion of geomA and geomB.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_intersection(st_geom_from_text(&quot;LINESTRING(1 1,2 2,3 3,4 4, 5 5,6 6)&quot;), st_geom_from_text(&quot;LINESTRING(0 2,1 2,2 2,3 3,4 2,5 2)&quot;));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;LineString&quot;,&quot;coordinates&quot;:[[2,2],[3,3]],&quot;crs&quot;:{&quot;type&quot;:&quot;name&quot;,&quot;properties&quot;:{&quot;name&quot;:&quot;EPSG:4326&quot;}}}
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_sym_difference"></a>st_sym_difference</h3>
+<ul>
+
+<li>
+
+<p>Return a geometry that represents the portions of A and B that do not intersect. It is called a symmetric difference because ST_SymDifference(A,B) = ST_SymDifference(B,A).</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_sym_difference(st_geom_from_text(&quot;LINESTRING(1 1,2 2,3 3,4 4, 5 5,6 6)&quot;), st_geom_from_text(&quot;LINESTRING(0 2,1 2,2 2,3 3,4 2,5 2)&quot;));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;MultiLineString&quot;,&quot;coordinates&quot;:[[[0,2],[1,2],[2,2],[1,1]],[[5,2],[4,2],[3,3],[4,4],[5,5],[6,6]]],&quot;crs&quot;:null}
+</pre></div></div>
+</li>
+</ul></div>
+<div class="section">
+<h3><a name="st_polygonize"></a>st_polygonize</h3>
+<ul>
+
+<li>
+
+<p>Aggregate. Creates a GeometryCollection containing possible polygons formed from the constituent linework of a set of geometries.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_polygonize([st_geom_from_text(&quot;LINESTRING(1 1,2 2,3 3,4 4, 5 5,6 6)&quot;), st_geom_from_text(&quot;LINESTRING(0 2,1 2,2 2,3 3,4 2,5 2)&quot;)]);
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;GeometryCollection&quot;,&quot;geometries&quot;:[{&quot;type&quot;:&quot;LineString&quot;,&quot;coordinates&quot;:[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]]},{&quot;type&quot;:&quot;LineString&quot;,&quot;coordinates&quot;:[[0,2],[1,2],[2,2],[3,3],[4,2],[5,2]]}],&quot;crs&quot;:{&quot;type&quot;:&quot;name&quot;,&quot;properties&quot;:{&quot;name&quot;:&quot;EPSG:4326&quot;}}}
+</pre></div></div>
+</li>
+</ul></div></div>
+<div class="section">
+<h2><a name="Spatial_Aggregates"></a><a name="aggregate" id="aggregate">Spatial Aggregates</a></h2>
+<p>spatial aggregate function which takes as input a set of geometries and return one geometry as the result.</p>
+<div class="section">
+<h3><a name="st_union"></a>st_union</h3>
+<ul>
+
+<li>
+
+<p>Returns a geometry that represents the point set union of the Geometries.</p>
+</li>
+<li>
+
+<p>Example:</p>
+</li>
+<li>Command:
+
+<div>
+<div>
+<pre class="source">st_union((SELECT VALUE gbu FROM [st_make_point(1.0,1.0),st_make_point(1.0,2.0)] as gbu));
+</pre></div></div>
+</li>
+<li>Result:
+
+<div>
+<div>
+<pre class="source">{&quot;type&quot;:&quot;MultiPoint&quot;,&quot;coordinates&quot;:[[1,1],[1,2]],&quot;crs&quot;:{&quot;type&quot;:&quot;name&quot;,&quot;properties&quot;:{&quot;name&quot;:&quot;EPSG:4326&quot;}}}
+</pre></div></div>
+</li>
+</ul></div></div>
+        </div>
+      </div>
+    </div>
+    <hr/>
+    <footer>
+      <div class="container-fluid">
+        <div class="row-fluid">
+<div class="row-fluid">Apache AsterixDB, AsterixDB, Apache, the Apache
+        feather logo, and the Apache AsterixDB project logo are either
+        registered trademarks or trademarks of The Apache Software
+        Foundation in the United States and other countries.
+        All other marks mentioned may be trademarks or registered
+        trademarks of their respective owners.
+      </div>
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>
