如何在特定位置通知附近的用户

时间:2016-07-28 09:06:39

标签: ios swift google-maps

我一直在考虑这个,我无法弄清楚如何开发这个功能。目前,只要其他用户触发按钮,我的应用程序就会在技术上通知每个驱动程序我正在使用谷歌地图计算路线等。

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

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

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

我正在使用

  • IOS /夫特
  • Google地图
  • node.js作为后端,socket.io作为实时

1 个答案:

答案 0 :(得分:1)

算法概述

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

  1. 确定您的位置
  2. 确定其他用户的位置
  3. 计算与您的距离
  4. 这个算法很简单,但很重,也许为什么@LU_建议你在你的服务器上这样做。

    优化

    有多种方法可以优化它,例如,您可以选择随机子集,而不是检查位置并计算应用中所有数百万用户的距离,或者您可以选择更有趣的人基于某些标准。

    步骤和代码

    此算法的第一步和第二步需要您查找位置。为此,我建议您使用以下示例:

    <!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>

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

    获得所需位置和用户后,可以将此信息发送给客户端或服务器。使用此信息,您可以使用此讨论中描述的信息Calculate distance between two latitude-longitude points? (Haversine formula)计算到原始客户的距离。

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