国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Geo技術助力,讓風險定位更精準

數據庫 MySQL
要判斷用戶地址與中介地址是否相同,或者相近。那落到實際功能開發,其實就是計算兩個地址之間的距離,由距離長短決定是否相同,或相近。

1 業務背景

2 技術選型

  • 2.1 MySQL
  • 2.2 Redis
  • 2.3 ElasticSearch

3 Coding

3.1 GEOADD

3.2 GEOPOS

3.3 GEODIST

3.4 GEORADIUS

4 原理解析

4.1 存儲結構

4.2 GeoHash編碼

4.3 編碼原理

4.4 總結

5 參考資料

1.業務背景

某天在工位上的我,正在敲著代碼,聽著歌,突然就被打斷了:

小G:快來看看!我們的訂單都被詐騙了!!!

我:What?什么情況?

小G:有些黑中介引導我們用戶下單租賃,把訂單機器寄到他們那里,拿到機器后再補貼給用戶一筆錢,然后這批機器我們就拿不回來啦!

我:emmmm...那這些訂單有沒有什么特征呢?

小G:噢也有,他們的下單的地址都是黑中介那邊指定的某地址,我們也是通過這部分集中下單的地址數據進行分析得知的。

我:噢那我有個想法,如果用戶的下單地址與黑中介指定下單地址相同,或者在其附近,是否就可以認為這個訂單有詐騙風險?

小G:可以!

于是,新的需求又開始了。

2.技術選型

要判斷用戶地址與中介地址是否相同,或者相近。那落到實際功能開發,其實就是計算兩個地址之間的距離,由距離長短決定是否相同,或相近。

那地址之間距離計算又如何實現呢?那當然是站在巨人的肩膀上開發啦,下面就來介紹下開發中常用的GEO(Geolocation)工具,以及他們之間的區別。

2.1 MySQL

2.1.1 優

  • 兼容性:最常用的關系型數據之一。其與項目兼容度高,與其他業務數據(如用戶表、訂單表)天然集成,無需跨數據源查詢,通用性強。
  • 持久性:數據持久化存儲,適合長期保存地址數據。

2.1.2 劣

  • 性能:大數據量下(如百萬級以上的地址經緯度)的復雜查詢(地址空間計算)性能較低。

2.2 Redis

2.2.1 優

性能:基于內存存儲,查詢/數據操作延時極低,適合實時查詢/計算操作。GEO內部數據存儲結構為Sorted Set,支持高效的范圍查詢和排序。

擴展性:支持集群模式,適合分布式場景。

2.2.2 劣

  • 存儲:內存容量有限,不適合長期存儲海量數據。
  • 功能:不支持高級地理計算(如面積計算、地理圍欄計算)。

2.3 ElasticSearch

2.3.1 優

  • 性能:分布式架構,適合海量數據和高并發場景。內部倒排索引和分片機制,優化查詢性能和保證容錯。
  • 內置地址空間數據類型,支持復雜地址查詢(地理圍欄、距離排序、多邊形查詢等)

2.3.2 劣

  • 復雜度:需要維護ES集群,開發學習成本較高
  • 存儲:內存和磁盤占用較高,不適合小規模場景

3.Coding

經過上面的分析,結合需求的場景,首先保證性能,次要無須重量級的框架,開發成本低,同時還要能夠滿足地理計算的基本要求。于是,果斷選擇 Redis!

3.1 GEOADD

用于添加一個或多個地理位置信息(經緯度)

例子:添加一個key為gk,包含 天安門,故宮 的經緯度

圖片圖片

3.2 GEOPOS

用于查詢某一個key中的指定地址經緯度

例子:查詢gk中 天安門 和 故宮 的經緯度

圖片圖片

3.3 GEODIST

用于查詢同一個key兩個地址之間的距離

例子:查看gk中 天安門 和 故宮的距離(m)

圖片圖片

3.4 GEORADIUS

用于查詢同一個key中指定地址范圍半徑內的地址

例子:查詢gk中以 天安門 為中心,半徑1000km的地址

圖片圖片

Java代碼如下

