geo:box-polygon( $box as cts:box, [$options as xs:string*] ) as cts:region
Construct a polygon from a box.
It is recommended to use this function for queries, as box geometry matching cannot be optimized. Convert boxes to polygons before passing them in as arguments to your queries to get better performance.
xquery version "1.0-ml"; geo:to-wkt(geo:box-polygon(cts:box('[20.719136043990826,-156.8027533606166,20.934773647078917,-157.06917181764786]'),'coordinate-system=wgs84/double')) (: => POLYGON((-156.802753360617 20.7191360439908,-156.802753360617 20.9347736470789,-157.069171817648 20.9347736470789,-157.069171817648 20.7191360439908,-156.802753360617 20.7191360439908)) :)
xquery version "1.0-ml"; import module namespace op = 'http://marklogic.com/optic' at 'MarkLogic/optic.xqy'; import module namespace ogeo = 'http://marklogic.com/optic/expression/geo' at 'MarkLogic/optic/optic-geo.xqy'; (: Optic example using the Value Processing Function ogeo:intersects() and geo:box-polygon() :) (: $boxPolygonLit is a polygon representing a rough box around Tucson, Arizona, US :) let $boxPolygonLit := geo:box-polygon(cts:box(31.95998068725855,-110.74619309278187,32.42948158439288,-111.22959153028187)) let $plan:= op:from-view('buildings', 'builds') =>op:where(ogeo:intersects(op:col('poly'),$boxPolygonLit)) =>op:select(('name', op:col('geoid'))) =>op:order-by('geoid') return $plan=>op:result() (: ==> rows representing names and geoids of values in the 'poly' column that INTERSECT boxPolygonLit :)