目錄
回复内容:
首頁 後端開發 php教程 附近的人怎么计算出来的?

附近的人怎么计算出来的?

Jun 17, 2016 am 08:30 AM
500

比如: 饿了么搜索附近的餐厅,qq,微信附件的人,后端怎么搜索出来的呢
数据库里面有1w条餐厅的坐标记录,当用户打开附件的餐厅的时候,搜集到用户的坐标,比如针对某一个店的话,两点的坐标,计算球面距离是好计算的,问题是,有1w条店,怎么找出来附件500米,1000米 ,2000米....

回复内容:

实现方案有很多:
1. mysql的空间数据库:
Mysql gis 空间数据库功能详解学习
2. solr空间索引天然支持按经纬度索引,按位置查询,按距离排序;
tech.meituan.com/solr-s
3. redis新版本也支持geohash了;
Redis GEO 特性简介 一般都采用Geohash算法,用一个字符串表示二维坐标,并且两个点越接近,这两个Geohash的字符串前缀相同的位数就越多(这句话可能不太严谨),这样查询的效率就会高很多。
Geohash 一般都是Geohash算法,不过这个算法的问题是可能很近的但是分在不同格子里就捞不到了,会选取周围8个格子来计算,另外就是这个算法不好按照范围搜,比如附近xx米。

第二种算法是附近xx米是一个圆,计算出圆的外接正方形的经纬度范围,就是当前位置为中心边长是xx*2的一个正方形的经纬度范围,然后在数据库里通过大于小于条件来捞落入正方形内的POI(店铺),然后,要严谨的话把四个角边缘的数据剔除(通过计算距离就可以,这时候数据量很少,不需要全表扫描计算,就很快了),精度要求不高的话,不需要剔除直接就能用了,这种做法只要把数据库中经度和纬度两个字段做索引,应付一般数据量足够了,做法也简单直白,题主只有1W条数据,这种方法妥妥的。

第三种就是利用数据库的空间索引来做,貌似MySQL本身就支持的,用R Tree实现的,效率更高。 1、把经纬度换成整数。
2、不算圆型算方型,避开乘方根号运算,直接 between 经度 and between 纬度。
3、确定了这个方内的人后,再进行乘方(但不开根号)排序就行。 查找 1000 米以内的人,数据库设计和查询如何实现这个功能? - 数据库设计 快使用开源工具,横横哈嘿,快打开源代码,嘿嘿哈横。 用mongodb,自带这类算法 大家的坐标保存起来,然后把你的坐标与大家的坐标求距离就行了。 geohash | rtree 方案:geohash + redis set

时间复杂度:O(1)

空间复杂度:O(n),挺省的,因为redis的key很短,参考下表:
附近的人怎么计算出来的?
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1249
24
500internal server error什麼意思 500internal server error什麼意思 Feb 21, 2023 pm 03:39 PM

500internal server error的意思是HTTP 500內部伺服器錯誤,表示伺服器遇到意外情況,導致其無法履行請求,但它無法說明具體錯誤或發生錯誤的根本原因;當發生錯誤時,造訪的網站會顯示發生錯誤。

敦促英國人在家檢查是否有稀有的 50 便士硬幣,可能價值 2,500 英鎊 敦促英國人在家檢查是否有稀有的 50 便士硬幣,可能價值 2,500 英鎊 Oct 28, 2024 pm 04:20 PM

據一位專家稱,這枚 2011 年的作品是為慶祝 2012 年倫敦奧運會而鑄造的

以太坊 (ETH) 價格恢復至 2,320 美元上方,但仍難以加快步伐 以太坊 (ETH) 價格恢復至 2,320 美元上方,但仍難以加快步伐 Sep 10, 2024 pm 03:20 PM

以太幣價格在 2,250 美元上方開始復甦浪潮。 ETH 能夠清除 2,280 美元的阻力區,進入積極區域,但與比特幣相比,勢頭較弱。

比特幣 (BTC) 價格分析:BTC 開始大幅上漲,目標為 6 萬美元大關 比特幣 (BTC) 價格分析:BTC 開始大幅上漲,目標為 6 萬美元大關 Sep 12, 2024 pm 06:35 PM

比特幣已經開始大幅上漲,突破了 57,500 美元的阻力位,現在顯示出可能達到 60,000 美元大關的良好跡象。

BetMGM 密西根州獎金代碼 MLIVEMGM:獲得 1,500 美元的首次投注優惠 BetMGM 密西根州獎金代碼 MLIVEMGM:獲得 1,500 美元的首次投注優惠 Nov 18, 2024 am 03:36 AM

新玩家可以使用促銷代碼 MLIVEMGM 領取 BetMGM 歡迎獎金,並獲得高達 1,500 美元的獎金投注返還。

英國人敦促檢查他們的 50 便士硬幣,因為稀有版本可能價值 2500 英鎊 英國人敦促檢查他們的 50 便士硬幣,因為稀有版本可能價值 2500 英鎊 Oct 28, 2024 pm 04:24 PM

2011 年硬幣是為慶祝 2012 年倫敦奧運會而鑄造的,被稱為“水上運動”設計,並帶有游泳運動員的形象

Rexas Finance (RXS):Solana (SOL) 和以太坊 (ETH) 的潛在競爭對手 Rexas Finance (RXS):Solana (SOL) 和以太坊 (ETH) 的潛在競爭對手 Nov 04, 2024 pm 06:44 PM

在這場永無止境的區塊鏈技術競賽中,有兩項技術脫穎而出並吸引了投資者的注意:Solana (SOL) 和以太坊 (ETH)。

Solana 價格可能達到 4,500 美元 Solana 價格可能達到 4,500 美元 Oct 22, 2024 am 06:42 AM

SOL 在其周線圖上形成了杯柄形態,這表明 Solana 價格可能飆升 2,600%,升至 4,500 美元。

See all articles