我有一个包含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))
)
答案 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")