Mapreduce 马尔可夫逻辑与地理空间差异

Mapreduce 马尔可夫逻辑与地理空间差异,mapreduce,marklogic,Mapreduce,Marklogic,我想使用MarkLogic Optic将选定的项目减少到与某个点的距离 我有一张有数据的表格和一张长的表格 const geoData = op.fromView("namespace","coordinate"); geoData.where(op.le(distance(-28.13,153.4,geoData.col(lat),geoData(long)),100)) 我已经编写的距离函数使用了地理距离(cts.point(lat,long),cts.point(lat,long)),但

我想使用MarkLogic Optic将选定的项目减少到与某个点的距离

我有一张有数据的表格和一张长的表格

const geoData = op.fromView("namespace","coordinate");
geoData.where(op.le(distance(-28.13,153.4,geoData.col(lat),geoData(long)),100))
我已经编写的距离函数使用了地理距离(cts.point(lat,long),cts.point(lat,long)),但是geoData.col(“lat”)传递的对象描述了col的全名空间,而不是值

op.schemaCol('namespace', 'coordinate', 'long')
我想我需要做一个map/reduce函数,但是MarkLogic文档给出了一些非常简单的例子,这些例子几乎毫无用处

如果能帮上忙,我将不胜感激

进一步资料 我已经解决了这个问题的大部分,除了一些列有空值。数据是稀疏的,并且并非所有行都具有长lat

因此,当cts.points在where语句中运行并传递两个空值时,它会引发异常


当数据列为空时,如何合并或防止执行cts.points?我不想减少数据集,因为空值记录仍然需要返回,它们只是有一个空距离。

如果可能,最好通过将约束cts.query()传递到Where()来进行过滤

约束查询匹配索引文档,并将行集筛选到从这些文档投影的行,然后再从索引检索筛选的行

如果lat和long列都是索引文档中不同的JSON属性或XML元素,则可以使用类似于此处总结的技术来表示距离约束:

通常,最好使用map/reduce SJS函数对过滤后的结果集进行后处理,因为必须将行检索到enode才能在SJS中处理


希望这能有所帮助,

您提供的坐标
.where(cts.elementChildGeospatialQuery(fn.QName)()链接中的示例仍然存在类似问题http://www.opengis.net/kml/2.2“,”点“),fn.QName('http://www.opengis.net/kml/2.2“,”坐标“,”cts.圆(50,cts.点(-28.813153.277)),[地理坐标(“纬度”),geoData.col(“long”)])
这两个参数实际上是字符串,可能包含null。重写上述注释中的文档示例时使用列。这行不通——cts.query匹配与行关联的源文档,而不是行中列的值。关于“这两个参数实际上是字符串并且可能包含null”,我需要更多的细节来理解这个问题以及它与原始问题的关系。也许这会有助于修正和扩大这个问题。