geo:approx-center( $region as cts:region, [$options as xs:string*] ) as cts:point
Return a point approximating the center of the given region. For a point, this is the point itself. For a circle, it is the center point. For a box, it is the point whose latitude is half-way between the northern and southern limits and whose longitude is half-way between the western and eastern limits. For polygons, complex polygons, and linestrings, an approximate centroid is returned. This approximation is rough, and useful for quick comparisons.
The value of the precision
option always takes precedence
over the implied by the governing coordinate system name, including the
value of the coordinate-system
option. For example, if the
governing coordinate system is "wgs84/double" and the precision
option is "float", then the operation uses single precision.
The precision of the returned region is determined by the
precision
option, if present. Otherwise, the precision of
the returned region is determined by the precision of the governing
coordinate system.
(: Approximate center of London Zoo :) geo:approx-center( cts:polygon(( cts:point(51.5361190,-0.1590335), cts:point(51.5366529,-0.1568234), cts:point(51.5372001,-0.1537657), cts:point(51.5372868,-0.1527464), cts:point(51.5334561,-0.1509440), cts:point(51.5332359,-0.1517808), cts:point(51.5348643,-0.1584756), cts:point(51.5355250,-0.1592481), cts:point(51.5360522,-0.1590765) ))) ==> cts:point(51.535511,-0.15516526)
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:approx-center() :) let $plan:= op:from-view('buildings', 'builds') =>op:bind(op:as('result',ogeo:approx-center(op:col('poly')))) =>op:select(('result', op:col('geoid'))) =>op:order-by('result') return $plan=>op:result() (: ==> rows representing the approximate center of the 'poly' column :)
xquery version "1.0-ml"; xdmp:sql("select ST_Centroid(poly) from builds order by geoid limit 20") (: ==> rows representing the approximate center of the 'poly' column :)
Stack Overflow: Get the most useful answers to questions from the MarkLogic community, or ask your own question.