如何在某个位置通知附近的用户

Posted

技术标签:

【中文标题】如何在某个位置通知附近的用户【英文标题】:How to notify nearby users within a certain location 【发布时间】:2016-07-28 09:06:39 【问题描述】:

我一直在考虑这个问题,但我无法弄清楚如何开发此功能。目前,每当另一个用户触发按钮时,我的应用程序将在技术上通知每个驱动程序。我正在使用谷歌地图来计算路线等。

我正在构建的功能类似于 Uber 通知系统,只要用户点击“设置取货地点”,它就会通知用户位置附近的一堆司机。

但是现在的问题是,它会通知所有在线的司机,这不是我想要的。我只想通知用户位置附近的司机。

我将如何实现这一目标?我需要什么样的变量来完成这个

我正在使用

ios/Swift 谷歌地图 node.js 作为后端,socket.io 作为实时

【问题讨论】:

这是后端应该处理的事情,您只需从应用程序发送您的位置,后端检查其他位置并选择范围内的任何位置 【参考方案1】:

算法概述

为了通知您附近的所有用户,我建议您使用以下算法:

    确定您的位置 确定其他用户的位置 计算他们与您的距离

这个算法很简单,但是很重,这也许是@LU_ 建议你在你的服务器上做这个的原因。

优化

有多种技巧可以对其进行优化,例如,您可以选择一个随机子集,而不是检查应用中所有数百万用户的位置和计算距离,或者您可以挑选更有趣的人基于一些标准。

步骤和代码

此算法的第一步和第二步要求您找到位置。对于这种效果,我建议您使用以下示例:

https://developers.google.com/maps/documentation/javascript/tutorials/geolocation

<!DOCTYPE html>
<html>

<head>
  <title>Geolocation</title>
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
  <meta charset="utf-8">
  <style>
    html,
    body 
      height: 100%;
      margin: 0;
      padding: 0;
    
    #map 
      height: 100%;
    
  </style>
</head>

<body>
  <div id="map"></div>
  <script>
    // Note: This example requires that you consent to location sharing when
     // prompted by your browser. If you see the error "The Geolocation service
     // failed.", it means you probably did not give permission for the browser to
     // locate you.

    function initMap() 
      var map = new google.maps.Map(document.getElementById('map'), 
        center: 
          lat: -34.397,
          lng: 150.644
        ,
        zoom: 6
      );
      var infoWindow = new google.maps.InfoWindow(
        map: map
      );

      // Try HTML5 geolocation.
      if (navigator.geolocation) 
        navigator.geolocation.getCurrentPosition(function(position) 
          var pos = 
            lat: position.coords.latitude,
            lng: position.coords.longitude
          ;

          infoWindow.setPosition(pos);
          infoWindow.setContent('Location found.');
          map.setCenter(pos);
        , function() 
          handleLocationError(true, infoWindow, map.getCenter());
        );
       else 
        // Browser doesn't support Geolocation
        handleLocationError(false, infoWindow, map.getCenter());
      
    

    function handleLocationError(browserHasGeolocation, infoWindow, pos) 
      infoWindow.setPosition(pos);
      infoWindow.setContent(browserHasGeolocation ?
        'Error: The Geolocation service failed.' :
        'Error: Your browser doesn\'t support geolocation.');
    
  </script>
  <script async defer src="https://maps.googleapis.com/maps/api/js?callback=initMap">
  </script>
</body>

</html>

请注意,您需要启用浏览器以提供其位置或网站/服务(我相信 *** 可能会阻止它,但您可以查看原始页面上的原始示例)。

一旦您获得了您和您想要的用户的位置,您就可以将此信息发送到客户端或服务器。有了这些信息,您就可以使用本讨论Calculate distance between two latitude-longitude points? (Haversine formula) 中描述的信息来计算到原始客户的距离。

根据原始客户的距离和位置,您可以决定要做什么。

【讨论】:

以上是关于如何在某个位置通知附近的用户的主要内容,如果未能解决你的问题,请参考以下文章

使用 MobileFirst 的基于位置的推送通知

如何在 iOS 中根据位置设置推送通知?

如何从 Google Maps android 中的当前位置不断检测附近的标记位置?

Mongodb:如何找出某个位置附近的所有文件?

将本地共享地理位置与其他设备进行反应

如何在用户位置附近显示兽医