【问题标题】:Determining if the user falls within a zone bounded by two coordinates Firebase确定用户是否落在由两个坐标 Firebase 界定的区域内
【发布时间】:2018-06-15 11:58:11
【问题描述】:

假设我有两组以百慕大岛为界的坐标:

x1y1 = [32.43059334605672,-64.90143284218118]
x2y2 = [32.233325799581394,-64.62190953125031]

我有一个具有以下结构的 Firebase 数据库:

"countries": {
    "bermuda": {
        "location": {
            "x1": 32.43059334605672,
            "x2": 32.233325799581394,
            "y1": -64.90143284218118,
            "y2": -64.62190953125031
        }
    }
}

通过设备的 GPS (x, y) 获取用户位置后,我将如何使用 javascript 构建 Firebase 查询以确定用户是否在百慕大?下面提供了一个不完整的sn-p:

const getUserLocation = function(latitude, longitude){
    return new Promise(function(resolve, reject){
        var db = firebase.database().ref("countries"); //WHAT NEXT?
        db.on('value', function(response){
            resolve(response.val());
        });        
    });
}

【问题讨论】:

    标签: javascript firebase firebase-realtime-database nosql


    【解决方案1】:

    Firebase 数据库查询只能对单个属性进行排序/过滤。

    目前的数据结构无法同时查询数据库的纬度和经度。这意味着您可能会在查询中过滤您的纬度或经度值之一,但必须在客户端代码中执行其他操作。例如

        var db = firebase.database().ref("countries");
        db.orderByChild("x1").startAt(x_coordinage).on('value', function(response){
            // TODO: loop over response.forEach and filter out for y1, x2, and y2
        }); 
    

    但正如您可能想象的那样,这意味着您正在加载大量您不需要的数据。

    有一个名为GeoFire 的附加库,它将一对纬度+经度值编码成一个神奇的单一值,称为Geohash。有了它,您可以查询中心点周围范围内的项目。这仍然不是您想要的,但由于 GeoFire 是开源的,您可以对其进行修改以满足您的确切需求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-08
      • 2022-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多