附近的人怎么计算出来的?
比如: 饿了么搜索附近的餐厅,qq,微信附件的人,后端怎么搜索出来的呢
数据库里面有1w条餐厅的坐标记录,当用户打开附件的餐厅的时候,搜集到用户的坐标,比如针对某一个店的话,两点的坐标,计算球面距离是好计算的,问题是,有1w条店,怎么找出来附件500米,1000米 ,2000米....
回复内容:
实现方案有很多:1. mysql的空间数据库:
Mysql gis 空间数据库功能详解学习;
2. solr空间索引天然支持按经纬度索引,按位置查询,按距离排序;
http://tech.meituan.com/solr-spatial-search.html
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很短,参考下表:


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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

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