@Resource
    private Jodis jodis;

    @Test
    public void testGeo() {
        String key = "gk";
        String member1 = "TianAnMen";
        String member2 = "GuGong";
        
        // GEOADD
        jodis.geoadd(key, 116.3974723219871521, 39.90882345602657466, member1);
        jodis.geoadd(key, 116.39738649129867554, 39.91357605820034138, member2);
        
        // GEOPOS
        List<GeoCoordinate> geopos = jodis.geopos(key, member1, member2);
        for (GeoCoordinate geopo : geopos) {
            System.out.println(JSONUtil.toJsonStr(geopo));
        }
        
        // GEODIST
        Double geodist = jodis.geodist(key, member1, member2);
        System.out.println(geodist);
        
        // GEORADIUS
        List<GeoRadiusResponse> georadius = jodis.georadius(key, 116.39738649129867554, 39.91357605820034138, 1000, GeoUnit.KM);
        for (GeoRadiusResponse georadiu : georadius) {
            System.out.println(JSONUtil.toJsonStr(georadiu));
        }
    }

4.原理解析

從上面的示例來看,在使用的角度來說還是簡潔易懂的。所謂知其然,知其所以然,所以接下來我們再深究下,Redis的GEO是如何實現兩個地址的經緯度之間的距離計算的呢?

4.1 存儲結構

Redis的GEO底層實現采用的是Sorted Set有序集合結構,其中key存儲元素信息,value存儲經緯度(即權重)。而經緯度包含經度和緯度兩個信息,因此需要使用GeoHash編碼的方式將經緯度轉化成float類型進行存儲。

4.2 GeoHash編碼

上面提到了GeoHash編碼,其實是分別對經度和緯度進行編碼,然后再組合成一個新的編碼。這個方法叫:二分區間編碼

4.3 編碼原理

對于一個經緯度來說,經度的范圍是[-180, 180],緯度的的范圍是[-90, 90]。而GeoHash編碼針對兩個范圍進行N次(N可自定義)的二分區編碼,將其轉化成一個N位的二進制值。

以經度為例,在進行第一次二分區時,將經度范圍[-180, 180]進行二分,得到兩個區間 [-180, 0) 和 [0, 180]。然后判斷當前經度落在哪個區間,若落在左區間,則記錄為0;若落在右區間,則記錄為1。如此反復,每次都會得到一個二進制值。

例子:將經度(116.37)進行5次二分區后得到編碼值:11010(如圖下)

圖片圖片

再將緯度(39.86)進行5次二分區后得到編碼值:10111(如圖下)

圖片圖片

現在得到經緯度編碼之后的值,需要再將其組合成一個編碼。同時遵循組合規則(如圖下)

  1. 從左到右按順序,將經度編碼值逐個放入偶數位
  2. 從左到右按順序,將緯度編碼值逐個放入奇數位

圖片圖片

最終兩個編碼值,轉化成了一個編碼值(1110011101),同時保存到Sorted Set的value中。至此,編碼完成。

4.4 總結

了解了GeoHash的編碼原理,那這樣編碼有什么用呢?下面來解答這個問題。

例子:我們把 經度區間[-180, 180],緯度區間[-90, 90] 都做一次二分區編碼,那么就會得到4個分區(如下圖)

圖片

經過一次二分區編碼后,本來是二維信息的經緯度,就簡化成了一維信息的編碼。換句話說,對于整個地理空間來說,所有的位置都能經過編碼變成平面上的一個點,多個點便能組成一條線,由此計算距離便有跡可循了。

而一次二分區的結果,便是圖中的4個方格,同時也對應了4個分區,每個分區都包含指定范圍的經緯度。那對于N次二分區來說,N越大,分區也越多,每個分區所包含的經緯度范圍就越小(所能覆蓋的地理空間越小),對應映射在一維空間上的點越小,點越小則越精準。

需要注意的是,雖然分區越多,經緯度在地理空間上代表的位置則越精準,但對于距離統計來說,并不是分區越多越好。

例子:還是延續上面一次二分區的例子進行舉例。這次我們把N+1,做二次二分區(如下圖)

