Arangodb:按时间戳和坐标过滤的自行车
我的数据结构如下: 红色顶点是位置 青色顶点是自行车 粉红色顶点是用户的Arangodb:按时间戳和坐标过滤的自行车,arangodb,Arangodb,我的数据结构如下: 红色顶点是位置 青色顶点是自行车 粉红色顶点是用户的 GRAPH TD ((BIKE)) -- LOCATED -->((POSITION)) 其中自行车是一个与多个位置关联的自行车 每个位置都有纬度和经度属性以及时间戳 我想找到所有的自行车谁的位置是近40公里的坐标对,不超过48小时 到目前为止,我正在做的是: FOR pos IN NEAR(positions, 45.5063575, 9.24157653499384, 40, "distance
GRAPH TD
((BIKE)) -- LOCATED -->((POSITION))
其中自行车是一个与多个位置关联的自行车
每个位置都有纬度和经度属性以及时间戳
我想找到所有的自行车谁的位置是近40公里的坐标对,不超过48小时
到目前为止,我正在做的是:
FOR pos IN NEAR(positions, 45.5063575, 9.24157653499384, 40, "distance")
FILTER pos.timestamp >= DATE_SUBTRACT(DATE_NOW(), "PT48H")
SORT pos.timestamp DESC, pos.distance DESC
RETURN {'position': pos,'bike':(FOR bike IN OUTBOUND pos located RETURN bike)}
但是这个查询返回了他们的自行车的所有位置,我想要最后一个位置(时间上最近的位置)和所属的自行车
感谢您的帮助您需要这样的帮助:
FOR pos IN WITHIN(positions, 45.5063575, 9.24157653499384, 40, "distance")
FILTER pos.timestamp >= DATE_SUBTRACT(DATE_NOW(), "PT48H")
SORT pos.timestamp DESC
FOR b IN OUTBOUND pos located
COLLECT bike = b INTO bike_positions
RETURN {'bike': bike, 'position': bike_positions[0].pos}
注意:您应该在中使用,而不是在
附近使用
更新@Loki评论后的:
FOR pos IN positions
FILTER pos.timestamp >= DATE_SUBTRACT(DATE_NOW(), "PT200H") AND
GEO_DISTANCE([45.47942614827045, 9.24157653499384], pos.coordinates)
SORT pos.timestamp DESC
FOR b IN OUTBOUND pos located
COLLECT bike = b INTO bike_positions
RETURN {'bike': bike, 'position': bike_positions[0].pos}
由于inthein已弃用(),我尝试使用DISTANCE()重写查询对于pos IN positions FILTER pos.timestamp>=DATE_SUBTRACT(DATE_NOW(),“PT200H”)让d=DISTANCE(pos.coords.latitude,pos.coords.longitude,45.47942614827045,9.24157653499384)以新的表示法过滤d,可能使用GEO_距离和GEO索引更好。我将用这个例子更新我的答案