首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ArangoDB地理空间查询不像预期的那样工作

ArangoDB地理空间查询不像预期的那样工作
EN

Stack Overflow用户
提问于 2021-12-20 21:47:28
回答 1查看 63关注 0票数 0

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

我试图将这些数据加载到arangodb中,在空间上对其进行索引,然后使用arangodb空间查询获取数据。我在db中加载数据并对其进行索引的步骤如下:

代码语言:javascript
复制
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发送空间查询来获取一些数据,如下所示:

代码语言:javascript
复制
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。但是,查询不返回任何数据点。这是查询返回的内容(请参阅完整计数):

代码语言:javascript
复制
{   "warnings" : [ ],   "stats" : {     "writesExecuted" : 0,     "writesIgnored" : ,     scannedFull" : 12,     "scannedIndex" : 0,     "filtered" : 12,     "httpRequests" : 0,     "fullCount" : 0,      "executionTime" : 0.0015139159995669615,     "peakMemoryUsage" :     }

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

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

这就是我所得到的,正如我所期望的:

代码语言:javascript
复制
{   "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数据这样做。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-12-21 09:14:19

有两个不同的问题。非GeoJSON地质空间索引的文档声明:

第一个字段总是定义为纬度,第二个字段定义为经度。

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

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

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

不幸的是,这对于你选择的多边形是正确的,所以这就是为什么它没有覆盖到预定的区域。不过,请注意,web中的多边形可视化实际上显示了您想要的多边形。这是一个众所周知的问题,我们目前正在努力解决这个问题。

只有当您使用ArangoSearch时,“分析器”才是相关的,它自v3.8以来也支持地理空间索引

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70428411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档