node.js - 我们如何计算两个坐标之间的距离。阿兰戈数据库

标签 node.js distance arangodb aql

我有一个用户表,其中包含每个用户的纬度和经度属性。所以我需要在 AQL 查询中计算两个用户之间的距离。

我在 Orientdb 中使用以下查询执行了相同的操作。

var laltitude = CURRENT_USER_laltitude;
var longitude = CURRENT_USER_longitude;
var query = "select distance(latitude, longitude,"+laltitude+","+longitude+") as distance from users";

最佳答案

首先,创建一个js文件distance.js(或者任何你想命名的名称)并输入如下代码。

/* distance.js */
'use strict';

function gdistance(latitude1, longitude1, latitude2, longitude2, radius) {
    if (!latitude1 || !longitude1 || !latitude2 || !longitude2) { 
        return null; 
    };

    var lat1 = Number(latitude1), lon1 = Number(longitude1);
    var lat2 = Number(latitude2), lon2 = Number(longitude2);

    radius = (radius === undefined) ? 6371e3 : Number(radius);

    var R = radius;
    var φ1 = (lat1 * Math.PI / 180), λ1 = (lon1 * Math.PI / 180);
    var φ2 = (lat2 * Math.PI / 180), λ2 = (lon2 * Math.PI / 180);
    var Δφ = φ2 - φ1;
    var Δλ = λ2 - λ1;

    var a = Math.sin(Δφ/2) * Math.sin(Δφ/2)
          + Math.cos(φ1) * Math.cos(φ2)
          * Math.sin(Δλ/2) * Math.sin(Δλ/2);
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    var d = R * c;     // Meters
    var d2 = d / 1000; // Meters to KM
    return d2; 
}

module.exports = gdistance;

现在使用 arangosh 打开 Arango 控制台。这将以 _system 打开默认数据库。因此,如果您像我一样有除此数据库之外的其他数据库,请使用 db._useDatabase("myDatabase")更改数据库的命令。

现在编写以下命令将自定义添加到您所需的数据库。

版本2.8

db._useDatabase("myDatabase");
var aqlfunctions = require("org/arangodb/aql/functions");
var f = require("/path/to/file/distance.js");
aqlfunctions.register("geo::gdistance", f, true)

3.0+版本

db._useDatabase("myDatabase");
var aqlfunctions = require("@arangodb/aql/functions");
var f = require("/path/to/distance.js");

i.e.
var f = require("/home/ubuntu/distance.js");
var f = require("distance.js");

# If you want to remove this group's UDFs (User defined functions)
# aqlfunctions.unregisterGroup("geo");
aqlfunctions.register("geo::gdistance", f, true);

现在在您的 AQL 查询中使用如下。

LET distance = geo::gdistance(attrbute_name.latitude, attrbute_name.longitude, @your_latitude, @your_longitude)

更多引用here .

关于node.js - 我们如何计算两个坐标之间的距离。阿兰戈数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37522538/

相关文章:

开放层 : How to calculate distance between two points?

javascript - 如何用JavaScript进行简单的计算来知道行程时间?

arangodb - 如何使用 ArangoJs 在 ArangoDb 图中存储文档?

node.js - Arangodb 中的交易

javascript - 如何导出node.js中请求生成的变量

javascript - Node Mocha Chai Async - 即使它应该失败,一切都会通过

sql - 计算一列中不同条目之间的距离

java - ArangoDB Spring Data 2,java.lang.Object/无效的映射类型

html - React JS 在带有reactstrap的页面中多次使用bootstrap轮播

node.js - 在后端 Node.js 上安排大量任务