根據(jù)給定點的經(jīng)緯度和特定距離取范圍類的數(shù)據(jù)

一线召、計算兩個經(jīng)緯度的距離

根據(jù)經(jīng)緯度計算距離
  • R為地球半徑,可取平均值 6371km多矮;
  • φ1, φ2 表示兩點的緯度缓淹;
  • Δλ 表示兩點經(jīng)度的差值。
    /**   
     * Created by yuliang on 2015/3/20.   
     */    
    public class LocationUtils {    
        private static double EARTH_RADIUS = 6378.137;    
        
        private static double rad(double d) {    
            return d * Math.PI / 180.0;    
        }    
        
        /**   
         * 通過經(jīng)緯度獲取距離(單位:米)   
         * @param lat1   
         * @param lng1   
         * @param lat2   
         * @param lng2   
         * @return   
         */    
        public static double getDistance(double lat1, double lng1, double lat2,    
                                         double lng2) {    
            double radLat1 = rad(lat1);    
            double radLat2 = rad(lat2);    
            double a = radLat1 - radLat2;    
            double b = rad(lng1) - rad(lng2);    
            double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)    
                    + Math.cos(radLat1) * Math.cos(radLat2)    
                    * Math.pow(Math.sin(b / 2), 2)));    
            s = s * EARTH_RADIUS;    
            s = Math.round(s * 10000d) / 10000d;    
            s = s*1000;    
            return s;    
        }    
    }    

二塔逃、根據(jù)某一經(jīng)緯度和距離計算附近的經(jīng)緯度

  • R為地球半徑讯壶,可取平均值 6371km;
  • φ1, φ2 表示兩點的緯度患雏;
  • Δλ 表示兩點經(jīng)度的差值鹏溯。

1、計算步驟:

  • 先來求東西兩側的的范圍邊界淹仑。在haversin公式中令φ1 = φ2丙挽,可得:
計算公式
double dlng = 2 * Math.asin(Math.sin(gpsAround.getDistance() / (2 * EARTH_RADIUS)) / Math.cos(gpsAround.getLatitude().doubleValue()));
// 弧度轉換成角度
dlng = Math.toRadians(dlng);
  • 然后求南北兩側的范圍邊界肺孵,在haversin公式中令 Δλ = 0,可得:
公式
    // 然后求南北兩側的范圍邊界颜阐,在haversin公式中令 Δλ = 0
    double dlat = gpsAround.getDistance() / EARTH_RADIUS;
    // 弧度轉換成角度
    dlng = Math.toDegrees(dlat);
  • 確定四個點坐標(即兩個經(jīng)度和兩個緯度)
    // 坐標 10
    GPS left_bottom = new ShopAddress().new GPS();
    left_bottom.setLatitude(gpsAround.getLatitude().subtract(new BigDecimal(dlat)));
    left_bottom.setLongitude(gpsAround.getLongitude().subtract(new BigDecimal(dlng)));

    // 坐標 01
    GPS right_top = new ShopAddress().new GPS();
    right_top.setLatitude(gpsAround.getLatitude().add(new BigDecimal(dlat)));
    right_top.setLongitude(gpsAround.getLongitude().add(new BigDecimal(dlng)));

2平窘、用例

private final static double EARTH_RADIUS = 6371.393;// 地球半徑

  private static Map<String, GPS> getNearbyGCJ(GPSAround gpsAround) {
    if (null == gpsAround) {
      return null;
    }

    // 求東西兩側的的范圍邊界。在haversin公式中令φ1 = φ2(維度相同),傳入的距離為 米凳怨,轉換為千米
    double dlng = 2 * Math.asin(Math.sin((gpsAround.getDistance() / 1000) / (2 * EARTH_RADIUS))
        / Math.cos(gpsAround.getLatitude().doubleValue() * Math.PI / 180));
    // 弧度轉換成角度
    // dlng = Math.toRadians(dlng);
    dlng = Math.toDegrees(dlng);

    // 然后求南北兩側的范圍邊界瑰艘,在haversin公式中令 Δλ = 0
    double dlat = (gpsAround.getDistance() / 1000) / EARTH_RADIUS;
    // 弧度轉換成角度
    dlat = Math.toDegrees(dlat);

    // 通過計算可以得到上下左右四個點的經(jīng)緯度,即肤舞,兩個經(jīng)度紫新,兩個緯度
    // 坐標 10
    GPS left_bottom = new GPS(
        gpsAround.getLongitude().subtract(new BigDecimal(dlng)).setScale(8,
            BigDecimal.ROUND_HALF_UP),
        gpsAround.getLatitude().subtract(new BigDecimal(dlat)).setScale(8,
            BigDecimal.ROUND_HALF_UP));

    // 坐標 01
    GPS right_top = new GPS(
        gpsAround.getLongitude().add(new BigDecimal(dlng)).setScale(8, BigDecimal.ROUND_HALF_UP),
        gpsAround.getLatitude().add(new BigDecimal(dlat)).setScale(8, BigDecimal.ROUND_HALF_UP));

    Map<String, GPS> gpsMap = new HashMap<>();
    gpsMap.put("top", right_top);
    gpsMap.put("bottom", left_bottom);

    return gpsMap;
  }

