這篇文章主要講解了“怎么用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
先算出該點(diǎn)周圍的矩形的四個(gè)點(diǎn),然后使用經(jīng)緯度去直接匹配數(shù)據(jù)庫(kù)中的記錄。
/** * 根據(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)度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)之間的距離 * @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),在 原本的條件下拼接上范圍條件就完成!
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}
因?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)