如何在某个位置通知附近的用户
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) 中描述的信息来计算到原始客户的距离。
根据原始客户的距离和位置,您可以决定要做什么。
【讨论】:
以上是关于如何在某个位置通知附近的用户的主要内容,如果未能解决你的问题,请参考以下文章