圖片圖片

上圖可以看到,經過二次二分區后,分區變成了16個。理論上對應地理空間上的位置更加精確了,那么將對應的編碼轉化為一維空間上的點后,連接成線。發現對于大部分的編碼值來說,在線上相鄰的編碼在空間上也是相鄰(如:0001,0010),但是對于某些編碼來說(如:0111,1000)在線上相鄰,但是在空間上卻相差較遠。因此,對于這兩個分區來說,如果只單純考慮計算一維空間上的距離,將會造成較大誤差。

所以基于以上情況,一般不會只計算編碼值的距離,還需要結合分區作為輔助計算。通常在計算過程中,會在經緯度指定的分區周圍同時再查詢附近的幾個分區,作為距離遠近的參考,提高距離計算的精度。

5.參考資料

[1]  https://cloud.tencent.com/developer/article/1949540

關于作者

馮超,一名轉轉金融技術部后端開發程序猿

責任編輯:武曉燕 來源: 轉轉技術
相關推薦

2018-05-07 14:52:27

區塊鏈扶貧

2024-06-25 15:35:53

LangChain轉換鏈

2012-11-19 16:08:21

病毒攻擊AVAR

2016-10-19 13:18:28

數據驅動分析

2020-05-25 11:16:31

編制

2017-05-16 09:00:46

2012-03-23 15:27:24

阿拉丁

2018-01-25 13:29:16

Facebook翻譯技術開發

2024-11-29 14:50:00

模型數據

2016-12-27 15:01:08

人工智能機器識別

2025-08-15 10:45:45

2014-06-12 16:03:38

FTTH

2020-11-24 10:23:15

人工智能疫情大數據

2022-06-09 18:09:59

農業物聯網IOT

2021-06-10 14:20:46

無人機AI人工智能

2017-03-20 09:17:36

2017-04-09 16:07:10

新華三存儲服務器
點贊
收藏

51CTO技術棧公眾號

