【问题标题】:ArangoDB geo-spatial queries do not work as expectedArangoDB 地理空间查询无法按预期工作
【发布时间】:2022-01-22 11:01:44
【问题描述】:

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

我正在尝试将这些数据加载到 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 格式的示例,即使这样也不是很有帮助。它谈到了一些关于 analyzers 的内容,我认为这是我需要使用的东西,但不清楚如何为 csv 数据这样做。

谢谢!

【问题讨论】:

    标签: geospatial arangodb


    【解决方案1】:

    有两个不同的问题。 Non-GeoJSON Geo spatial indexes 的文档指出:

    第一个字段始终定义为纬度,第二个字段定义为经度。

    所以您应该将索引创建为db.players.ensureIndex({type: 'geo', fields: ['lat', 'lng'], geoJson: false})

    第二个更重要的问题是您使用的多边形。 [Polygon 文档}(https://www.arangodb.com/docs/stable/indexing-geo.html#polygon) 提到了以下限制:

    线性环定义球体上的两个区域。 ArangoDB 将始终将较小区域的区域解释为环的内部。这引入了一个实际限制,即任何多边形都不能有一个包围地球表面一半以上的外环

    不幸的是,这对于您选择的多边形是正确的,这就是它没有覆盖预期区域的原因。但请注意,Web UI 中的多边形可视化实际上按照您的意图显示了多边形。这是一个已知问题,我们目前正在努力解决。

    “分析器”仅在您使用 ArangoSearch 时才相关,自 v3.8 起也支持 geo spatial indexes

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-22
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      • 2018-10-13
      相关资源
      最近更新 更多