
geo.distance( p1 as cts.point, p2 as cts.point, [options as String[]] ) as Number
Returns the distance (in units) between two points.
precision option takes precedence over
that 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.
const sf = cts.point(37, -122); const ny = cts.point(40, -73); geo.distance(sf, ny); => 2623.2017796533
// Optic example using the Value Processing Function op.geo.distance()
const op = require('/MarkLogic/optic');
const result=op.fromView('buildings', 'builds')
.bindAs('result',op.geo.distance(op.col('interiorPoint'),cts.point('POINT(-98.83211485551952 36.1919336424082)'),'units=miles'))
.select(['result', op.col('interiorPoint')])
.orderBy('result')
.result()
result;
// ==>
// rows representing the distance in miles between each point in the 'interiorPoint' column
// and the WKT point 'POINT(-98.83211485551952 36.1919336424082)'
// sorted by distance
// GeoSPARQL example using the Value Processing Function op.geo.distance()
const op = require('/MarkLogic/optic');
const result=op.fromView('buildings', 'builds')
.bindAs('result',op.geo.distance(op.col('interiorPoint'),cts.point('POINT(-98.83211485551952 36.1919336424082)'),'units=miles'))
.select(['result', op.col('interiorPoint')])
.orderBy('result')
.result()
result;
// ==>
// rows representing the distance in miles between each point in the 'interiorPoint' column
// and the WKT point 'POINT(-98.83211485551952 36.1919336424082)'
// sorted by distance
// SQL example using ST_Distance()
'use strict';
xdmp.sql("select ST_Distance(interiorPoint, 'POINT(-98.83211485551952 36.1919336424082)', 'units=feet') from builds order by geoid limit 20")
// ==>
// rows representing the distance in feet between the interiorPoint column
// and the WKT point 'POINT(-98.83211485551952 36.1919336424082)'
// sorting by geoid
// GeoSPARQL example using geof.distance()
const op = require('/MarkLogic/optic');
var query =
`
PREFIX my: <http://example.org/ApplicationSchema#>
PREFIX geoml: <http://marklogic.com/geospatial#>
PREFIX cts: <http://marklogic.com/cts#>
PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
SELECT *
WHERE { ?s my:hasExactGeometry ?o
BIND(geof:distance(?o, 'POINT(39.801681875000014 66.64631330892108)', 'units=km') as ?distance)
FILTER BOUND(?distance)
}
ORDER BY ?distance`
sem.sparql(query)
// ==>
// rows representing the distance in kilometers between each point in a triple's object (if exists)
// and the WKT point 'POINT(39.801681875000014 66.64631330892108)'
// sorting by distance
Stack Overflow: Get the most useful answers to questions from the MarkLogic community, or ask your own question.