欧美成人一区在线| 亚洲作爱视频| 久久久久在线观看| 日韩中文字幕在线| 久久影院在线观看| 亚洲综合色在线观看| segui88久久综合9999| 麻豆亚洲精品| 日韩经典一区二区三区| 视频一区二区在线| 日本高清在线观看| 久久精品久久99精品久久| 日韩中文字幕网站| 写真片福利在线播放| 久久精品综合| 日韩最新免费不卡| 国产资源在线播放| 国产成人av电影| 成人黄色片网站| 亚洲毛片在线免费| 亚洲已满18点击进入久久| 国模私拍一区二区三区| 国产.com| 欧美天堂一区二区| 久久久久免费av| 亚洲激情第一页| a视频在线观看免费| 亚洲精品自拍动漫在线| 国产日韩av网站| 日韩欧美在线精品| 亚洲精品国产一区二区精华液| 成人在线观看视频网站| re久久精品视频| 欧美国产综合在线| 调教一区二区| 精品一区电影国产| 亚洲综合日本| 黄色大片在线播放| 日本一区二区乱| 精品美女久久| 欧美成人午夜激情视频| 希岛爱理一区二区三区| 和岳每晚弄的高潮嗷嗷叫视频| 亚洲成人免费av| 天堂久久午夜av| 国产精品白丝jk白祙| 国产日本亚洲高清| 麻豆理论在线观看| 国产免费高清一区| 亚洲美女在线一区| 激情不卡一区二区三区视频在线| 日本精品一区二区三区高清 久久| 亚洲视频在线一区观看| 日韩在线观看不卡| 亚洲欧洲另类精品久久综合| 精品日韩美女的视频高清| 日本在线一区二区三区| 青青草免费在线视频观看| 欧美一区二区三区视频免费| 最新国产精品久久久| 最后生还者第二季在线观看| 日韩美女福利视频| 亚洲丝袜另类动漫二区| 久久久伦理片| 成人综合av| 麻豆乱码国产一区二区三区| 欧美成年网站| 成人午夜激情免费视频| 亚洲欧美日本日韩| 日韩成人av网站| 久久精品ww人人做人人爽| 极品少妇一区二区三区精品视频| 久久久性生活视频| 欧美性xxxxhd| 久久亚洲国产精品尤物| 3d动漫啪啪精品一区二区免费| 国产精品原创巨作av| 在线播放色视频| 最近2019中文字幕mv免费看| 91精品一区国产高清在线gif| h无码动漫在线观看| 色噜噜狠狠色综合欧洲selulu| 成人1区2区| 精品一区在线播放| 亚洲欧洲日产国码二区| av在线理伦电影| 国产精品自拍小视频| 91影院在线观看| 污污视频在线看| 国产精品久久久久久久久久新婚| 顶级嫩模精品视频在线看| 国产高清自拍视频在线观看| 97色在线视频观看| 国产精品99久久久久| 中文字幕日本在线观看| 国产成人精品免费视频| 91在线porny国产在线看| 久久不射影院| 亚洲最大福利视频网站| 国产日韩欧美a| 欧美xx视频| 日韩久久不卡| 欧美日韩中字一区| 日韩极品一区| 777.av| 精品中文字幕在线观看| 国产成人精品影院| 女人天堂av在线播放| 国产伦视频一区二区三区| 亚洲欧洲成人自拍| 欧美第一在线视频| 91午夜在线观看| 日韩精品视频三区| 巨乳诱惑日韩免费av| yourporn在线观看视频| 成人亚洲欧美一区二区三区| 中文字幕在线观看一区| 国产一区二区在线观| 欧美视频在线观看视频| 亚洲天堂av在线免费| 精品一区二区三区免费视频| 丝袜中文在线| 日韩欧美视频第二区| 日韩欧美国产不卡| 国产一区二区三区的电影| 97超碰人人在线| 久久伊人一区二区| 国产精品免费网站在线观看| 青青草国产免费一区二区下载| 日本中文字幕高清视频| 国产精品流白浆视频| 久久免费高清| 啊啊啊久久久| 欧美在线视频在线播放完整版免费观看| 国产成人亚洲精品狼色在线| 羞羞答答国产精品www一本| 污黄色在线观看| 成人在线视频网| 婷婷丁香久久五月婷婷| 精品久久视频| 免费国产在线观看| 鬼打鬼之黄金道士1992林正英| 欧美三级中文字| 三级精品在线观看| 周于希免费高清在线观看 | 精品中文字幕在线| av一区二区不卡| 国产精品国产| 操碰在线免费| 久久波多野结衣| 亚洲成人久久网| 91亚洲精品一区二区乱码| 亚洲视频精选| 在线黄色国产视频| 欧美成人dvd在线视频| 亚洲精品在线电影| 93久久精品日日躁夜夜躁欧美| 91精品国产乱码久久久竹菊| 中国一级特黄毛片大片| 精品在线一区| 亚洲精品影视在线观看| 国产日韩视频一区二区三区| 国产欧美一区| bestiality新另类大全| 91免费黄视频| 国产精品久久久久久久久免费看 | 国产精品www.| free性护士videos欧美| 欧美三级一级片| 国产91网红主播在线观看| 欧美亚洲尤物久久| 国产一区二区三区高清播放| 加勒比色老久久爱综合网| 黄色片在线播放| 成熟丰满熟妇高潮xxxxx视频| 国产精品高潮呻吟视频| 亚洲成av人片在线观看香蕉| 国产精品福利影院| 性欧美暴力猛交另类hd| 亚洲国产视频二区| 黄在线免费看| 91福利国产成人精品播放| 久久精品国产精品国产精品污| 久久国产视频网站| 欧洲精品一区二区三区在线观看| 粉嫩av一区二区三区粉嫩| 91视频综合| 日韩国产激情| 可以在线观看的黄色| 日本a级片免费观看| 久久久综合亚洲91久久98| 国外成人在线视频| 精品乱人伦小说| 午夜欧美在线一二页| av中文字幕一区| 国产视频欧美| 91视频一区| 欧美色图婷婷| 欧美日韩精品免费观看视完整| 成人高清免费在线播放|