我需要知道设备是否处于 NodeJS 后端的地理围栏中

I need to know whether device is in geofencing or not in backend of NodeJS

我正在为 android 和 iOS 的超级应用创建 NodeJS 后端。用户的位置将从 phone 中获取,坐标即纬度和经度将被发送到服务器。有2组用户。让我们说 drivers 和乘客。一旦乘客按下搜索 driver,我需要向乘客半径 5 公里内的所有 driver 发送通知。任何想法如何实现这个逻辑。??。 在前端,将在乘客周围创建地理围栏。我无法弄清楚的是如何在服务器端知道 drivers 是否在那些地理围栏中。 前端也是由我使用 React Native 开发的,因此也欢迎从前端的角度提出任何建议。谢谢

MongoDB支持地理空间查询,可以查询指定地理范围内的文档。

假设我们有 drivers 集合如下

db.drivers.insertMany( [
   {
      name:"Patrick Konrab",
      location: { type: "Point", coordinates: [ -73.97, 40.77 ] },
   
   },
   {
      name: "James Webb",
      location: { type: "Point", coordinates: [ -73.9928, 40.7193 ] },
      category: "Parks"
   },
   {
      name: "Kyle Grill",
      location: { type: "Point", coordinates: [ -73.9375, 40.8303 ] },
   }
] )

以下操作在位置字段上创建一个 2dsphere 索引: db.drivers.createIndex( { location: "2dsphere" } )

上面的 drivers 集合有一个 2dsphere 索引。以下查询使用 $near 运算符来 return 距指定 GeoJSON 点至少 1000 meters 且最多 5000 meters 的文档,按从最近到最远的顺序排序:

// Passenger coordinates should be returned user device
//https://github.com/react-native-geolocation/react-native-geolocation

const passengerCoordinate = [ -73.9667, 40.78 ]

db.drivers.find(
   {
     location:
       { $near:
          {
            $geometry: { type: "Point",  coordinates: passengerCoordinate },
            $minDistance: 1000,
            $maxDistance: 5000
          }
       }
   }
)