内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

怎么用java實(shí)現(xiàn)根據(jù)一個(gè)經(jīng)緯度查詢附近的樓盤信息

這篇文章主要講解了“怎么用java實(shí)現(xiàn)根據(jù)一個(gè)經(jīng)緯度查詢附近的樓盤信息”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“怎么用java實(shí)現(xiàn)根據(jù)一個(gè)經(jīng)緯度查詢附近的樓盤信息”吧!

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、美蘭網(wǎng)絡(luò)推廣、小程序定制開發(fā)、美蘭網(wǎng)絡(luò)營(yíng)銷、美蘭企業(yè)策劃、美蘭品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供美蘭建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:m.rwnh.cn

實(shí)現(xiàn)原理

先算出該點(diǎn)周圍的矩形的四個(gè)點(diǎn),然后使用經(jīng)緯度去直接匹配數(shù)據(jù)庫(kù)中的記錄。

java代碼

/**
     * 根據(jù)傳入的經(jīng)緯度和半徑范圍確定附近的經(jīng)緯度范圍
     *
     * @param longitude 經(jīng)度
     * @param latitude 緯度
     * @param distance 距離 多少千米
     * @return
     */
    public static Location getNearbyLocation(double longitude, double latitude, double distance) {

        boolean b = LocationUtil.checkItude(longitude + "", latitude + "");

        if (!b) {
            return null;
        }

        //先計(jì)算查詢點(diǎn)的經(jīng)緯度范圍
        double r = 6371;//地球半徑千米
        double dlng = 2 * Math.asin(Math.sin(distance / (2 * r)) / Math.cos(latitude * Math.PI / 180));
        dlng = dlng * 180 / Math.PI;//角度轉(zhuǎn)為弧度
        double dlat = distance / r;
        dlat = dlat * 180 / Math.PI;
        double minlat = latitude - dlat;
        double maxlat = latitude + dlat;
        double minlng = longitude - dlng;
        double maxlng = longitude + dlng;

        Location location = new Location();
        location.setLatitude(latitude);
        location.setLongitude(longitude);
        location.setMaxLatitude(maxlat + "");
        location.setMinLatitude(minlat + "");
        location.setMaxLongitude(maxlng + "");
        location.setMinLongitude(minlng + "");
        return location;
    }

經(jīng)緯度格式校驗(yàn)

/**
     * 經(jīng)緯度校驗(yàn)
     * 經(jīng)度longitude: (?:[0-9]|[1-9][0-9]|1[0-7][0-9]|180)\\.([0-9]{6})
     * 緯度latitude:  (?:[0-9]|[1-8][0-9]|90)\\.([0-9]{6})
     *
     * @return
     */
    public static boolean checkItude(String longitude, String latitude) {
        String reglo = "((?:[0-9]|[1-9][0-9]|1[0-7][0-9])\\.([0-9]{0,6}))|((?:180)\\.([0]{0,6}))";
        String regla = "((?:[0-9]|[1-8][0-9])\\.([0-9]{0,6}))|((?:90)\\.([0]{0,6}))";
        longitude = longitude.trim();
        latitude = latitude.trim();
        return longitude.matches(reglo) == true ? latitude.matches(regla) : false;
    }

求兩點(diǎn)之間的距離

    /**
     * 求兩點(diǎn)之間的距離
     * @param lng1 A點(diǎn)經(jīng)度
     * @param lat1 A點(diǎn)緯度
     * @param lng2 B點(diǎn)經(jīng)度
     * @param lat2 B點(diǎn)緯度
     * @return 兩點(diǎn)距離
     */
    public static double getDistance(double lng1, double lat1, double lng2, double lat2) {
        double EARTH_RADIUS = 6371;
        double radiansAX = Math.toRadians(lng1); // A經(jīng)弧度
        double radiansAY = Math.toRadians(lat1); // A緯弧度
        double radiansBX = Math.toRadians(lng2); // B經(jīng)弧度
        double radiansBY = Math.toRadians(lat2); // B緯弧度

        // 公式中“cosβ1cosβ2cos(α1-α2)+sinβ1sinβ2”的部分,得到∠AOB的cos值
        double cos = Math.cos(radiansAY) * Math.cos(radiansBY) * Math.cos(radiansAX - radiansBX)
                + Math.sin(radiansAY) * Math.sin(radiansBY);
        double acos = Math.acos(cos); // 反余弦值
        return EARTH_RADIUS * acos; // 最終結(jié)果
    }

拿到4個(gè)確定范圍的經(jīng)緯度就可以去數(shù)據(jù)庫(kù)查詢了,由于數(shù)據(jù)庫(kù)經(jīng)緯度存的是一個(gè)字段需要切割下字段(使用的是MySQL),在 原本的條件下拼接上范圍條件就完成!

條件sql

substring( location, 1, LOCATE ( ',', location ) - 1 ) >= #{minLongitude}
AND substring( location, 1, LOCATE ( ',', location ) - 1 ) <= #{maxLongitude}
AND substring( location, LOCATE ( ',', location ) + 1, LENGTH ( a.location ) - 1 ) >= #{minLatitude}
AND substring( location, LOCATE ( ',', location ) + 1, LENGTH ( a.location ) - 1 ) <= #{maxLatitude}

得到的結(jié)果進(jìn)行比較刪除

因?yàn)榈玫降慕Y(jié)果是個(gè)正方形方位內(nèi)的數(shù)據(jù),想要在地圖上顯示,會(huì)發(fā)現(xiàn)超過(guò)了地圖上圓圈外也有數(shù)據(jù),這時(shí)候就需要再做一下處理。

//判斷兩點(diǎn)之間的距離是否大于半徑,大于的刪除
for (int i = 0; i < 之前查詢結(jié)果的len; i++) {
	double distance = LocationUtil.getDistance(longitude, latitude, longitude1, latitude1);
	if (distance > kilometer) {
		list.remove(i);
		i--;
		len--;
	}
}

感謝各位的閱讀,以上就是“怎么用java實(shí)現(xiàn)根據(jù)一個(gè)經(jīng)緯度查詢附近的樓盤信息”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)怎么用java實(shí)現(xiàn)根據(jù)一個(gè)經(jīng)緯度查詢附近的樓盤信息這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

網(wǎng)站名稱:怎么用java實(shí)現(xiàn)根據(jù)一個(gè)經(jīng)緯度查詢附近的樓盤信息
當(dāng)前URL:http://m.rwnh.cn/article0/ggddoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、企業(yè)建站、網(wǎng)站收錄、網(wǎng)頁(yè)設(shè)計(jì)公司、App開發(fā)、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
慈溪市| 丹凤县| 镇平县| 沙坪坝区| 达日县| 织金县| 边坝县| 天峨县| 锡林浩特市| 哈巴河县| 闵行区| 鄂伦春自治旗| 三门县| 日喀则市| 吕梁市| 建宁县| 文山县| 铜山县| 轮台县| 建始县| 噶尔县| 涞水县| 合江县| 扶余县| 永年县| 广宁县| 达孜县| 高阳县| 通城县| 海宁市| 叙永县| 永寿县| 华蓥市| 和龙市| 平邑县| 成武县| 雷山县| 托克逊县| 山西省| 株洲市| 灵石县|