Marklogic geojson.geospatialQuery返回所有记录

时间:2019-11-19 23:48:36

标签: geospatial geojson marklogic

我有一个包含GeoJson元素的Mark Logic Collection

instance{
    ...    
    geoJson:{
      "type": "Feature", 
      "geometry": {
      "type": "Point", 
      "coordinates": 
                       [
                        -35.348735749, 
                        149.157085419
                      ]

    }
  ...
}

我想找到半径在另一个点的那些/我已经按照GeoSpatial Searching的文档进行操作并利用了geoJSON库

const geojson = require('/MarkLogic/geospatial/geojson')

并使用了geospatialQuery和cts.circle,但即使这应排除上述记录,也将其包含在结果集中。它们相距821km(510m),半径设置为10m。实际上,以下内容似乎并没有减少结果集。

 var uris =  cts.uris("/Coll*",["limit=10"],                        
 geojson.geospatialQuery(
      cts.circle(10,cts.point(-28.7885974,153.16786679999996))
    ,null,1.0)
           ).toArray()
  

我已经发现了问题...此地理空间查询在cts.search中完美运行,但在cts.uris中却无法正常运行。这是因为出于某种原因,cts.uris中的$ query参数未过滤吗?这是MarkLogic在cts.uri - $query中记录的...我确实想知道为什么吗?但更重要的是,如何将其更改为已过滤?

以下有效,并且确实返回该点半径内的文档

 var uris =  cts.search(                        
 geojson.geospatialQuery(
      cts.circle(10,cts.point(-28.7885974,153.16786679999996))
    )

2 个答案:

答案 0 :(得分:1)

当您收到大量需要过滤的假阳性结果时,首先要做的是验证是否已创建必要的后备索引并可用。

如果您序列化查询并检查生成的查询条件:

return Container(
color: Colors.black,
child: GridView.count(
                    crossAxisCount: 4,
                    children: snapshot.data.documents
                        .map((DocumentSnapshot document) {
                      return OvalPic(
                          document['photo'], document['couleur']);
                    }).toList()));

因此,当使用cts.pathGeospatialQuery( ["geometry[type='Point']/array-node('coordinates')", "geometry[type='MultiPoint']/array-node('coordinates')/array-node('coordinates')"], cts.circle("@10 -28.788597,153.16787"), ["coordinate-system=wgs84","type=long-lat-point"], 1) 查询执行geojson.geospatialQuery时,应创建以下索引并可用。

地理空间路径索引(点,JSON)

  • 路径表达式:cts.circle
  • 坐标系:geometry[type = 'Point']/array-node('coordinates')
  • 点格式:wgs84

地理空间路径索引(MultiPoint,JSON)

  • 路径表达式:long-lat-point
  • 坐标系:geometry[type = 'MultiPoint']/array-node('coordinates')/array-node('coordinates')
  • 点格式:wgs84

您可以使用cts.plan()来了解正在使用的索引以及选择要筛选的片段的数量。

long-lat-point

答案 1 :(得分:0)

请检查您的数据。

"coordinates": [
                   [
                    "-35.348735749", 
                    "149.157085419"
                  ]
                ]

这显示了一个数组中的一个数组。对于GeoJson点,这没有意义-并且与配置//geometry[type = "Point"]/array-node("coordinates")

上的xPath表达式不匹配