将用户的位置存储在数据库中并为他找到最近的用户
Posted
技术标签:
【中文标题】将用户的位置存储在数据库中并为他找到最近的用户【英文标题】:Storing user's location in DB and find the nearest users for him 【发布时间】:2013-02-07 05:46:24 【问题描述】:我正在尝试实现一个用户系统,系统要求之一是找到您附近的其他用户。
位置将按国家/地区过滤,而不是按城市过滤,因此用户可以找到来自同一国家但来自不同城市的其他用户。
问题是如何计算城市之间的距离?它不一定要 100% 准确,但它必须优先考虑更接近的用户。
Google 地理位置 API 会满足这些要求吗?有哪些替代方案?
知道如何在不进行大量计算的情况下实现它吗?
我想问用户国家和城市只是为了写在他的个人资料中,并从它的 IP 中获取它的地理位置,或者导入一个包含所有城市及其地理位置的数据库。
请指导我。
【问题讨论】:
【参考方案1】:您可以使用Haversine 公式在数据库中搜索最近的用户。
$stmt = $dbh->prepare("SELECT name, lat, lng, ( 3959 * acos( cos( radians(?) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(?) ) + sin( radians(?) ) * sin( radians( lat ) ) ) ) AS distance FROM mytable HAVING distance < ? ORDER BY distance LIMIT 0 , 20");
// Assign parameters
$stmt->bindParam(1,$center_lat);//lat coordinate of user
$stmt->bindParam(2,$center_lng);//lng coordinate of user
$stmt->bindParam(3,$center_lat);
$stmt->bindParam(4,$radius);//Radius in miles
可以在Geonames找到城市数据库
【讨论】:
是否有公式可以搜索数据库中最近的 n 个用户?不仅是最近的用户? @YoniHassinLIMIT 0 , 20
在上述查询中将搜索限制为最近的 20 个用户以上是关于将用户的位置存储在数据库中并为他找到最近的用户的主要内容,如果未能解决你的问题,请参考以下文章
返回与用户位置(地理位置)最近的 3 个位置并为他们列出这些位置