三、mysql計算邏輯(性能較差)

SELECT
    shop_id ,
    shop_name ,
    lng ,
    lat ,
    POWER(lat - 40.05748 , 2) + POWER(lng - 116.30759 , 2) * POWER(COS((lat + 40.05748) / 2) , 2) AS distance
FROM
    shop_list
HAVING
    distance < 1000
ORDER BY
    distance
LIMIT 100;

效果展示

效果展示
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末李剖,一起剝皮案震驚了整個濱河市芒率,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌篙顺,老刑警劉巖偶芍,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異德玫,居然都是意外死亡匪蟀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門宰僧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來材彪,“玉大人,你說我怎么就攤上這事撒桨〔榭蹋” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵凤类,是天一觀的道長。 經(jīng)常有香客問我普气,道長谜疤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任现诀,我火速辦了婚禮夷磕,結果婚禮上,老公的妹妹穿的比我還像新娘仔沿。我一直安慰自己坐桩,他們只是感情好,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布封锉。 她就那樣靜靜地躺著绵跷,像睡著了一般膘螟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上碾局,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天砌溺,我揣著相機與錄音锡搜,去河邊找鬼。 笑死,一個胖子當著我的面吹牛豁陆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播矢劲,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蒲拉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了忽冻?” 一聲冷哼從身側響起真朗,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甚颂,沒想到半個月后蜜猾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡振诬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年蹭睡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赶么。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡肩豁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辫呻,到底是詐尸還是另有隱情清钥,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布放闺,位于F島的核電站祟昭,受9級特大地震影響,放射性物質發(fā)生泄漏怖侦。R本人自食惡果不足惜篡悟,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望匾寝。 院中可真熱鬧搬葬,春花似錦、人聲如沸艳悔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猜年。三九已至抡锈,卻和暖如春疾忍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背企孩。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工锭碳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人勿璃。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓擒抛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親补疑。 傳聞我的和親對象是個殘疾皇子歧沪,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 這些經(jīng)緯線是怎樣定出來的呢诊胞?地球是在不停地繞地軸旋轉(地軸是一根通過地球南北兩極和地球中心的假想線),在地球中腰畫...
    Akitas閱讀 1,164評論 0 2
  • 1 序: 很多新接觸GIS的人員對地圖投影以及坐標系統(tǒng)很難理解锹杈,甚至做GIS開發(fā)做了好幾年的人也有這方面的疑惑撵孤,地...
    三維GIS那點事_王躍軍閱讀 17,401評論 3 43
  • 知識科普 這些經(jīng)緯線是怎樣定出來的呢?地球是在不停地繞地軸旋轉(地軸是一根通過地球南北兩極和地球中心的 假想線)竭望,...
    Yumazhiyao閱讀 2,953評論 1 3
  • 雖然是個很熱的秋天邪码,但也是個豐收的季節(jié). 畫點水果……是的……畫完之后我都給吃了,不浪費 #Hello October#
    艾米札記閱讀 105評論 2 0
  • 老媽說咬清,過陣子來看外孫闭专,順便給我減減負,多好啊旧烧,我可以輕松下了影钉。不必說,肯定會帶來煎餅掘剪,羊肉平委,還有一堆嘮叨。常年在...
    sylvia_winter08閱讀 164評論 0 0