[英]ArangoDB geo-spatial queries do not work as expected
我有一個具有 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 中的一個示例,即使這樣也不是很有幫助。 它談到了一些我認為我需要使用的分析器,但不清楚如何為 csv 數據執行此操作。
謝謝!
有兩個不同的問題。 Non-GeoJSON 地理空間索引的文檔指出:
第一個字段始終定義為緯度,第二個字段定義為經度。
因此,您應該將索引創建為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 開始的地理空間索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.