ArangoDB地理空间查询未按预期运行

balp4ylt  于 2022-12-09  发布在  Go
关注(0)|答案(1)|浏览(140)

我有一个csv格式的玩具数据集,有12行,如下所示:

我尝试在arangodb中加载这些数据,对其进行空间索引,然后使用arangodb空间查询获取数据。

arangoimport --file "cricketers.csv" --type csv --create-collection --create-collection-type document --translate "id=_key" --collection "players"

db.players.ensureIndex({type: 'geo', fields: ['lng', 'lat'], geoJson: false})

之后,我尝试通过向数据库发送空间查询来获取一些数据,如下所示:

db._query({'query': 'FOR node IN players FILTER GEO_CONTAINS(GEO_POLYGON([[[-70,-40],[-70,60],[180,60],[180,-40],[-70,-40]]]), [node.lng, node.lat]) RETURN node', "options" : {fullCount:true}}).getExtra();

上述示例查询在理想情况下应该提取所有数据点,因为它指定了一个跨越所有数据点的geo_polygon。但是,查询没有返回任何数据点。以下是查询返回的结果(请参阅完整计数):

{   "warnings" : [ ],   "stats" : {     "writesExecuted" : 0,     "writesIgnored" : ,     scannedFull" : 12,     "scannedIndex" : 0,     "filtered" : 12,     "httpRequests" : 0,     "fullCount" : 0,      "executionTime" : 0.0015139159995669615,     "peakMemoryUsage" :     }

如果我执行相同的查询而不使用空间查询,即使用如下的简单过滤器:

db._query({'query': 'for node in players filter -40 <= node.lat <= 60 and -70 <= node.lng <= 180 return node', 'options': {fullCount: true}}).getExtra();

这是我得到的,也是意料之中的:

{   "warnings" : [ ],   "stats" : { "writesExecuted" : 0,     "writesIgnored" : 0,     scannedFull" : 12,     "scannedIndex" : 0,     "filtered" : 0,     "httpRequests" : 0,     fullCount" : 12,     "executionTime" : 0.0005607399998552864,     "peakMemoryUsage" : 0    }

请帮助我了解我做错了什么?为什么空间查询不起作用?我已经尝试改变向空间数据提取和索引查询发送"lat"和"lng"的顺序,但没有效果。
ArangoDB文档只讨论了JSON中的一个示例,即使这样也没有太大帮助。它讨论了一些关于分析器的东西,我认为这是我需要使用的东西,但不清楚如何对csv数据进行分析。
谢谢你,谢谢你

tsm1rwdh

tsm1rwdh1#

这里有两个不同的问题。Non-GeoJSON Geo空间索引的文档说明:
第一个字段始终定义为纬度,第二个字段定义为经度。
因此,您应该将索引创建为db.players.ensureIndex({type: 'geo', fields: ['lat', 'lng'], geoJson: false})
第二个更重要的问题是使用的多边形。[多边形文档}(https://www.arangodb.com/docs/stable/indexing-geo.html#polygon)提到了以下限制:
线性环定义了球体上的两个区域。ArangoDB始终将面积较小的区域解释为环的内部。这引入了一个实际限制,即任何面的外环都不能包含超过地球表面一半的面积
不幸的是,您选择的多边形也是如此,因此它 * 没有 * 覆盖您想要覆盖的区域。请注意,Web UI中的多边形可视化实际上显示了您想要的多边形。这是一个已知问题,我们目前正在努力解决它。
只有在使用ArangoSearch时,“分析器”才有意义,ArangoSearch从v3.8开始也支持geo spatial indexes

相关问题